podman_client/containers/
restore.rs

1use http_body_util::Empty;
2use hyper::body::Bytes;
3use url::form_urlencoded;
4
5use crate::{
6    client::Client,
7    models::{
8        connection::SendRequestOptions, lib::Error,
9        podman::containers::restore::ContainerRestoreOptions,
10    },
11    utils::bool_to_str::bool_to_str,
12};
13
14impl Client {
15    pub async fn container_restore(
16        &self,
17        options: ContainerRestoreOptions<'_>,
18    ) -> Result<(), Error> {
19        let mut path = ["/libpod/containers/", options.name, "/restore"].concat();
20
21        let mut query = form_urlencoded::Serializer::new(String::new());
22        if let Some(file_locks) = options.file_locks {
23            query.append_pair("fileLocks", bool_to_str(file_locks));
24        }
25        if let Some(ignore_root_fs) = options.ignore_root_fs {
26            query.append_pair("ignoreRootFS", bool_to_str(ignore_root_fs));
27        }
28        if let Some(ignore_static_ip) = options.ignore_static_ip {
29            query.append_pair("ignoreStaticIP", bool_to_str(ignore_static_ip));
30        }
31        if let Some(ignore_static_mac) = options.ignore_static_mac {
32            query.append_pair("ignoreStaticMAC", bool_to_str(ignore_static_mac));
33        }
34        if let Some(ignore_volumes) = options.ignore_volumes {
35            query.append_pair("ignore_volumes", bool_to_str(ignore_volumes));
36        }
37        if let Some(import) = options.import {
38            query.append_pair("import", bool_to_str(import));
39        }
40        if let Some(keep) = options.keep {
41            query.append_pair("keep", bool_to_str(keep));
42        }
43        if let Some(name) = options.name_import {
44            query.append_pair("name", name);
45        }
46        if let Some(pod) = options.pod {
47            query.append_pair("pod", pod);
48        }
49        if let Some(print_stats) = options.print_stats {
50            query.append_pair("printStats", bool_to_str(print_stats));
51        }
52        if let Some(tcp_established) = options.tcp_established {
53            query.append_pair("tcpEstablished", bool_to_str(tcp_established));
54        }
55        let query_string = query.finish();
56        if !query_string.is_empty() {
57            path += &["?", &query_string].concat();
58        }
59
60        let (_, data) = self
61            .send_request::<_, (), _>(SendRequestOptions {
62                method: "POST",
63                path: &path,
64                header: None,
65                body: Empty::<Bytes>::new(),
66            })
67            .await?;
68
69        Ok(data)
70    }
71}