docker_api/api/
volume.rs

1//! Create and manage persistent storage that can be attached to containers.
2
3use crate::{
4    conn::{Headers, Payload},
5    models,
6    opts::{ClusterVolumeUpdateOpts, VolumeCreateOpts, VolumeListOpts, VolumePruneOpts},
7    Result,
8};
9use containers_api::url;
10
11impl_api_ty!(Volume => name);
12
13impl Volume {
14    impl_api_ep! {vol: Volume, resp
15        Inspect -> &format!("/volumes/{}", vol.name), models::Volume
16        Delete -> &format!("/volumes/{}", vol.name), ()
17    }
18
19    api_doc! { Volume => Update
20    |
21    /// Update a volume. Valid only for Swarm cluster volumes
22    pub async fn update(&self, opts: &ClusterVolumeUpdateOpts) -> Result<()> {
23        let mut ep = format!("/volumes/{}", self.name());
24        url::append_query(&mut ep, url::encoded_pair("version", opts.version()));
25        self.docker.put(&ep, Payload::Json(opts.serialize_vec()?)).await.map(|_| ())
26    }}
27}
28
29impl Volumes {
30    impl_api_ep! {__: Volume, resp
31        Prune -> "/volumes/prune", models::VolumePrune200Response
32    }
33
34    api_doc! { Volume => List
35    |
36    /// List available volumes
37    pub async fn list(&self, opts: &VolumeListOpts) -> Result<models::VolumeListResponse> {
38        let ep = url::construct_ep("/volumes", opts.serialize());
39        self.docker.get_json(&ep).await
40    }}
41
42    api_doc! { Volume => Create
43    |
44    /// Create a new volume.
45    pub async fn create(&self, opts: &VolumeCreateOpts) -> Result<models::Volume> {
46        // #TODO: handle missing id and return warnings (?)
47        self.docker
48            .post_json(
49                "/volumes/create",
50                Payload::Json(opts.serialize_vec()?),
51                Headers::none(),
52            )
53            .await
54    }}
55}