podman_api/opts/
networks.rs1use crate::{models, Value};
2
3use containers_api::opts::{Filter, FilterItem};
4use containers_api::{
5 impl_field, impl_filter_func, impl_map_field, impl_opts_builder, impl_str_field, impl_vec_field,
6};
7
8impl_opts_builder!(json =>
9 NetworkCreate
11);
12
13impl NetworkCreateOptsBuilder {
14 impl_str_field!(
15 created => "created"
17 );
18
19 impl_field!(
20 dns_enabled: bool => "dns_enabled"
22 );
23
24 impl_str_field!(
25 driver => "driver"
27 );
28
29 impl_str_field!(
30 id => "id"
32 );
33
34 impl_field!(
35 internal: bool => "internal"
37 );
38
39 impl_map_field!(json
40 ipam_options => "ipam_options"
42 );
43
44 impl_field!(
45 ipv6_enabled: bool => "ipv6_enabled"
47 );
48
49 impl_map_field!(json
50 labels => "labels"
52 );
53
54 impl_str_field!(
55 name => "name"
57 );
58
59 impl_str_field!(
60 network_interface => "network_interface"
62 );
63
64 impl_map_field!(json
65 options => "options"
67 );
68
69 impl_vec_field!(
70 subnets: models::Subnet => "subnets"
72 );
73}
74
75#[derive(Debug)]
76pub enum NetworkListFilter {
78 Name(String),
80 Id(crate::Id),
82 Driver(String),
84 LabelKey(String),
86 LabelKeyVal(String, String),
88 NoLabelKey(String),
90 NoLabelKeyVal(String, String),
92 Until(String),
95}
96
97impl Filter for NetworkListFilter {
98 fn query_item(&self) -> FilterItem {
99 use NetworkListFilter::*;
100 match &self {
101 Name(name) => FilterItem::new("name", name.clone()),
102 Id(id) => FilterItem::new("id", id.to_string()),
103 Driver(driver) => FilterItem::new("driver", driver.clone()),
104 LabelKey(key) => FilterItem::new("label", key.clone()),
105 LabelKeyVal(key, val) => FilterItem::new("label", format!("{key}={val}")),
106 NoLabelKey(key) => FilterItem::new("label!", key.clone()),
107 NoLabelKeyVal(key, val) => FilterItem::new("label!", format!("{key}={val}")),
108 Until(until) => FilterItem::new("until", until.clone()),
109 }
110 }
111}
112
113impl_opts_builder!(url =>
114 NetworkList
116);
117
118impl NetworkListOptsBuilder {
119 impl_filter_func!(NetworkListFilter);
120}
121
122#[derive(Debug)]
123pub enum NetworkPruneFilter {
125 LabelKey(String),
127 LabelKeyVal(String, String),
129 NoLabelKey(String),
131 NoLabelKeyVal(String, String),
133 Until(String),
135}
136
137impl Filter for NetworkPruneFilter {
138 fn query_item(&self) -> FilterItem {
139 use NetworkPruneFilter::*;
140 match &self {
141 LabelKey(key) => FilterItem::new("label", key.clone()),
142 LabelKeyVal(key, val) => FilterItem::new("label", format!("{key}={val}")),
143 NoLabelKey(key) => FilterItem::new("label!", key.clone()),
144 NoLabelKeyVal(key, val) => FilterItem::new("label!", format!("{key}={val}")),
145 Until(until) => FilterItem::new("until", until.clone()),
146 }
147 }
148}
149
150impl_opts_builder!(url =>
151 NetworkPrune
153);
154
155impl NetworkPruneOptsBuilder {
156 impl_filter_func!(NetworkPruneFilter);
157}
158
159impl_opts_builder!(json =>
160 NetworkDisconnect
162);
163
164impl NetworkDisconnectOptsBuilder {
165 impl_str_field!(
166 container => "Container"
168 );
169
170 impl_field!(
171 force: bool => "Force"
173 );
174}
175
176impl_opts_builder!(json =>
177 NetworkConnect
179);
180
181impl NetworkConnectOptsBuilder {
182 impl_vec_field!(
183 aliases => "aliases"
188 );
189
190 impl_str_field!(
191 container => "container"
192 );
193
194 impl_str_field!(
195 interface_name => "interface_name"
198 );
199
200 pub fn static_ips<I>(mut self, ips: impl IntoIterator<Item = I>) -> Self
202 where
203 I: IntoIterator<Item = u8>,
204 {
205 let ips: Vec<Vec<_>> = ips.into_iter().map(|a| a.into_iter().collect()).collect();
206 self.params.insert("static_ips", serde_json::json!(ips));
207 self
208 }
209
210 pub fn static_mac(mut self, mac: impl IntoIterator<Item = u8>) -> Self {
212 let mac: Vec<_> = mac.into_iter().collect();
213 self.params.insert("static_mac", serde_json::json!(mac));
214 self
215 }
216}
217
218impl NetworkConnectOpts {
219 pub(crate) fn for_container(&self, container: &crate::Id) -> Self {
220 let mut new = self.clone();
221 new.params
222 .insert("container", Value::String(container.to_string()));
223 new
224 }
225}