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, ¶ms).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}