podman_client/images/
pull.rs

1use std::collections::HashMap;
2
3use http_body_util::Empty;
4use hyper::body::Bytes;
5use url::form_urlencoded;
6
7use crate::{
8    client::Client,
9    models::{
10        connection::SendRequestOptions,
11        lib::Error,
12        podman::images::pull::{ImagePull, ImagePullOptions},
13    },
14    utils::bool_to_str::bool_to_str,
15};
16
17impl Client {
18    pub async fn image_pull(
19        &self,
20        options: Option<ImagePullOptions<'_>>,
21    ) -> Result<ImagePull, Error> {
22        let mut path = "/libpod/images/pull".to_owned();
23        let mut header = None;
24
25        if let Some(options) = options {
26            let mut query = form_urlencoded::Serializer::new(String::new());
27            if let Some(all_tags) = options.all_tags {
28                query.append_pair("allTags", bool_to_str(all_tags));
29            }
30            if let Some(arch) = options.arch {
31                query.append_pair("Arch", arch);
32            }
33            if let Some(compat_mode) = options.compat_mode {
34                query.append_pair("compatMode", bool_to_str(compat_mode));
35            }
36            if let Some(os) = options.os {
37                query.append_pair("OS", os);
38            }
39            if let Some(policy) = options.policy {
40                query.append_pair("policy", policy);
41            }
42            if let Some(quite) = options.quite {
43                query.append_pair("quite", bool_to_str(quite));
44            }
45            if let Some(reference) = options.reference {
46                query.append_pair("reference", reference);
47            }
48            if let Some(tls_verify) = options.tls_verify {
49                query.append_pair("tlsVerify", bool_to_str(tls_verify));
50            }
51            if let Some(variant) = options.variant {
52                query.append_pair("variant", variant);
53            }
54            let query_string = query.finish();
55
56            if !query_string.is_empty() {
57                path += &["?", &query_string].concat();
58            }
59
60            if let Some(x_registry_auth) = options.x_registry_auth {
61                header = Some(HashMap::from([("X-Registry-Auth", x_registry_auth)]));
62            }
63        }
64
65        let (_, data) = self
66            .send_request::<_, (), _>(SendRequestOptions {
67                method: "POST",
68                path: &path,
69                header,
70                body: Empty::<Bytes>::new(),
71            })
72            .await?;
73
74        Ok(data)
75    }
76}