1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use crate::api::Filter;

impl_json_opts_builder!(VolumeCreate);

impl VolumeCreateOptsBuilder {
    impl_str_field!("The new volume's name. If not specified, Docker generates a name." name: N => "Name");

    impl_str_field!("Name of the volume driver to use." driver: D => "Driver");

    impl_map_field!(
        "A mapping of driver options and values."
        "These options are passed directly to the driver and are driver specific."
        driver_opts: O => "DriverOpts");

    impl_map_field!("User-defined key/value metadata." labels: L => "Labels");
}

impl_url_opts_builder!(derives = Default | VolumePrune);

impl_url_opts_builder!(derives = Default | VolumeList);
pub enum VolumeFilter {
    Dangling(bool),
    Driver(String),
    LabelKey(String),
    LabelKeyVal(String, String),
    Name(String),
}

impl Filter for VolumeFilter {
    fn query_key_val(&self) -> (&'static str, String) {
        use VolumeFilter::*;
        match &self {
            Dangling(dangling) => ("dangling", dangling.to_string()),
            Driver(driver) => ("driver", driver.to_owned()),
            LabelKey(label) => ("label", label.to_owned()),
            LabelKeyVal(key, val) => ("label", format!("{}:{}", key, val)),
            Name(name) => ("name", name.to_owned()),
        }
    }
}

impl VolumePruneOptsBuilder {
    impl_filter_func!(VolumeFilter);
}

impl VolumeListOptsBuilder {
    impl_filter_func!(VolumeFilter);
}