1use crate::api_common::config::HasConfig;
2use crate::api_common::request;
3use crate::api_common::Error;
4use http::request::Builder;
5use std::future::Future;
6use std::pin::Pin;
7pub trait ContainersCompat: HasConfig + Send + Sync {
8 fn image_commit<'a>(
14 &'a self,
15 params: Option<crate::v5::params::ImageCommit<'a>>,
16 ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
17 Box::pin(request::execute_request_unit(
18 self.get_config(),
19 move |mut req_builder: Builder| {
20 req_builder = req_builder.method("POST");
21 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
22 let mut request_path = request_url.path().to_owned();
23 if request_path.ends_with('/') {
24 request_path.pop();
25 }
26 request_path.push_str("/commit");
27 request_url.set_path(&request_path);
28 if let Some(params) = ¶ms {
29 let mut query_pairs = request_url.query_pairs_mut();
30 if let Some(container) = params.container {
31 query_pairs.append_pair("container", container);
32 }
33 if let Some(repo) = params.repo {
34 query_pairs.append_pair("repo", repo);
35 }
36 if let Some(tag) = params.tag {
37 query_pairs.append_pair("tag", tag);
38 }
39 if let Some(comment) = params.comment {
40 query_pairs.append_pair("comment", comment);
41 }
42 if let Some(author) = params.author {
43 query_pairs.append_pair("author", author);
44 }
45 if let Some(pause) = params.pause {
46 query_pairs.append_pair("pause", &pause.to_string());
47 }
48 if let Some(changes) = params.changes {
49 query_pairs.append_pair("changes", changes);
50 }
51 if let Some(squash) = params.squash {
52 query_pairs.append_pair("squash", &squash.to_string());
53 }
54 }
55 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
56 req_builder = req_builder.uri(hyper_uri);
57 Ok(req_builder.body(String::new())?)
58 },
59 ))
60 }
61 fn container_delete<'a>(
65 &'a self,
66 name: &'a str,
67 params: Option<crate::v5::params::ContainerDelete>,
68 ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
69 Box::pin(request::execute_request_unit(
70 self.get_config(),
71 move |mut req_builder: Builder| {
72 req_builder = req_builder.method("DELETE");
73 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
74 let mut request_path = request_url.path().to_owned();
75 if request_path.ends_with('/') {
76 request_path.pop();
77 }
78 request_path.push_str("/containers/{name}");
79 request_path = request_path.replace("{name}", name);
80 request_url.set_path(&request_path);
81 if let Some(params) = ¶ms {
82 let mut query_pairs = request_url.query_pairs_mut();
83 if let Some(force) = params.force {
84 query_pairs.append_pair("force", &force.to_string());
85 }
86 if let Some(v) = params.v {
87 query_pairs.append_pair("v", &v.to_string());
88 }
89 if let Some(link) = params.link {
90 query_pairs.append_pair("link", &link.to_string());
91 }
92 }
93 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
94 req_builder = req_builder.uri(hyper_uri);
95 Ok(req_builder.body(String::new())?)
96 },
97 ))
98 }
99 fn container_archive<'a>(
105 &'a self,
106 name: &'a str,
107 params: Option<crate::v5::params::ContainerArchive<'a>>,
108 ) -> Pin<Box<dyn Future<Output = Result<String, Error>> + Send + 'a>> {
109 Box::pin(request::execute_request_json(
110 self.get_config(),
111 move |mut req_builder: Builder| {
112 req_builder = req_builder.method("GET");
113 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
114 let mut request_path = request_url.path().to_owned();
115 if request_path.ends_with('/') {
116 request_path.pop();
117 }
118 request_path.push_str("/containers/{name}/archive");
119 request_path = request_path.replace("{name}", name);
120 request_url.set_path(&request_path);
121 if let Some(params) = ¶ms {
122 let mut query_pairs = request_url.query_pairs_mut();
123 query_pairs.append_pair("path", params.path);
124 }
125 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
126 req_builder = req_builder.uri(hyper_uri);
127 Ok(req_builder.body(String::new())?)
128 },
129 ))
130 }
131 fn put_container_archive<'a>(
137 &'a self,
138 name: &'a str,
139 params: Option<crate::v5::params::PutContainerArchive<'a>>,
140 request: String,
141 ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
142 Box::pin(request::execute_request_unit(
143 self.get_config(),
144 move |mut req_builder: Builder| {
145 req_builder = req_builder.method("GET");
146 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
147 let mut request_path = request_url.path().to_owned();
148 if request_path.ends_with('/') {
149 request_path.pop();
150 }
151 request_path.push_str("/containers/{name}/archive");
152 request_path = request_path.replace("{name}", name);
153 request_url.set_path(&request_path);
154 if let Some(params) = ¶ms {
155 let mut query_pairs = request_url.query_pairs_mut();
156 query_pairs.append_pair("path", params.path);
157 if let Some(no_overwrite_dir_non_dir) = params.no_overwrite_dir_non_dir {
158 query_pairs.append_pair("noOverwriteDirNonDir", no_overwrite_dir_non_dir);
159 }
160 if let Some(copy_uidgid) = params.copy_uidgid {
161 query_pairs.append_pair("copyUIDGID", copy_uidgid);
162 }
163 }
164 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
165 req_builder = req_builder.uri(hyper_uri);
166 let body = serde_json::to_string(&request)?;
167 req_builder = req_builder.header(hyper::header::CONTENT_TYPE, "application/json");
168 req_builder = req_builder.header(hyper::header::CONTENT_LENGTH, body.len());
169 Ok(req_builder.body(body)?)
170 },
171 ))
172 }
173 fn container_attach<'a>(
183 &'a self,
184 name: &'a str,
185 params: Option<crate::v5::params::ContainerAttach<'a>>,
186 ) -> Pin<
187 Box<
188 dyn Future<Output = Result<hyper_util::rt::TokioIo<hyper::upgrade::Upgraded>, Error>>
189 + Send
190 + 'a,
191 >,
192 > {
193 Box::pin(request::execute_request_upgrade(
194 self.get_config(),
195 move |mut req_builder: Builder| {
196 req_builder = req_builder.method("POST");
197 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
198 let mut request_path = request_url.path().to_owned();
199 if request_path.ends_with('/') {
200 request_path.pop();
201 }
202 request_path.push_str("/containers/{name}/attach");
203 request_path = request_path.replace("{name}", name);
204 request_url.set_path(&request_path);
205 if let Some(params) = ¶ms {
206 let mut query_pairs = request_url.query_pairs_mut();
207 if let Some(detach_keys) = params.detach_keys {
208 query_pairs.append_pair("detachKeys", detach_keys);
209 }
210 if let Some(logs) = params.logs {
211 query_pairs.append_pair("logs", &logs.to_string());
212 }
213 if let Some(stream) = params.stream {
214 query_pairs.append_pair("stream", &stream.to_string());
215 }
216 if let Some(stdout) = params.stdout {
217 query_pairs.append_pair("stdout", &stdout.to_string());
218 }
219 if let Some(stderr) = params.stderr {
220 query_pairs.append_pair("stderr", &stderr.to_string());
221 }
222 if let Some(stdin) = params.stdin {
223 query_pairs.append_pair("stdin", &stdin.to_string());
224 }
225 }
226 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
227 req_builder = req_builder.uri(hyper_uri);
228 Ok(req_builder.body(String::new())?)
229 },
230 ))
231 }
232 fn container_export<'a>(
238 &'a self,
239 name: &'a str,
240 ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
241 Box::pin(request::execute_request_unit(
242 self.get_config(),
243 move |mut req_builder: Builder| {
244 req_builder = req_builder.method("GET");
245 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
246 let mut request_path = request_url.path().to_owned();
247 if request_path.ends_with('/') {
248 request_path.pop();
249 }
250 request_path.push_str("/containers/{name}/export");
251 request_path = request_path.replace("{name}", name);
252 request_url.set_path(&request_path);
253 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
254 req_builder = req_builder.uri(hyper_uri);
255 Ok(req_builder.body(String::new())?)
256 },
257 ))
258 }
259 fn container_inspect<'a>(
265 &'a self,
266 name: &'a str,
267 params: Option<crate::v5::params::ContainerInspect>,
268 ) -> Pin<Box<dyn Future<Output = Result<crate::v5::models::ContainerJson, Error>> + Send + 'a>>
269 {
270 Box::pin(request::execute_request_json(
271 self.get_config(),
272 move |mut req_builder: Builder| {
273 req_builder = req_builder.method("GET");
274 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
275 let mut request_path = request_url.path().to_owned();
276 if request_path.ends_with('/') {
277 request_path.pop();
278 }
279 request_path.push_str("/containers/{name}/json");
280 request_path = request_path.replace("{name}", name);
281 request_url.set_path(&request_path);
282 if let Some(params) = ¶ms {
283 let mut query_pairs = request_url.query_pairs_mut();
284 if let Some(size) = params.size {
285 query_pairs.append_pair("size", &size.to_string());
286 }
287 }
288 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
289 req_builder = req_builder.uri(hyper_uri);
290 Ok(req_builder.body(String::new())?)
291 },
292 ))
293 }
294 fn container_kill<'a>(
300 &'a self,
301 name: &'a str,
302 params: Option<crate::v5::params::ContainerKill<'a>>,
303 ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
304 Box::pin(request::execute_request_unit(
305 self.get_config(),
306 move |mut req_builder: Builder| {
307 req_builder = req_builder.method("POST");
308 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
309 let mut request_path = request_url.path().to_owned();
310 if request_path.ends_with('/') {
311 request_path.pop();
312 }
313 request_path.push_str("/containers/{name}/kill");
314 request_path = request_path.replace("{name}", name);
315 request_url.set_path(&request_path);
316 if let Some(params) = ¶ms {
317 let mut query_pairs = request_url.query_pairs_mut();
318 if let Some(all) = params.all {
319 query_pairs.append_pair("all", &all.to_string());
320 }
321 if let Some(signal) = params.signal {
322 query_pairs.append_pair("signal", signal);
323 }
324 }
325 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
326 req_builder = req_builder.uri(hyper_uri);
327 Ok(req_builder.body(String::new())?)
328 },
329 ))
330 }
331 fn container_logs<'a>(
337 &'a self,
338 name: &'a str,
339 params: Option<crate::v5::params::ContainerLogs<'a>>,
340 ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
341 Box::pin(request::execute_request_unit(
342 self.get_config(),
343 move |mut req_builder: Builder| {
344 req_builder = req_builder.method("GET");
345 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
346 let mut request_path = request_url.path().to_owned();
347 if request_path.ends_with('/') {
348 request_path.pop();
349 }
350 request_path.push_str("/containers/{name}/logs");
351 request_path = request_path.replace("{name}", name);
352 request_url.set_path(&request_path);
353 if let Some(params) = ¶ms {
354 let mut query_pairs = request_url.query_pairs_mut();
355 if let Some(follow) = params.follow {
356 query_pairs.append_pair("follow", &follow.to_string());
357 }
358 if let Some(stdout) = params.stdout {
359 query_pairs.append_pair("stdout", &stdout.to_string());
360 }
361 if let Some(stderr) = params.stderr {
362 query_pairs.append_pair("stderr", &stderr.to_string());
363 }
364 if let Some(since) = params.since {
365 query_pairs.append_pair("since", since);
366 }
367 if let Some(until) = params.until {
368 query_pairs.append_pair("until", until);
369 }
370 if let Some(timestamps) = params.timestamps {
371 query_pairs.append_pair("timestamps", ×tamps.to_string());
372 }
373 if let Some(tail) = params.tail {
374 query_pairs.append_pair("tail", tail);
375 }
376 }
377 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
378 req_builder = req_builder.uri(hyper_uri);
379 Ok(req_builder.body(String::new())?)
380 },
381 ))
382 }
383 fn container_pause<'a>(
389 &'a self,
390 name: &'a str,
391 ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
392 Box::pin(request::execute_request_unit(
393 self.get_config(),
394 move |mut req_builder: Builder| {
395 req_builder = req_builder.method("POST");
396 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
397 let mut request_path = request_url.path().to_owned();
398 if request_path.ends_with('/') {
399 request_path.pop();
400 }
401 request_path.push_str("/containers/{name}/pause");
402 request_path = request_path.replace("{name}", name);
403 request_url.set_path(&request_path);
404 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
405 req_builder = req_builder.uri(hyper_uri);
406 Ok(req_builder.body(String::new())?)
407 },
408 ))
409 }
410 fn container_rename<'a>(
416 &'a self,
417 name: &'a str,
418 params: Option<crate::v5::params::ContainerRename<'a>>,
419 ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
420 Box::pin(request::execute_request_unit(
421 self.get_config(),
422 move |mut req_builder: Builder| {
423 req_builder = req_builder.method("POST");
424 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
425 let mut request_path = request_url.path().to_owned();
426 if request_path.ends_with('/') {
427 request_path.pop();
428 }
429 request_path.push_str("/containers/{name}/rename");
430 request_path = request_path.replace("{name}", name);
431 request_url.set_path(&request_path);
432 if let Some(params) = ¶ms {
433 let mut query_pairs = request_url.query_pairs_mut();
434 query_pairs.append_pair("name", params.name);
435 }
436 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
437 req_builder = req_builder.uri(hyper_uri);
438 Ok(req_builder.body(String::new())?)
439 },
440 ))
441 }
442 fn container_resize<'a>(
448 &'a self,
449 name: &'a str,
450 params: Option<crate::v5::params::ContainerResize>,
451 ) -> Pin<Box<dyn Future<Output = Result<serde_json::Value, Error>> + Send + 'a>> {
452 Box::pin(request::execute_request_json(
453 self.get_config(),
454 move |mut req_builder: Builder| {
455 req_builder = req_builder.method("POST");
456 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
457 let mut request_path = request_url.path().to_owned();
458 if request_path.ends_with('/') {
459 request_path.pop();
460 }
461 request_path.push_str("/containers/{name}/resize");
462 request_path = request_path.replace("{name}", name);
463 request_url.set_path(&request_path);
464 if let Some(params) = ¶ms {
465 let mut query_pairs = request_url.query_pairs_mut();
466 if let Some(h) = params.h {
467 query_pairs.append_pair("h", &h.to_string());
468 }
469 if let Some(w) = params.w {
470 query_pairs.append_pair("w", &w.to_string());
471 }
472 if let Some(running) = params.running {
473 query_pairs.append_pair("running", &running.to_string());
474 }
475 }
476 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
477 req_builder = req_builder.uri(hyper_uri);
478 Ok(req_builder.body(String::new())?)
479 },
480 ))
481 }
482 fn container_restart<'a>(
486 &'a self,
487 name: &'a str,
488 params: Option<crate::v5::params::ContainerRestart>,
489 ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
490 Box::pin(request::execute_request_unit(
491 self.get_config(),
492 move |mut req_builder: Builder| {
493 req_builder = req_builder.method("POST");
494 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
495 let mut request_path = request_url.path().to_owned();
496 if request_path.ends_with('/') {
497 request_path.pop();
498 }
499 request_path.push_str("/containers/{name}/restart");
500 request_path = request_path.replace("{name}", name);
501 request_url.set_path(&request_path);
502 if let Some(params) = ¶ms {
503 let mut query_pairs = request_url.query_pairs_mut();
504 if let Some(t) = params.t {
505 query_pairs.append_pair("t", &t.to_string());
506 }
507 }
508 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
509 req_builder = req_builder.uri(hyper_uri);
510 Ok(req_builder.body(String::new())?)
511 },
512 ))
513 }
514 fn container_start<'a>(
518 &'a self,
519 name: &'a str,
520 params: Option<crate::v5::params::ContainerStart<'a>>,
521 ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
522 Box::pin(request::execute_request_unit(
523 self.get_config(),
524 move |mut req_builder: Builder| {
525 req_builder = req_builder.method("POST");
526 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
527 let mut request_path = request_url.path().to_owned();
528 if request_path.ends_with('/') {
529 request_path.pop();
530 }
531 request_path.push_str("/containers/{name}/start");
532 request_path = request_path.replace("{name}", name);
533 request_url.set_path(&request_path);
534 if let Some(params) = ¶ms {
535 let mut query_pairs = request_url.query_pairs_mut();
536 if let Some(detach_keys) = params.detach_keys {
537 query_pairs.append_pair("detachKeys", detach_keys);
538 }
539 }
540 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
541 req_builder = req_builder.uri(hyper_uri);
542 Ok(req_builder.body(String::new())?)
543 },
544 ))
545 }
546 fn container_stats<'a>(
552 &'a self,
553 name: &'a str,
554 params: Option<crate::v5::params::ContainerStats>,
555 ) -> Pin<Box<dyn Future<Output = Result<serde_json::Value, Error>> + Send + 'a>> {
556 Box::pin(request::execute_request_json(
557 self.get_config(),
558 move |mut req_builder: Builder| {
559 req_builder = req_builder.method("GET");
560 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
561 let mut request_path = request_url.path().to_owned();
562 if request_path.ends_with('/') {
563 request_path.pop();
564 }
565 request_path.push_str("/containers/{name}/stats");
566 request_path = request_path.replace("{name}", name);
567 request_url.set_path(&request_path);
568 if let Some(params) = ¶ms {
569 let mut query_pairs = request_url.query_pairs_mut();
570 if let Some(stream) = params.stream {
571 query_pairs.append_pair("stream", &stream.to_string());
572 }
573 if let Some(one_shot) = params.one_shot {
574 query_pairs.append_pair("one-shot", &one_shot.to_string());
575 }
576 }
577 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
578 req_builder = req_builder.uri(hyper_uri);
579 Ok(req_builder.body(String::new())?)
580 },
581 ))
582 }
583 fn container_stop<'a>(
587 &'a self,
588 name: &'a str,
589 params: Option<crate::v5::params::ContainerStop>,
590 ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
591 Box::pin(request::execute_request_unit(
592 self.get_config(),
593 move |mut req_builder: Builder| {
594 req_builder = req_builder.method("POST");
595 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
596 let mut request_path = request_url.path().to_owned();
597 if request_path.ends_with('/') {
598 request_path.pop();
599 }
600 request_path.push_str("/containers/{name}/stop");
601 request_path = request_path.replace("{name}", name);
602 request_url.set_path(&request_path);
603 if let Some(params) = ¶ms {
604 let mut query_pairs = request_url.query_pairs_mut();
605 if let Some(t) = params.t {
606 query_pairs.append_pair("t", &t.to_string());
607 }
608 }
609 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
610 req_builder = req_builder.uri(hyper_uri);
611 Ok(req_builder.body(String::new())?)
612 },
613 ))
614 }
615 fn container_top<'a>(
619 &'a self,
620 name: &'a str,
621 params: Option<crate::v5::params::ContainerTop<'a>>,
622 ) -> Pin<
623 Box<dyn Future<Output = Result<crate::v5::models::ContainerTopOkBody, Error>> + Send + 'a>,
624 > {
625 Box::pin(request::execute_request_json(
626 self.get_config(),
627 move |mut req_builder: Builder| {
628 req_builder = req_builder.method("GET");
629 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
630 let mut request_path = request_url.path().to_owned();
631 if request_path.ends_with('/') {
632 request_path.pop();
633 }
634 request_path.push_str("/containers/{name}/top");
635 request_path = request_path.replace("{name}", name);
636 request_url.set_path(&request_path);
637 if let Some(params) = ¶ms {
638 let mut query_pairs = request_url.query_pairs_mut();
639 if let Some(ps_args) = params.ps_args {
640 query_pairs.append_pair("ps_args", ps_args);
641 }
642 }
643 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
644 req_builder = req_builder.uri(hyper_uri);
645 Ok(req_builder.body(String::new())?)
646 },
647 ))
648 }
649 fn container_unpause<'a>(
655 &'a self,
656 name: &'a str,
657 ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
658 Box::pin(request::execute_request_unit(
659 self.get_config(),
660 move |mut req_builder: Builder| {
661 req_builder = req_builder.method("POST");
662 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
663 let mut request_path = request_url.path().to_owned();
664 if request_path.ends_with('/') {
665 request_path.pop();
666 }
667 request_path.push_str("/containers/{name}/unpause");
668 request_path = request_path.replace("{name}", name);
669 request_url.set_path(&request_path);
670 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
671 req_builder = req_builder.uri(hyper_uri);
672 Ok(req_builder.body(String::new())?)
673 },
674 ))
675 }
676 fn container_update<'a>(
682 &'a self,
683 name: &'a str,
684 resources: crate::v5::models::UpdateConfig,
685 ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
686 Box::pin(request::execute_request_unit(
687 self.get_config(),
688 move |mut req_builder: Builder| {
689 req_builder = req_builder.method("POST");
690 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
691 let mut request_path = request_url.path().to_owned();
692 if request_path.ends_with('/') {
693 request_path.pop();
694 }
695 request_path.push_str("/containers/{name}/update");
696 request_path = request_path.replace("{name}", name);
697 request_url.set_path(&request_path);
698 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
699 req_builder = req_builder.uri(hyper_uri);
700 let body = serde_json::to_string(&resources)?;
701 req_builder = req_builder.header(hyper::header::CONTENT_TYPE, "application/json");
702 req_builder = req_builder.header(hyper::header::CONTENT_LENGTH, body.len());
703 Ok(req_builder.body(body)?)
704 },
705 ))
706 }
707 fn container_wait<'a>(
713 &'a self,
714 name: &'a str,
715 params: Option<crate::v5::params::ContainerWait<'a>>,
716 ) -> Pin<
717 Box<
718 dyn Future<Output = Result<crate::v5::models::ContainerWaitResponse, Error>>
719 + Send
720 + 'a,
721 >,
722 > {
723 Box::pin(request::execute_request_json(
724 self.get_config(),
725 move |mut req_builder: Builder| {
726 req_builder = req_builder.method("POST");
727 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
728 let mut request_path = request_url.path().to_owned();
729 if request_path.ends_with('/') {
730 request_path.pop();
731 }
732 request_path.push_str("/containers/{name}/wait");
733 request_path = request_path.replace("{name}", name);
734 request_url.set_path(&request_path);
735 if let Some(params) = ¶ms {
736 let mut query_pairs = request_url.query_pairs_mut();
737 if let Some(condition) = params.condition {
738 query_pairs.append_pair("condition", condition);
739 }
740 if let Some(interval) = params.interval {
741 query_pairs.append_pair("interval", interval);
742 }
743 }
744 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
745 req_builder = req_builder.uri(hyper_uri);
746 Ok(req_builder.body(String::new())?)
747 },
748 ))
749 }
750 fn container_create<'a>(
754 &'a self,
755 params: Option<crate::v5::params::ContainerCreate<'a>>,
756 body: crate::v5::models::CreateContainerConfig,
757 ) -> Pin<
758 Box<
759 dyn Future<Output = Result<crate::v5::models::ContainerCreateResponse, Error>>
760 + Send
761 + 'a,
762 >,
763 > {
764 Box::pin(request::execute_request_json(
765 self.get_config(),
766 move |mut req_builder: Builder| {
767 req_builder = req_builder.method("POST");
768 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
769 let mut request_path = request_url.path().to_owned();
770 if request_path.ends_with('/') {
771 request_path.pop();
772 }
773 request_path.push_str("/containers/create");
774 request_url.set_path(&request_path);
775 if let Some(params) = ¶ms {
776 let mut query_pairs = request_url.query_pairs_mut();
777 if let Some(name) = params.name {
778 query_pairs.append_pair("name", name);
779 }
780 }
781 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
782 req_builder = req_builder.uri(hyper_uri);
783 let body = serde_json::to_string(&body)?;
784 req_builder = req_builder.header(hyper::header::CONTENT_TYPE, "application/json");
785 req_builder = req_builder.header(hyper::header::CONTENT_LENGTH, body.len());
786 Ok(req_builder.body(body)?)
787 },
788 ))
789 }
790 fn container_list<'a>(
796 &'a self,
797 params: Option<crate::v5::params::ContainerList<'a>>,
798 ) -> Pin<Box<dyn Future<Output = Result<Vec<crate::v5::models::Container>, Error>> + Send + 'a>>
799 {
800 Box::pin(request::execute_request_json(
801 self.get_config(),
802 move |mut req_builder: Builder| {
803 req_builder = req_builder.method("GET");
804 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
805 let mut request_path = request_url.path().to_owned();
806 if request_path.ends_with('/') {
807 request_path.pop();
808 }
809 request_path.push_str("/containers/json");
810 request_url.set_path(&request_path);
811 if let Some(params) = ¶ms {
812 let mut query_pairs = request_url.query_pairs_mut();
813 if let Some(all) = params.all {
814 query_pairs.append_pair("all", &all.to_string());
815 }
816 if let Some(external) = params.external {
817 query_pairs.append_pair("external", &external.to_string());
818 }
819 if let Some(limit) = params.limit {
820 query_pairs.append_pair("limit", &limit.to_string());
821 }
822 if let Some(size) = params.size {
823 query_pairs.append_pair("size", &size.to_string());
824 }
825 if let Some(filters) = params.filters {
826 query_pairs.append_pair("filters", filters);
827 }
828 }
829 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
830 req_builder = req_builder.uri(hyper_uri);
831 Ok(req_builder.body(String::new())?)
832 },
833 ))
834 }
835 fn container_prune<'a>(
841 &'a self,
842 params: Option<crate::v5::params::ContainerPrune<'a>>,
843 ) -> Pin<
844 Box<
845 dyn Future<Output = Result<Vec<crate::v5::models::ContainersPruneReport>, Error>>
846 + Send
847 + 'a,
848 >,
849 > {
850 Box::pin(request::execute_request_json(
851 self.get_config(),
852 move |mut req_builder: Builder| {
853 req_builder = req_builder.method("POST");
854 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
855 let mut request_path = request_url.path().to_owned();
856 if request_path.ends_with('/') {
857 request_path.pop();
858 }
859 request_path.push_str("/containers/prune");
860 request_url.set_path(&request_path);
861 if let Some(params) = ¶ms {
862 let mut query_pairs = request_url.query_pairs_mut();
863 if let Some(filters) = params.filters {
864 query_pairs.append_pair("filters", filters);
865 }
866 }
867 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
868 req_builder = req_builder.uri(hyper_uri);
869 Ok(req_builder.body(String::new())?)
870 },
871 ))
872 }
873 fn container_archive_libpod<'a>(
879 &'a self,
880 name: &'a str,
881 params: Option<crate::v5::params::ContainerArchiveLibpod<'a>>,
882 ) -> Pin<Box<dyn Future<Output = Result<String, Error>> + Send + 'a>> {
883 Box::pin(request::execute_request_json(
884 self.get_config(),
885 move |mut req_builder: Builder| {
886 req_builder = req_builder.method("GET");
887 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
888 let mut request_path = request_url.path().to_owned();
889 if request_path.ends_with('/') {
890 request_path.pop();
891 }
892 request_path.push_str("/libpod/containers/{name}/archive");
893 request_path = request_path.replace("{name}", name);
894 request_url.set_path(&request_path);
895 if let Some(params) = ¶ms {
896 let mut query_pairs = request_url.query_pairs_mut();
897 query_pairs.append_pair("path", params.path);
898 if let Some(rename) = params.rename {
899 query_pairs.append_pair("rename", rename);
900 }
901 }
902 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
903 req_builder = req_builder.uri(hyper_uri);
904 Ok(req_builder.body(String::new())?)
905 },
906 ))
907 }
908}