use foundation_netio::shared::http::SimpleHeader;
use foundation_netio::PreparedRequestBuilder;
use crate::error::DockerError;
use crate::generated::create::{volume_create_request, VolumeCreateArgs};
use crate::generated::prune::{volume_prune_request, VolumePruneArgs};
use crate::generated::shared::Volume;
use crate::generated::volumes::{
volume_delete_request, volume_inspect_request, volume_list_request, volume_update_request,
VolumeDeleteArgs, VolumeInspectArgs, VolumeListArgs, VolumeListResponse, VolumeUpdateArgs,
};
use super::{DockerClient, NoMod};
impl DockerClient {
pub async fn volume_list(
&self,
filters: Option<&str>,
) -> Result<VolumeListResponse, DockerError> {
let args = VolumeListArgs {
filters: filters.map(str::to_string),
};
let response = volume_list_request(self.http(), &args, &self.base_url(), None::<NoMod>).await?;
Ok(response.body)
}
pub async fn volume_inspect(&self, name: &str) -> Result<Volume, DockerError> {
let args = VolumeInspectArgs {
name: name.to_string(),
};
let response = volume_inspect_request(self.http(), &args, &self.base_url(), None::<NoMod>).await?;
Ok(response.body)
}
pub async fn volume_create(&self, config: serde_json::Value) -> Result<Volume, DockerError> {
let args = VolumeCreateArgs {
body: Default::default(),
};
let response = volume_create_request(
self.http(),
&args,
&self.base_url(),
Some(move |b: &mut PreparedRequestBuilder| {
b.set_header(SimpleHeader::CONTENT_TYPE, "application/json");
let _ = b.set_body_json(&config);
}),
)
.await?;
Ok(response.body)
}
pub async fn volume_delete(
&self,
name: &str,
force: Option<bool>,
) -> Result<(), DockerError> {
let args = VolumeDeleteArgs {
name: name.to_string(),
force: force.map(|f| f.to_string()),
};
volume_delete_request(self.http(), &args, &self.base_url(), None::<NoMod>).await?;
Ok(())
}
pub async fn volume_update(
&self,
name: &str,
version: Option<i64>,
config: serde_json::Value,
) -> Result<(), DockerError> {
let args = VolumeUpdateArgs {
name: name.to_string(),
version: version.map(|v| v.to_string()),
};
volume_update_request(
self.http(),
&args,
&self.base_url(),
Some(move |b: &mut PreparedRequestBuilder| {
b.set_header(SimpleHeader::CONTENT_TYPE, "application/json");
let _ = b.set_body_json(&config);
}),
)
.await?;
Ok(())
}
pub async fn volume_prune(&self, filters: Option<&str>) -> Result<(), DockerError> {
let args = VolumePruneArgs {
filters: filters.map(str::to_string),
};
volume_prune_request(self.http(), &args, &self.base_url(), None::<NoMod>).await?;
Ok(())
}
}