@@ -53,7 +53,7 @@ impl Container {
53
53
// Since we passed "--rm" flag, docker will automatically start removing the container.
54
54
// Ignore any error for manual removal.
55
55
let _: Result < ( ) > = async {
56
- self . rename ( format ! ( "removing-{}" , self . id) ) . await ?;
56
+ self . rename ( & format ! ( "removing-{}" , self . id) ) . await ?;
57
57
let options = bollard:: container:: RemoveContainerOptions {
58
58
force : true ,
59
59
..Default :: default ( )
@@ -78,18 +78,16 @@ impl Container {
78
78
Ok ( ( ) )
79
79
}
80
80
81
- pub async fn rename < U : AsRef < str > > ( & self , name : U ) -> Result < ( ) > {
82
- let required = bollard:: container:: RenameContainerOptions {
83
- name : name. as_ref ( ) ,
84
- } ;
81
+ pub async fn rename ( & self , name : & str ) -> Result < ( ) > {
82
+ let required = bollard:: container:: RenameContainerOptions { name } ;
85
83
self . docker . rename_container ( & self . id , required) . await ?;
86
84
Ok ( ( ) )
87
85
}
88
86
89
- pub async fn exec < U : AsRef < str > , T : AsRef < [ U ] > > ( & self , cmd : T ) -> Result < IoStream > {
90
- let iter = cmd. as_ref ( ) . iter ( ) . map ( |s| s. as_ref ( ) . into ( ) ) ;
87
+ pub async fn exec < T : ToString > ( & self , cmd : & [ T ] ) -> Result < IoStream > {
88
+ let cmd = cmd. iter ( ) . map ( |s| s. to_string ( ) ) . collect ( ) ;
91
89
let options = bollard:: exec:: CreateExecOptions {
92
- cmd : Some ( iter . collect ( ) ) ,
90
+ cmd : Some ( cmd ) ,
93
91
attach_stdin : Some ( true ) ,
94
92
attach_stdout : Some ( true ) ,
95
93
attach_stderr : Some ( true ) ,
@@ -105,17 +103,16 @@ impl Container {
105
103
..Default :: default ( )
106
104
} ;
107
105
let response = self . docker . start_exec ( & id, Some ( options) ) . await ?;
106
+ let bollard:: exec:: StartExecResults :: Attached { input, output } = response else {
107
+ unreachable ! ( "we asked for attached IO streams" ) ;
108
+ } ;
108
109
109
- if let bollard:: exec:: StartExecResults :: Attached { input, output } = response {
110
- return Ok ( IoStream {
111
- output,
112
- input,
113
- source : IoStreamSource :: Exec ( id) ,
114
- docker : self . docker . clone ( ) ,
115
- } ) ;
116
- }
117
-
118
- unreachable ! ( ) ;
110
+ Ok ( IoStream {
111
+ output,
112
+ input,
113
+ source : IoStreamSource :: Exec ( id) ,
114
+ docker : self . docker . clone ( ) ,
115
+ } )
119
116
}
120
117
121
118
pub async fn attach ( & self ) -> Result < IoStream > {
@@ -141,15 +138,11 @@ impl Container {
141
138
} )
142
139
}
143
140
144
- async fn inspect ( & self ) -> Result < bollard :: models :: ContainerInspectResponse > {
145
- Ok ( self
141
+ pub async fn name ( & self ) -> Result < String > {
142
+ let inspect = self
146
143
. docker
147
144
. inspect_container ( self . id . as_ref ( ) , None )
148
- . await ?)
149
- }
150
-
151
- pub async fn name ( & self ) -> Result < String > {
152
- let inspect = self . inspect ( ) . await ?;
145
+ . await ?;
153
146
let name = inspect. name . context ( "Failed to obtain container name" ) ?;
154
147
Ok ( name)
155
148
}
@@ -183,67 +176,43 @@ impl Container {
183
176
}
184
177
}
185
178
186
- pub async fn mkdir < T : AsRef < std:: path:: Path > > ( & self , path : T ) -> Result < ( ) > {
187
- self . exec ( [ "mkdir" , "-p" , & path. as_ref ( ) . to_string_lossy ( ) ] )
188
- . await ?
189
- . collect ( )
190
- . await ?;
179
+ // Note: we use `&str` here instead of `Path` because docker API expects string instead `OsStr`.
180
+ pub async fn mkdir ( & self , path : & str ) -> Result < ( ) > {
181
+ self . exec ( & [ "mkdir" , "-p" , path] ) . await ?. collect ( ) . await ?;
191
182
Ok ( ( ) )
192
183
}
193
184
194
- pub async fn mkdir_for < T : AsRef < std :: path :: Path > > ( & self , path : T ) -> Result < ( ) > {
195
- if let Some ( path) = path. as_ref ( ) . parent ( ) {
196
- self . mkdir ( path) . await ?;
185
+ pub async fn mkdir_for ( & self , path : & str ) -> Result < ( ) > {
186
+ if let Some ( path) = std :: path:: Path :: new ( path ) . parent ( ) {
187
+ self . mkdir ( path. to_str ( ) . unwrap ( ) ) . await ?;
197
188
}
198
189
Ok ( ( ) )
199
190
}
200
191
201
- pub async fn mknod < T : AsRef < std:: path:: Path > > (
202
- & self ,
203
- node : T ,
204
- ( major, minor) : ( u32 , u32 ) ,
205
- ) -> Result < ( ) > {
206
- self . rm ( & node) . await ?;
207
- self . mkdir_for ( & node) . await ?;
208
- self . exec ( [
209
- "mknod" ,
210
- & node. as_ref ( ) . to_string_lossy ( ) ,
211
- "c" ,
212
- & major. to_string ( ) ,
213
- & minor. to_string ( ) ,
214
- ] )
215
- . await ?
216
- . collect ( )
217
- . await ?;
218
- Ok ( ( ) )
219
- }
220
-
221
- pub async fn symlink < T : AsRef < std:: path:: Path > , U : AsRef < std:: path:: Path > > (
222
- & self ,
223
- source : T ,
224
- link : U ,
225
- ) -> Result < ( ) > {
226
- self . mkdir_for ( & link) . await ?;
227
- self . exec ( [
228
- "ln" ,
229
- "-sf" ,
230
- & source. as_ref ( ) . to_string_lossy ( ) ,
231
- & link. as_ref ( ) . to_string_lossy ( ) ,
232
- ] )
233
- . await ?
234
- . collect ( )
235
- . await ?;
192
+ pub async fn mknod ( & self , node : & str , ( major, minor) : ( u32 , u32 ) ) -> Result < ( ) > {
193
+ self . rm ( node) . await ?;
194
+ self . mkdir_for ( node) . await ?;
195
+ self . exec ( & [ "mknod" , node, "c" , & major. to_string ( ) , & minor. to_string ( ) ] )
196
+ . await ?
197
+ . collect ( )
198
+ . await ?;
236
199
Ok ( ( ) )
237
200
}
238
201
239
- pub async fn rm < T : AsRef < std:: path:: Path > > ( & self , node : T ) -> Result < ( ) > {
240
- self . exec ( [ "rm" , "-f" , & node. as_ref ( ) . to_string_lossy ( ) ] )
202
+ pub async fn symlink ( & self , source : & str , link : & str ) -> Result < ( ) > {
203
+ self . mkdir_for ( link) . await ?;
204
+ self . exec ( & [ "ln" , "-sf" , source, link] )
241
205
. await ?
242
206
. collect ( )
243
207
. await ?;
244
208
Ok ( ( ) )
245
209
}
246
210
211
+ pub async fn rm ( & self , node : & str ) -> Result < ( ) > {
212
+ self . exec ( & [ "rm" , "-f" , node] ) . await ?. collect ( ) . await ?;
213
+ Ok ( ( ) )
214
+ }
215
+
247
216
pub async fn device (
248
217
& self ,
249
218
( major, minor) : ( u32 , u32 ) ,
@@ -328,7 +297,7 @@ fn signal_stream(kind: SignalKind) -> impl tokio_stream::Stream<Item = Result<Si
328
297
async_stream:: try_stream! {
329
298
let sig_kind = SignalKind :: hangup( ) ;
330
299
let mut sig_stream = signal( kind) ?;
331
- while let Some ( _ ) = sig_stream. recv( ) . await {
300
+ while sig_stream. recv( ) . await . is_some ( ) {
332
301
yield sig_kind;
333
302
}
334
303
}
0 commit comments