docker_api/api/
network.rs

1//! Create and manage user-defined networks that containers can be attached to.
2
3use crate::{
4    conn::{Headers, Payload},
5    models,
6    opts::{
7        ContainerConnectionOpts, ContainerDisconnectionOpts, NetworkCreateOpts, NetworkListOpts,
8        NetworkPruneOpts,
9    },
10    Result,
11};
12
13impl_api_ty!(Network => id);
14
15impl Network {
16    impl_api_ep! { net: Network, resp
17        Inspect -> &format!("/networks/{}", net.id), models::Network
18        Delete -> &format!("/networks/{}", net.id), ()
19    }
20
21    api_doc! { Network => Connect
22    |
23    /// Connect a container to a network.
24    pub async fn connect(&self, opts: &ContainerConnectionOpts) -> Result<()> {
25        self.docker
26            .post_string(
27                &format!("/networks/{}/connect", self.id),
28                Payload::Json(opts.serialize_vec()?),
29                Headers::none(),
30            )
31            .await
32            .map(|_| ())
33    }}
34
35    api_doc! { Network => Disconnect
36    |
37    /// Disconnect a container from a network.
38    pub async fn disconnect(&self, opts: &ContainerDisconnectionOpts) -> Result<()> {
39        self.docker
40            .post_string(
41                &format!("/networks/{}/disconnect", &self.id),
42                Payload::Json(opts.serialize_vec()?),
43                Headers::none(),
44            )
45            .await
46            .map(|_| ())
47    }}
48}
49
50impl Networks {
51    impl_api_ep! { __: Network, resp
52        List -> "/networks", models::Network
53        Prune -> "/networks/prune", models::NetworkPrune200Response
54    }
55
56    api_doc! { Network => Create
57    |
58    /// Create a new network.
59    pub async fn create(&self, opts: &NetworkCreateOpts) -> Result<Network> {
60        // #TODO: handle missing id and return warnings (?)
61        self.docker
62            .post_json(
63                "/networks/create",
64                Payload::Json(opts.serialize_vec()?),
65                Headers::none(),
66            )
67            .await
68            .map(|resp: models::NetworkCreate201Response| {
69                Network::new(self.docker.clone(), resp.id.unwrap_or_default())
70            })
71    }}
72}