pub use crate::models::*;
use super::Docker;
use crate::{docker::BodyType, errors::Error};
use bytes::Bytes;
use http::request::Builder;
use http_body_util::Full;
use serde_derive::Serialize;
use std::{collections::HashMap, hash::Hash};
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct ListSecretsOptions<T>
where
T: Into<String> + Eq + Hash + serde::ser::Serialize,
{
#[serde(serialize_with = "crate::docker::serialize_as_json")]
pub filters: HashMap<T, Vec<T>>,
}
#[derive(Debug, Copy, Clone, Default, PartialEq, Serialize)]
pub struct UpdateSecretOptions {
pub version: u64,
}
impl Docker {
pub async fn list_secrets<T>(
&self,
options: Option<ListSecretsOptions<T>>,
) -> Result<Vec<Secret>, Error>
where
T: Into<String> + Eq + Hash + serde::ser::Serialize,
{
let url = "/secrets";
let req = self.build_request(
url,
Builder::new().method(hyper::Method::GET),
options,
Ok(BodyType::Left(Full::new(Bytes::new()))),
);
self.process_into_value(req).await
}
pub async fn create_secret(&self, secret_spec: SecretSpec) -> Result<IdResponse, Error> {
let url = "/secrets/create";
let req = self.build_request(
url,
Builder::new().method(hyper::Method::POST),
None::<String>,
Docker::serialize_payload(Some(secret_spec)),
);
self.process_into_value(req).await
}
pub async fn inspect_secret(&self, secret_id: &str) -> Result<Secret, Error> {
let url = format!("/secrets/{secret_id}");
let req = self.build_request(
&url,
Builder::new().method(hyper::Method::GET),
None::<String>,
Ok(BodyType::Left(Full::new(Bytes::new()))),
);
self.process_into_value(req).await
}
pub async fn delete_secret(&self, secret_id: &str) -> Result<(), Error> {
let url = format!("/secrets/{secret_id}");
let req = self.build_request(
&url,
Builder::new().method(hyper::Method::DELETE),
None::<String>,
Ok(BodyType::Left(Full::new(Bytes::new()))),
);
self.process_into_unit(req).await
}
pub async fn update_secret(
&self,
secret_id: &str,
secret_spec: SecretSpec,
options: UpdateSecretOptions,
) -> Result<(), Error> {
let url = format!("/secrets/{secret_id}/update");
let req = self.build_request(
&url,
Builder::new().method(hyper::Method::POST),
Some(options),
Docker::serialize_payload(Some(secret_spec)),
);
self.process_into_unit(req).await
}
}