use crate::api_common::config::HasConfig;
use crate::api_common::request;
use crate::api_common::Error;
use std::future::Future;
use std::pin::Pin;
pub trait Exec: HasConfig + Send + Sync {
fn container_exec_libpod<'a>(
&'a self,
name: &'a str,
control: super::super::models::ContainerExecLibpodBody,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
Box::pin(async move {
let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
let mut request_path = request_url.path().to_owned();
if request_path.ends_with('/') {
request_path.pop();
}
request_path.push_str("/libpod/containers/{name}/exec");
request_path = request_path.replace("{name}", name);
request_url.set_path(&request_path);
let mut req_builder = self.get_config().req_builder("POST")?;
let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
req_builder = req_builder.uri(hyper_uri);
let body = serde_json::to_string(&control)?;
req_builder = req_builder.header(hyper::header::CONTENT_TYPE, "application/json");
req_builder = req_builder.header(hyper::header::CONTENT_LENGTH, body.len());
let request = req_builder.body(body)?;
request::execute_request_unit(self.get_config(), request).await
})
}
fn exec_inspect_libpod<'a>(
&'a self,
id: &'a str,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
Box::pin(async move {
let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
let mut request_path = request_url.path().to_owned();
if request_path.ends_with('/') {
request_path.pop();
}
request_path.push_str("/libpod/exec/{id}/json");
request_path = request_path.replace("{id}", id);
request_url.set_path(&request_path);
let mut req_builder = self.get_config().req_builder("GET")?;
let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
req_builder = req_builder.uri(hyper_uri);
let request = req_builder.body(String::new())?;
request::execute_request_unit(self.get_config(), request).await
})
}
fn exec_resize_libpod<'a>(
&'a self,
id: &'a str,
params: Option<super::super::params::ExecResizeLibpod>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
Box::pin(async move {
let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
let mut request_path = request_url.path().to_owned();
if request_path.ends_with('/') {
request_path.pop();
}
request_path.push_str("/libpod/exec/{id}/resize");
request_path = request_path.replace("{id}", id);
request_url.set_path(&request_path);
let mut req_builder = self.get_config().req_builder("POST")?;
if let Some(params) = params {
let mut query_pairs = request_url.query_pairs_mut();
if let Some(h) = params.h {
query_pairs.append_pair("h", &h.to_string());
}
if let Some(w) = params.w {
query_pairs.append_pair("w", &w.to_string());
}
}
let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
req_builder = req_builder.uri(hyper_uri);
let request = req_builder.body(String::new())?;
request::execute_request_unit(self.get_config(), request).await
})
}
fn exec_start_libpod<'a>(
&'a self,
id: &'a str,
control: super::super::models::ExecStartLibpodBody,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'a>> {
Box::pin(async move {
let mut request_url = url::Url::parse(self.get_config().get_base_path())?;
let mut request_path = request_url.path().to_owned();
if request_path.ends_with('/') {
request_path.pop();
}
request_path.push_str("/libpod/exec/{id}/start");
request_path = request_path.replace("{id}", id);
request_url.set_path(&request_path);
let mut req_builder = self.get_config().req_builder("POST")?;
let hyper_uri: hyper::Uri = request_url.as_str().parse()?;
req_builder = req_builder.uri(hyper_uri);
let body = serde_json::to_string(&control)?;
req_builder = req_builder.header(hyper::header::CONTENT_TYPE, "application/json");
req_builder = req_builder.header(hyper::header::CONTENT_LENGTH, body.len());
let request = req_builder.body(body)?;
request::execute_request_unit(self.get_config(), request).await
})
}
}