podman_client/images/
push.rs1use 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::push::{ImagePush, ImagePushOptions},
13 },
14 utils::bool_to_str::bool_to_str,
15};
16
17impl Client {
18 pub async fn image_push(&self, options: ImagePushOptions<'_>) -> Result<ImagePush, Error> {
19 let mut path = ["/libpod/images/", options.name, "/push"].concat();
20
21 let mut query = form_urlencoded::Serializer::new(String::new());
22 if let Some(all) = options.all {
23 query.append_pair("all", bool_to_str(all));
24 }
25 if let Some(compression_format) = options.compression_format {
26 query.append_pair("compressionFormat", compression_format);
27 }
28 if let Some(compression_level) = options.compression_level {
29 query.append_pair(
30 "compressionLevel",
31 itoa::Buffer::new().format(compression_level),
32 );
33 }
34 if let Some(destination) = options.destination {
35 query.append_pair("destination", destination);
36 }
37 if let Some(force_compression_format) = options.force_compression_format {
38 query.append_pair(
39 "forceCompressionFormat",
40 bool_to_str(force_compression_format),
41 );
42 }
43 if let Some(format) = options.format {
44 query.append_pair("format", format);
45 }
46 if let Some(quiet) = options.quiet {
47 query.append_pair("quiet", bool_to_str(quiet));
48 }
49 if let Some(remove_signatures) = options.remove_signatures {
50 query.append_pair("removeSignatures", bool_to_str(remove_signatures));
51 }
52 if let Some(retry) = options.retry {
53 query.append_pair("retry", itoa::Buffer::new().format(retry));
54 }
55 if let Some(retry_delay) = options.retry_delay {
56 query.append_pair("retryDelay", retry_delay);
57 }
58 if let Some(tls_verify) = options.tls_verify {
59 query.append_pair("tlsVerify", bool_to_str(tls_verify));
60 }
61 let query_string = query.finish();
62 if !query_string.is_empty() {
63 path += &["?", &query_string].concat();
64 }
65
66 let mut header = None;
67 if let Some(x_registry_auth) = options.x_registry_auth {
68 header = Some(HashMap::from([("X-Registry-Auth", x_registry_auth)]));
69 }
70
71 let (_, data) = self
72 .send_request::<_, (), _>(SendRequestOptions {
73 method: "POST",
74 path: &path,
75 header,
76 body: Empty::<Bytes>::new(),
77 })
78 .await?;
79
80 Ok(data)
81 }
82}