@@ -89,50 +89,33 @@ impl Client {
89
89
}
90
90
91
91
pub unsafe fn open ( s : & str ) -> Result < Client , ErrFromEnv > {
92
- match ( Self :: from_fifo ( s) , Self :: from_pipe ( s) ) {
93
- ( Some ( Ok ( c) ) , _) | ( _, Some ( Ok ( c) ) ) => Ok ( c) ,
94
- ( Some ( Err ( e) ) , _) | ( _, Some ( Err ( e) ) ) => Err ( e) ,
95
- ( None , None ) => Err ( ErrFromEnv :: ParseEnvVar ) ,
96
- }
92
+ Ok ( Self :: from_fifo ( s) ?. unwrap_or ( Self :: from_pipe ( s) ?. ok_or ( ErrFromEnv :: ParseEnvVar ) ?) )
97
93
}
98
94
99
95
/// `--jobserver-auth=fifo:PATH`
100
- fn from_fifo ( s : & str ) -> Option < Result < Client , ErrFromEnv > > {
96
+ fn from_fifo ( s : & str ) -> Result < Option < Client > , ErrFromEnv > {
101
97
let mut parts = s. splitn ( 2 , ':' ) ;
102
98
if parts. next ( ) . unwrap ( ) != "fifo" {
103
- return None ;
99
+ return Ok ( None ) ;
104
100
}
105
- let path = match parts. next ( ) {
106
- Some ( p) => Path :: new ( p) ,
107
- None => return Some ( Err ( ErrFromEnv :: ParseEnvVar ) ) ,
108
- } ;
101
+ let path = Path :: new ( parts. next ( ) . ok_or ( ErrFromEnv :: ParseEnvVar ) ?) ;
109
102
let file = match OpenOptions :: new ( ) . read ( true ) . write ( true ) . open ( path) {
110
103
Ok ( f) => f,
111
- Err ( e) => return Some ( Err ( ErrFromEnv :: OpenFile ( e. to_string ( ) ) ) ) ,
104
+ Err ( e) => return Err ( ErrFromEnv :: OpenFile ( e. to_string ( ) ) ) ,
112
105
} ;
113
- Some ( Ok ( Client :: Fifo {
106
+ Ok ( Some ( Client :: Fifo {
114
107
file,
115
108
path : path. into ( ) ,
116
109
} ) )
117
110
}
118
111
119
112
/// `--jobserver-auth=R,W`
120
- unsafe fn from_pipe ( s : & str ) -> Option < Result < Client , ErrFromEnv > > {
113
+ unsafe fn from_pipe ( s : & str ) -> Result < Option < Client > , ErrFromEnv > {
121
114
let mut parts = s. splitn ( 2 , ',' ) ;
122
115
let read = parts. next ( ) . unwrap ( ) ;
123
- let write = match parts. next ( ) {
124
- Some ( s) => s,
125
- None => return Some ( Err ( ErrFromEnv :: ParseEnvVar ) ) ,
126
- } ;
127
-
128
- let read = match read. parse ( ) {
129
- Ok ( n) => n,
130
- Err ( _) => return Some ( Err ( ErrFromEnv :: ParseEnvVar ) ) ,
131
- } ;
132
- let write = match write. parse ( ) {
133
- Ok ( n) => n,
134
- Err ( _) => return Some ( Err ( ErrFromEnv :: ParseEnvVar ) ) ,
135
- } ;
116
+ let write = parts. next ( ) . ok_or ( ErrFromEnv :: ParseEnvVar ) ?;
117
+ let read = read. parse ( ) . map_err ( |_| ErrFromEnv :: ParseEnvVar ) ?;
118
+ let write = write. parse ( ) . map_err ( |_| ErrFromEnv :: ParseEnvVar ) ?;
136
119
137
120
// Ok so we've got two integers that look like file descriptors, but
138
121
// for extra sanity checking let's see if they actually look like
@@ -145,9 +128,9 @@ impl Client {
145
128
if check_fd ( read) && check_fd ( write) {
146
129
drop ( set_cloexec ( read, true ) ) ;
147
130
drop ( set_cloexec ( write, true ) ) ;
148
- Some ( Ok ( Client :: from_fds ( read, write) ) )
131
+ Ok ( Some ( Client :: from_fds ( read, write) ) )
149
132
} else {
150
- Some ( Err ( ErrFromEnv :: InvalidDescriptor ( read, write) ) )
133
+ Err ( ErrFromEnv :: InvalidDescriptor ( read, write) )
151
134
}
152
135
}
153
136
0 commit comments