Skip to main content

proxmox_api/generated/nodes/node/firewall/
options.rs

1#[derive(Debug, Clone)]
2pub struct OptionsClient<T> {
3    client: T,
4    path: String,
5}
6impl<T> OptionsClient<T>
7where
8    T: crate::client::Client,
9{
10    pub fn new(client: T, parent_path: &str) -> Self {
11        Self {
12            client,
13            path: format!("{}{}", parent_path, "/options"),
14        }
15    }
16}
17impl<T> OptionsClient<T>
18where
19    T: crate::client::Client,
20{
21    #[doc = "Get host firewall options."]
22    #[doc = ""]
23    #[doc = "Permission check: perm(\"/nodes/{node}\", [\"Sys.Audit\"])"]
24    pub async fn get(&self) -> Result<GetOutput, T::Error> {
25        let path = self.path.to_string();
26        self.client.get(&path, &()).await
27    }
28}
29impl<T> OptionsClient<T>
30where
31    T: crate::client::Client,
32{
33    #[doc = "Set Firewall options."]
34    #[doc = ""]
35    #[doc = "Permission check: perm(\"/nodes/{node}\", [\"Sys.Modify\"])"]
36    pub async fn put(&self, params: PutParams) -> Result<(), T::Error> {
37        let path = self.path.to_string();
38        self.client.put(&path, &params).await
39    }
40}
41#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, Default)]
42pub struct GetOutput {
43    #[serde(
44        serialize_with = "crate::types::serialize_bool_optional",
45        deserialize_with = "crate::types::deserialize_bool_optional"
46    )]
47    #[serde(skip_serializing_if = "Option::is_none", default)]
48    #[doc = "Enable host firewall rules."]
49    #[doc = ""]
50    pub enable: Option<bool>,
51    #[serde(skip_serializing_if = "Option::is_none", default)]
52    #[doc = "Log level for forwarded traffic."]
53    #[doc = ""]
54    pub log_level_forward: Option<LogLevelForward>,
55    #[serde(skip_serializing_if = "Option::is_none", default)]
56    #[doc = "Log level for incoming traffic."]
57    #[doc = ""]
58    pub log_level_in: Option<LogLevelIn>,
59    #[serde(skip_serializing_if = "Option::is_none", default)]
60    #[doc = "Log level for outgoing traffic."]
61    #[doc = ""]
62    pub log_level_out: Option<LogLevelOut>,
63    #[serde(
64        serialize_with = "crate::types::serialize_bool_optional",
65        deserialize_with = "crate::types::deserialize_bool_optional"
66    )]
67    #[serde(skip_serializing_if = "Option::is_none", default)]
68    #[doc = "Enable logging of conntrack information."]
69    #[doc = ""]
70    pub log_nf_conntrack: Option<bool>,
71    #[serde(
72        serialize_with = "crate::types::serialize_bool_optional",
73        deserialize_with = "crate::types::deserialize_bool_optional"
74    )]
75    #[serde(skip_serializing_if = "Option::is_none", default)]
76    #[doc = "Enable NDP (Neighbor Discovery Protocol)."]
77    #[doc = ""]
78    pub ndp: Option<bool>,
79    #[serde(
80        serialize_with = "crate::types::serialize_bool_optional",
81        deserialize_with = "crate::types::deserialize_bool_optional"
82    )]
83    #[serde(skip_serializing_if = "Option::is_none", default)]
84    #[doc = "Allow invalid packets on connection tracking."]
85    #[doc = ""]
86    pub nf_conntrack_allow_invalid: Option<bool>,
87    #[serde(skip_serializing_if = "Option::is_none", default)]
88    #[doc = "Enable conntrack helpers for specific protocols. Supported protocols: amanda, ftp, irc, netbios-ns, pptp, sane, sip, snmp, tftp"]
89    #[doc = ""]
90    pub nf_conntrack_helpers: Option<String>,
91    #[serde(skip_serializing_if = "Option::is_none", default)]
92    #[doc = "Maximum number of tracked connections."]
93    #[doc = ""]
94    pub nf_conntrack_max: Option<NfConntrackMaxInt>,
95    #[serde(skip_serializing_if = "Option::is_none", default)]
96    #[doc = "Conntrack established timeout."]
97    #[doc = ""]
98    pub nf_conntrack_tcp_timeout_established: Option<NfConntrackTcpTimeoutEstablishedInt>,
99    #[serde(skip_serializing_if = "Option::is_none", default)]
100    #[doc = "Conntrack syn recv timeout."]
101    #[doc = ""]
102    pub nf_conntrack_tcp_timeout_syn_recv: Option<NfConntrackTcpTimeoutSynRecvInt>,
103    #[serde(
104        serialize_with = "crate::types::serialize_bool_optional",
105        deserialize_with = "crate::types::deserialize_bool_optional"
106    )]
107    #[serde(skip_serializing_if = "Option::is_none", default)]
108    #[doc = "Enable nftables based firewall (tech preview)"]
109    #[doc = ""]
110    pub nftables: Option<bool>,
111    #[serde(
112        serialize_with = "crate::types::serialize_bool_optional",
113        deserialize_with = "crate::types::deserialize_bool_optional"
114    )]
115    #[serde(skip_serializing_if = "Option::is_none", default)]
116    #[doc = "Enable SMURFS filter."]
117    #[doc = ""]
118    pub nosmurfs: Option<bool>,
119    #[serde(
120        serialize_with = "crate::types::serialize_bool_optional",
121        deserialize_with = "crate::types::deserialize_bool_optional"
122    )]
123    #[serde(skip_serializing_if = "Option::is_none", default)]
124    #[doc = "Enable synflood protection"]
125    #[doc = ""]
126    pub protection_synflood: Option<bool>,
127    #[serde(skip_serializing_if = "Option::is_none", default)]
128    #[doc = "Synflood protection rate burst by ip src."]
129    #[doc = ""]
130    pub protection_synflood_burst: Option<ProtectionSynfloodBurstInt>,
131    #[serde(skip_serializing_if = "Option::is_none", default)]
132    #[doc = "Synflood protection rate syn/sec by ip src."]
133    #[doc = ""]
134    pub protection_synflood_rate: Option<ProtectionSynfloodRateInt>,
135    #[serde(skip_serializing_if = "Option::is_none", default)]
136    #[doc = "Log level for SMURFS filter."]
137    #[doc = ""]
138    pub smurf_log_level: Option<SmurfLogLevel>,
139    #[serde(skip_serializing_if = "Option::is_none", default)]
140    #[doc = "Log level for illegal tcp flags filter."]
141    #[doc = ""]
142    pub tcp_flags_log_level: Option<TcpFlagsLogLevel>,
143    #[serde(
144        serialize_with = "crate::types::serialize_bool_optional",
145        deserialize_with = "crate::types::deserialize_bool_optional"
146    )]
147    #[serde(skip_serializing_if = "Option::is_none", default)]
148    #[doc = "Filter illegal combinations of TCP flags."]
149    #[doc = ""]
150    pub tcpflags: Option<bool>,
151    #[serde(
152        flatten,
153        default,
154        skip_serializing_if = "::std::collections::HashMap::is_empty"
155    )]
156    pub additional_properties: ::std::collections::HashMap<String, ::serde_json::Value>,
157}
158#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, Default)]
159pub struct PutParams {
160    #[serde(skip_serializing_if = "Option::is_none", default)]
161    #[doc = "A list of settings you want to delete."]
162    #[doc = ""]
163    pub delete: Option<String>,
164    #[serde(skip_serializing_if = "Option::is_none", default)]
165    #[doc = "Prevent changes if current configuration file has a different digest. This can be used to prevent concurrent modifications."]
166    #[doc = ""]
167    pub digest: Option<DigestStr>,
168    #[serde(
169        serialize_with = "crate::types::serialize_bool_optional",
170        deserialize_with = "crate::types::deserialize_bool_optional"
171    )]
172    #[serde(skip_serializing_if = "Option::is_none", default)]
173    #[doc = "Enable host firewall rules."]
174    #[doc = ""]
175    pub enable: Option<bool>,
176    #[serde(skip_serializing_if = "Option::is_none", default)]
177    #[doc = "Log level for forwarded traffic."]
178    #[doc = ""]
179    pub log_level_forward: Option<LogLevelForward>,
180    #[serde(skip_serializing_if = "Option::is_none", default)]
181    #[doc = "Log level for incoming traffic."]
182    #[doc = ""]
183    pub log_level_in: Option<LogLevelIn>,
184    #[serde(skip_serializing_if = "Option::is_none", default)]
185    #[doc = "Log level for outgoing traffic."]
186    #[doc = ""]
187    pub log_level_out: Option<LogLevelOut>,
188    #[serde(
189        serialize_with = "crate::types::serialize_bool_optional",
190        deserialize_with = "crate::types::deserialize_bool_optional"
191    )]
192    #[serde(skip_serializing_if = "Option::is_none", default)]
193    #[doc = "Enable logging of conntrack information."]
194    #[doc = ""]
195    pub log_nf_conntrack: Option<bool>,
196    #[serde(
197        serialize_with = "crate::types::serialize_bool_optional",
198        deserialize_with = "crate::types::deserialize_bool_optional"
199    )]
200    #[serde(skip_serializing_if = "Option::is_none", default)]
201    #[doc = "Enable NDP (Neighbor Discovery Protocol)."]
202    #[doc = ""]
203    pub ndp: Option<bool>,
204    #[serde(
205        serialize_with = "crate::types::serialize_bool_optional",
206        deserialize_with = "crate::types::deserialize_bool_optional"
207    )]
208    #[serde(skip_serializing_if = "Option::is_none", default)]
209    #[doc = "Allow invalid packets on connection tracking."]
210    #[doc = ""]
211    pub nf_conntrack_allow_invalid: Option<bool>,
212    #[serde(skip_serializing_if = "Option::is_none", default)]
213    #[doc = "Enable conntrack helpers for specific protocols. Supported protocols: amanda, ftp, irc, netbios-ns, pptp, sane, sip, snmp, tftp"]
214    #[doc = ""]
215    pub nf_conntrack_helpers: Option<String>,
216    #[serde(skip_serializing_if = "Option::is_none", default)]
217    #[doc = "Maximum number of tracked connections."]
218    #[doc = ""]
219    pub nf_conntrack_max: Option<NfConntrackMaxInt>,
220    #[serde(skip_serializing_if = "Option::is_none", default)]
221    #[doc = "Conntrack established timeout."]
222    #[doc = ""]
223    pub nf_conntrack_tcp_timeout_established: Option<NfConntrackTcpTimeoutEstablishedInt>,
224    #[serde(skip_serializing_if = "Option::is_none", default)]
225    #[doc = "Conntrack syn recv timeout."]
226    #[doc = ""]
227    pub nf_conntrack_tcp_timeout_syn_recv: Option<NfConntrackTcpTimeoutSynRecvInt>,
228    #[serde(
229        serialize_with = "crate::types::serialize_bool_optional",
230        deserialize_with = "crate::types::deserialize_bool_optional"
231    )]
232    #[serde(skip_serializing_if = "Option::is_none", default)]
233    #[doc = "Enable nftables based firewall (tech preview)"]
234    #[doc = ""]
235    pub nftables: Option<bool>,
236    #[serde(
237        serialize_with = "crate::types::serialize_bool_optional",
238        deserialize_with = "crate::types::deserialize_bool_optional"
239    )]
240    #[serde(skip_serializing_if = "Option::is_none", default)]
241    #[doc = "Enable SMURFS filter."]
242    #[doc = ""]
243    pub nosmurfs: Option<bool>,
244    #[serde(
245        serialize_with = "crate::types::serialize_bool_optional",
246        deserialize_with = "crate::types::deserialize_bool_optional"
247    )]
248    #[serde(skip_serializing_if = "Option::is_none", default)]
249    #[doc = "Enable synflood protection"]
250    #[doc = ""]
251    pub protection_synflood: Option<bool>,
252    #[serde(skip_serializing_if = "Option::is_none", default)]
253    #[doc = "Synflood protection rate burst by ip src."]
254    #[doc = ""]
255    pub protection_synflood_burst: Option<ProtectionSynfloodBurstInt>,
256    #[serde(skip_serializing_if = "Option::is_none", default)]
257    #[doc = "Synflood protection rate syn/sec by ip src."]
258    #[doc = ""]
259    pub protection_synflood_rate: Option<ProtectionSynfloodRateInt>,
260    #[serde(skip_serializing_if = "Option::is_none", default)]
261    #[doc = "Log level for SMURFS filter."]
262    #[doc = ""]
263    pub smurf_log_level: Option<SmurfLogLevel>,
264    #[serde(skip_serializing_if = "Option::is_none", default)]
265    #[doc = "Log level for illegal tcp flags filter."]
266    #[doc = ""]
267    pub tcp_flags_log_level: Option<TcpFlagsLogLevel>,
268    #[serde(
269        serialize_with = "crate::types::serialize_bool_optional",
270        deserialize_with = "crate::types::deserialize_bool_optional"
271    )]
272    #[serde(skip_serializing_if = "Option::is_none", default)]
273    #[doc = "Filter illegal combinations of TCP flags."]
274    #[doc = ""]
275    pub tcpflags: Option<bool>,
276    #[serde(
277        flatten,
278        default,
279        skip_serializing_if = "::std::collections::HashMap::is_empty"
280    )]
281    pub additional_properties: ::std::collections::HashMap<String, ::serde_json::Value>,
282}
283#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq)]
284#[doc = "Log level for forwarded traffic."]
285#[doc = ""]
286pub enum LogLevelForward {
287    #[serde(rename = "alert")]
288    Alert,
289    #[serde(rename = "crit")]
290    Crit,
291    #[serde(rename = "debug")]
292    Debug,
293    #[serde(rename = "emerg")]
294    Emerg,
295    #[serde(rename = "err")]
296    Err,
297    #[serde(rename = "info")]
298    Info,
299    #[serde(rename = "nolog")]
300    Nolog,
301    #[serde(rename = "notice")]
302    Notice,
303    #[serde(rename = "warning")]
304    Warning,
305}
306impl TryFrom<&str> for LogLevelForward {
307    type Error = String;
308    fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
309        match value {
310            "alert" => Ok(Self::Alert),
311            "crit" => Ok(Self::Crit),
312            "debug" => Ok(Self::Debug),
313            "emerg" => Ok(Self::Emerg),
314            "err" => Ok(Self::Err),
315            "info" => Ok(Self::Info),
316            "nolog" => Ok(Self::Nolog),
317            "notice" => Ok(Self::Notice),
318            "warning" => Ok(Self::Warning),
319            v => Err(format!("Unknown variant {v}")),
320        }
321    }
322}
323#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq)]
324#[doc = "Log level for incoming traffic."]
325#[doc = ""]
326pub enum LogLevelIn {
327    #[serde(rename = "alert")]
328    Alert,
329    #[serde(rename = "crit")]
330    Crit,
331    #[serde(rename = "debug")]
332    Debug,
333    #[serde(rename = "emerg")]
334    Emerg,
335    #[serde(rename = "err")]
336    Err,
337    #[serde(rename = "info")]
338    Info,
339    #[serde(rename = "nolog")]
340    Nolog,
341    #[serde(rename = "notice")]
342    Notice,
343    #[serde(rename = "warning")]
344    Warning,
345}
346impl TryFrom<&str> for LogLevelIn {
347    type Error = String;
348    fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
349        match value {
350            "alert" => Ok(Self::Alert),
351            "crit" => Ok(Self::Crit),
352            "debug" => Ok(Self::Debug),
353            "emerg" => Ok(Self::Emerg),
354            "err" => Ok(Self::Err),
355            "info" => Ok(Self::Info),
356            "nolog" => Ok(Self::Nolog),
357            "notice" => Ok(Self::Notice),
358            "warning" => Ok(Self::Warning),
359            v => Err(format!("Unknown variant {v}")),
360        }
361    }
362}
363#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq)]
364#[doc = "Log level for outgoing traffic."]
365#[doc = ""]
366pub enum LogLevelOut {
367    #[serde(rename = "alert")]
368    Alert,
369    #[serde(rename = "crit")]
370    Crit,
371    #[serde(rename = "debug")]
372    Debug,
373    #[serde(rename = "emerg")]
374    Emerg,
375    #[serde(rename = "err")]
376    Err,
377    #[serde(rename = "info")]
378    Info,
379    #[serde(rename = "nolog")]
380    Nolog,
381    #[serde(rename = "notice")]
382    Notice,
383    #[serde(rename = "warning")]
384    Warning,
385}
386impl TryFrom<&str> for LogLevelOut {
387    type Error = String;
388    fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
389        match value {
390            "alert" => Ok(Self::Alert),
391            "crit" => Ok(Self::Crit),
392            "debug" => Ok(Self::Debug),
393            "emerg" => Ok(Self::Emerg),
394            "err" => Ok(Self::Err),
395            "info" => Ok(Self::Info),
396            "nolog" => Ok(Self::Nolog),
397            "notice" => Ok(Self::Notice),
398            "warning" => Ok(Self::Warning),
399            v => Err(format!("Unknown variant {v}")),
400        }
401    }
402}
403#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq)]
404#[doc = "Log level for SMURFS filter."]
405#[doc = ""]
406pub enum SmurfLogLevel {
407    #[serde(rename = "alert")]
408    Alert,
409    #[serde(rename = "crit")]
410    Crit,
411    #[serde(rename = "debug")]
412    Debug,
413    #[serde(rename = "emerg")]
414    Emerg,
415    #[serde(rename = "err")]
416    Err,
417    #[serde(rename = "info")]
418    Info,
419    #[serde(rename = "nolog")]
420    Nolog,
421    #[serde(rename = "notice")]
422    Notice,
423    #[serde(rename = "warning")]
424    Warning,
425}
426impl TryFrom<&str> for SmurfLogLevel {
427    type Error = String;
428    fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
429        match value {
430            "alert" => Ok(Self::Alert),
431            "crit" => Ok(Self::Crit),
432            "debug" => Ok(Self::Debug),
433            "emerg" => Ok(Self::Emerg),
434            "err" => Ok(Self::Err),
435            "info" => Ok(Self::Info),
436            "nolog" => Ok(Self::Nolog),
437            "notice" => Ok(Self::Notice),
438            "warning" => Ok(Self::Warning),
439            v => Err(format!("Unknown variant {v}")),
440        }
441    }
442}
443#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq)]
444#[doc = "Log level for illegal tcp flags filter."]
445#[doc = ""]
446pub enum TcpFlagsLogLevel {
447    #[serde(rename = "alert")]
448    Alert,
449    #[serde(rename = "crit")]
450    Crit,
451    #[serde(rename = "debug")]
452    Debug,
453    #[serde(rename = "emerg")]
454    Emerg,
455    #[serde(rename = "err")]
456    Err,
457    #[serde(rename = "info")]
458    Info,
459    #[serde(rename = "nolog")]
460    Nolog,
461    #[serde(rename = "notice")]
462    Notice,
463    #[serde(rename = "warning")]
464    Warning,
465}
466impl TryFrom<&str> for TcpFlagsLogLevel {
467    type Error = String;
468    fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
469        match value {
470            "alert" => Ok(Self::Alert),
471            "crit" => Ok(Self::Crit),
472            "debug" => Ok(Self::Debug),
473            "emerg" => Ok(Self::Emerg),
474            "err" => Ok(Self::Err),
475            "info" => Ok(Self::Info),
476            "nolog" => Ok(Self::Nolog),
477            "notice" => Ok(Self::Notice),
478            "warning" => Ok(Self::Warning),
479            v => Err(format!("Unknown variant {v}")),
480        }
481    }
482}
483#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
484pub struct NfConntrackMaxInt(i128);
485impl crate::types::bounded_integer::BoundedInteger for NfConntrackMaxInt {
486    const MIN: Option<i128> = Some(32768i128);
487    const MAX: Option<i128> = None::<i128>;
488    const DEFAULT: Option<i128> = Some(262144i128);
489    const TYPE_DESCRIPTION: &'static str = "an integer greater than or equal to 32768";
490    fn get(&self) -> i128 {
491        self.0
492    }
493    fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
494        Self::validate(value)?;
495        Ok(Self(value))
496    }
497}
498impl std::convert::TryFrom<i128> for NfConntrackMaxInt {
499    type Error = crate::types::bounded_integer::BoundedIntegerError;
500    fn try_from(value: i128) -> Result<Self, Self::Error> {
501        crate::types::bounded_integer::BoundedInteger::new(value)
502    }
503}
504impl ::serde::Serialize for NfConntrackMaxInt {
505    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
506    where
507        S: ::serde::Serializer,
508    {
509        crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
510    }
511}
512impl<'de> ::serde::Deserialize<'de> for NfConntrackMaxInt {
513    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
514    where
515        D: ::serde::Deserializer<'de>,
516    {
517        crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
518    }
519}
520#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
521pub struct NfConntrackTcpTimeoutEstablishedInt(i128);
522impl crate::types::bounded_integer::BoundedInteger for NfConntrackTcpTimeoutEstablishedInt {
523    const MIN: Option<i128> = Some(7875i128);
524    const MAX: Option<i128> = None::<i128>;
525    const DEFAULT: Option<i128> = Some(432000i128);
526    const TYPE_DESCRIPTION: &'static str = "an integer greater than or equal to 7875";
527    fn get(&self) -> i128 {
528        self.0
529    }
530    fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
531        Self::validate(value)?;
532        Ok(Self(value))
533    }
534}
535impl std::convert::TryFrom<i128> for NfConntrackTcpTimeoutEstablishedInt {
536    type Error = crate::types::bounded_integer::BoundedIntegerError;
537    fn try_from(value: i128) -> Result<Self, Self::Error> {
538        crate::types::bounded_integer::BoundedInteger::new(value)
539    }
540}
541impl ::serde::Serialize for NfConntrackTcpTimeoutEstablishedInt {
542    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
543    where
544        S: ::serde::Serializer,
545    {
546        crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
547    }
548}
549impl<'de> ::serde::Deserialize<'de> for NfConntrackTcpTimeoutEstablishedInt {
550    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
551    where
552        D: ::serde::Deserializer<'de>,
553    {
554        crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
555    }
556}
557#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
558pub struct NfConntrackTcpTimeoutSynRecvInt(i128);
559impl crate::types::bounded_integer::BoundedInteger for NfConntrackTcpTimeoutSynRecvInt {
560    const MIN: Option<i128> = Some(30i128);
561    const MAX: Option<i128> = Some(60i128);
562    const DEFAULT: Option<i128> = Some(60i128);
563    const TYPE_DESCRIPTION: &'static str = "an integer between 30 and 60";
564    fn get(&self) -> i128 {
565        self.0
566    }
567    fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
568        Self::validate(value)?;
569        Ok(Self(value))
570    }
571}
572impl std::convert::TryFrom<i128> for NfConntrackTcpTimeoutSynRecvInt {
573    type Error = crate::types::bounded_integer::BoundedIntegerError;
574    fn try_from(value: i128) -> Result<Self, Self::Error> {
575        crate::types::bounded_integer::BoundedInteger::new(value)
576    }
577}
578impl ::serde::Serialize for NfConntrackTcpTimeoutSynRecvInt {
579    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
580    where
581        S: ::serde::Serializer,
582    {
583        crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
584    }
585}
586impl<'de> ::serde::Deserialize<'de> for NfConntrackTcpTimeoutSynRecvInt {
587    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
588    where
589        D: ::serde::Deserializer<'de>,
590    {
591        crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
592    }
593}
594#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
595pub struct ProtectionSynfloodBurstInt(i128);
596impl crate::types::bounded_integer::BoundedInteger for ProtectionSynfloodBurstInt {
597    const MIN: Option<i128> = None::<i128>;
598    const MAX: Option<i128> = None::<i128>;
599    const DEFAULT: Option<i128> = Some(1000i128);
600    const TYPE_DESCRIPTION: &'static str = "a valid integer";
601    fn get(&self) -> i128 {
602        self.0
603    }
604    fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
605        Self::validate(value)?;
606        Ok(Self(value))
607    }
608}
609impl std::convert::TryFrom<i128> for ProtectionSynfloodBurstInt {
610    type Error = crate::types::bounded_integer::BoundedIntegerError;
611    fn try_from(value: i128) -> Result<Self, Self::Error> {
612        crate::types::bounded_integer::BoundedInteger::new(value)
613    }
614}
615impl ::serde::Serialize for ProtectionSynfloodBurstInt {
616    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
617    where
618        S: ::serde::Serializer,
619    {
620        crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
621    }
622}
623impl<'de> ::serde::Deserialize<'de> for ProtectionSynfloodBurstInt {
624    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
625    where
626        D: ::serde::Deserializer<'de>,
627    {
628        crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
629    }
630}
631#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
632pub struct ProtectionSynfloodRateInt(i128);
633impl crate::types::bounded_integer::BoundedInteger for ProtectionSynfloodRateInt {
634    const MIN: Option<i128> = None::<i128>;
635    const MAX: Option<i128> = None::<i128>;
636    const DEFAULT: Option<i128> = Some(200i128);
637    const TYPE_DESCRIPTION: &'static str = "a valid integer";
638    fn get(&self) -> i128 {
639        self.0
640    }
641    fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
642        Self::validate(value)?;
643        Ok(Self(value))
644    }
645}
646impl std::convert::TryFrom<i128> for ProtectionSynfloodRateInt {
647    type Error = crate::types::bounded_integer::BoundedIntegerError;
648    fn try_from(value: i128) -> Result<Self, Self::Error> {
649        crate::types::bounded_integer::BoundedInteger::new(value)
650    }
651}
652impl ::serde::Serialize for ProtectionSynfloodRateInt {
653    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
654    where
655        S: ::serde::Serializer,
656    {
657        crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
658    }
659}
660impl<'de> ::serde::Deserialize<'de> for ProtectionSynfloodRateInt {
661    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
662    where
663        D: ::serde::Deserializer<'de>,
664    {
665        crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
666    }
667}
668#[derive(Debug, Clone, PartialEq, PartialOrd)]
669pub struct DigestStr {
670    value: String,
671}
672impl crate::types::bounded_string::BoundedString for DigestStr {
673    const MIN_LENGTH: Option<usize> = None::<usize>;
674    const MAX_LENGTH: Option<usize> = Some(64usize);
675    const DEFAULT: Option<&'static str> = None::<&'static str>;
676    const PATTERN: Option<&'static str> = None::<&'static str>;
677    const TYPE_DESCRIPTION: &'static str = "a string with length at most 64";
678    fn get_value(&self) -> &str {
679        &self.value
680    }
681    fn new(value: String) -> Result<Self, crate::types::bounded_string::BoundedStringError> {
682        Self::validate(&value)?;
683        Ok(Self { value })
684    }
685}
686impl std::convert::TryFrom<String> for DigestStr {
687    type Error = crate::types::bounded_string::BoundedStringError;
688    fn try_from(value: String) -> Result<Self, Self::Error> {
689        crate::types::bounded_string::BoundedString::new(value)
690    }
691}
692impl ::serde::Serialize for DigestStr {
693    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
694    where
695        S: ::serde::Serializer,
696    {
697        crate::types::bounded_string::serialize_bounded_string(self, serializer)
698    }
699}
700impl<'de> ::serde::Deserialize<'de> for DigestStr {
701    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
702    where
703        D: ::serde::Deserializer<'de>,
704    {
705        crate::types::bounded_string::deserialize_bounded_string(deserializer)
706    }
707}