podman_rest_client/v5/apis/
exec.rs1use 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 Exec: HasConfig + Send + Sync {
8 fn container_exec_libpod<'a>(
14 &'a self,
15 name: &'a str,
16 control: crate::v5::models::ContainerExecLibpodBody,
17 ) -> Pin<
18 Box<
19 dyn Future<Output = Result<crate::v5::models::ContainerExecLibpod201, Error>>
20 + Send
21 + 'a,
22 >,
23 > {
24 Box::pin(request::execute_request_json(
25 self.get_config(),
26 move |mut req_builder: Builder| {
27 req_builder = req_builder.method("POST");
28 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
29 let mut request_path = request_url.path().to_owned();
30 if request_path.ends_with('/') {
31 request_path.pop();
32 }
33 request_path.push_str("/libpod/containers/{name}/exec");
34 request_path = request_path.replace("{name}", name);
35 request_url.set_path(&request_path);
36 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
37 req_builder = req_builder.uri(hyper_uri);
38 let body = serde_json::to_string(&control)?;
39 req_builder = req_builder.header(hyper::header::CONTENT_TYPE, "application/json");
40 req_builder = req_builder.header(hyper::header::CONTENT_LENGTH, body.len());
41 Ok(req_builder.body(body)?)
42 },
43 ))
44 }
45 fn exec_inspect_libpod<'a>(
51 &'a self,
52 id: &'a str,
53 ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
54 Box::pin(request::execute_request_unit(
55 self.get_config(),
56 move |mut req_builder: Builder| {
57 req_builder = req_builder.method("GET");
58 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
59 let mut request_path = request_url.path().to_owned();
60 if request_path.ends_with('/') {
61 request_path.pop();
62 }
63 request_path.push_str("/libpod/exec/{id}/json");
64 request_path = request_path.replace("{id}", id);
65 request_url.set_path(&request_path);
66 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
67 req_builder = req_builder.uri(hyper_uri);
68 Ok(req_builder.body(String::new())?)
69 },
70 ))
71 }
72 fn exec_resize_libpod<'a>(
78 &'a self,
79 id: &'a str,
80 params: Option<crate::v5::params::ExecResizeLibpod>,
81 ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
82 Box::pin(request::execute_request_unit(
83 self.get_config(),
84 move |mut req_builder: Builder| {
85 req_builder = req_builder.method("POST");
86 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
87 let mut request_path = request_url.path().to_owned();
88 if request_path.ends_with('/') {
89 request_path.pop();
90 }
91 request_path.push_str("/libpod/exec/{id}/resize");
92 request_path = request_path.replace("{id}", id);
93 request_url.set_path(&request_path);
94 if let Some(params) = ¶ms {
95 let mut query_pairs = request_url.query_pairs_mut();
96 if let Some(h) = params.h {
97 query_pairs.append_pair("h", &h.to_string());
98 }
99 if let Some(w) = params.w {
100 query_pairs.append_pair("w", &w.to_string());
101 }
102 }
103 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
104 req_builder = req_builder.uri(hyper_uri);
105 Ok(req_builder.body(String::new())?)
106 },
107 ))
108 }
109 fn exec_start_libpod<'a>(
116 &'a self,
117 id: &'a str,
118 control: crate::v5::models::ExecStartLibpodBody,
119 ) -> Pin<
120 Box<
121 dyn Future<Output = Result<hyper_util::rt::TokioIo<hyper::upgrade::Upgraded>, Error>>
122 + Send
123 + 'a,
124 >,
125 > {
126 Box::pin(request::execute_request_upgrade(
127 self.get_config(),
128 move |mut req_builder: Builder| {
129 req_builder = req_builder.method("POST");
130 let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
131 let mut request_path = request_url.path().to_owned();
132 if request_path.ends_with('/') {
133 request_path.pop();
134 }
135 request_path.push_str("/libpod/exec/{id}/start");
136 request_path = request_path.replace("{id}", id);
137 request_url.set_path(&request_path);
138 let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
139 req_builder = req_builder.uri(hyper_uri);
140 let body = serde_json::to_string(&control)?;
141 req_builder = req_builder.header(hyper::header::CONTENT_TYPE, "application/json");
142 req_builder = req_builder.header(hyper::header::CONTENT_LENGTH, body.len());
143 Ok(req_builder.body(body)?)
144 },
145 ))
146 }
147}