proxmox_serde provides helpers for parsing optional numbers / booleans coming from perl, so move to using them instead of implementing our own versions here. No functional changes intended.
Signed-off-by: Stefan Hanreich <s.hanre...@proxmox.com> --- proxmox-ve-config/Cargo.toml | 1 + proxmox-ve-config/debian/control | 4 ++ proxmox-ve-config/src/firewall/bridge.rs | 3 +- proxmox-ve-config/src/firewall/cluster.rs | 6 +- proxmox-ve-config/src/firewall/guest.rs | 14 ++-- proxmox-ve-config/src/firewall/host.rs | 26 ++++---- proxmox-ve-config/src/firewall/parse.rs | 80 ----------------------- 7 files changed, 28 insertions(+), 106 deletions(-) diff --git a/proxmox-ve-config/Cargo.toml b/proxmox-ve-config/Cargo.toml index 6c7a47e..e998b45 100644 --- a/proxmox-ve-config/Cargo.toml +++ b/proxmox-ve-config/Cargo.toml @@ -16,6 +16,7 @@ serde = { version = "1", features = [ "derive" ] } serde_json = "1" serde_plain = "1" serde_with = "3" +proxmox-serde = { version = "0.1.2", features = [ "perl" ]} proxmox-schema = "4" proxmox-sys = "0.6.4" diff --git a/proxmox-ve-config/debian/control b/proxmox-ve-config/debian/control index f412943..2c43724 100644 --- a/proxmox-ve-config/debian/control +++ b/proxmox-ve-config/debian/control @@ -10,6 +10,8 @@ Build-Depends-Arch: cargo:native <!nocheck>, librust-log-0.4+default-dev <!nocheck>, librust-nix-0.26+default-dev <!nocheck>, librust-proxmox-schema-4+default-dev <!nocheck>, + librust-proxmox-serde-0.1+default-dev (>= 0.1.2-~~) <!nocheck>, + librust-proxmox-serde-0.1+perl-dev (>= 0.1.2-~~) <!nocheck>, librust-proxmox-sortable-macro-0.1+default-dev (>= 0.1.3-~~) <!nocheck>, librust-proxmox-sys-0.6+default-dev (>= 0.6.4-~~) <!nocheck>, librust-serde-1+default-dev <!nocheck>, @@ -34,6 +36,8 @@ Depends: librust-log-0.4+default-dev, librust-nix-0.26+default-dev, librust-proxmox-schema-4+default-dev, + librust-proxmox-serde-0.1+default-dev (>= 0.1.2-~~), + librust-proxmox-serde-0.1+perl-dev (>= 0.1.2-~~), librust-proxmox-sortable-macro-0.1+default-dev (>= 0.1.3-~~), librust-proxmox-sys-0.6+default-dev (>= 0.6.4-~~), librust-serde-1+default-dev, diff --git a/proxmox-ve-config/src/firewall/bridge.rs b/proxmox-ve-config/src/firewall/bridge.rs index 4acb6fa..6dea60e 100644 --- a/proxmox-ve-config/src/firewall/bridge.rs +++ b/proxmox-ve-config/src/firewall/bridge.rs @@ -3,7 +3,6 @@ use std::io; use anyhow::Error; use serde::Deserialize; -use crate::firewall::parse::serde_option_bool; use crate::firewall::types::log::LogLevel; use crate::firewall::types::rule::{Direction, Verdict}; @@ -55,7 +54,7 @@ impl Config { #[derive(Debug, Default, Deserialize)] #[cfg_attr(test, derive(Eq, PartialEq))] pub struct Options { - #[serde(default, with = "serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] enable: Option<bool>, policy_forward: Option<Verdict>, diff --git a/proxmox-ve-config/src/firewall/cluster.rs b/proxmox-ve-config/src/firewall/cluster.rs index ce3dd53..a775cd9 100644 --- a/proxmox-ve-config/src/firewall/cluster.rs +++ b/proxmox-ve-config/src/firewall/cluster.rs @@ -10,7 +10,7 @@ use crate::firewall::types::log::LogRateLimit; use crate::firewall::types::rule::{Direction, Verdict}; use crate::firewall::types::{Alias, Group, Rule}; -use crate::firewall::parse::{serde_option_bool, serde_option_log_ratelimit}; +use crate::firewall::parse::serde_option_log_ratelimit; #[derive(Debug, Default)] pub struct Config { @@ -118,10 +118,10 @@ impl Config { #[derive(Debug, Default, Deserialize)] #[cfg_attr(test, derive(Eq, PartialEq))] pub struct Options { - #[serde(default, with = "serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] enable: Option<bool>, - #[serde(default, with = "serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] ebtables: Option<bool>, #[serde(default, with = "serde_option_log_ratelimit")] diff --git a/proxmox-ve-config/src/firewall/guest.rs b/proxmox-ve-config/src/firewall/guest.rs index 23eaa4e..4428a75 100644 --- a/proxmox-ve-config/src/firewall/guest.rs +++ b/proxmox-ve-config/src/firewall/guest.rs @@ -13,8 +13,6 @@ use crate::firewall::types::Ipset; use anyhow::{bail, Error}; use serde::Deserialize; -use crate::firewall::parse::serde_option_bool; - /// default return value for [`Config::is_enabled()`] pub const GUEST_ENABLED_DEFAULT: bool = false; /// default return value for [`Config::allow_ndp()`] @@ -37,25 +35,25 @@ pub const GUEST_POLICY_FORWARD_DEFAULT: Verdict = Verdict::Accept; #[derive(Debug, Default, Deserialize)] #[cfg_attr(test, derive(Eq, PartialEq))] pub struct Options { - #[serde(default, with = "serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] dhcp: Option<bool>, - #[serde(default, with = "serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] enable: Option<bool>, - #[serde(default, with = "serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] ipfilter: Option<bool>, - #[serde(default, with = "serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] ndp: Option<bool>, - #[serde(default, with = "serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] radv: Option<bool>, log_level_in: Option<LogLevel>, log_level_out: Option<LogLevel>, - #[serde(default, with = "serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] macfilter: Option<bool>, #[serde(rename = "policy_in")] diff --git a/proxmox-ve-config/src/firewall/host.rs b/proxmox-ve-config/src/firewall/host.rs index 394896c..f7b02f9 100644 --- a/proxmox-ve-config/src/firewall/host.rs +++ b/proxmox-ve-config/src/firewall/host.rs @@ -36,49 +36,49 @@ pub const HOST_LOG_INVALID_CONNTRACK: bool = false; #[derive(Debug, Default, Deserialize)] #[cfg_attr(test, derive(Eq, PartialEq))] pub struct Options { - #[serde(default, with = "parse::serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] enable: Option<bool>, - #[serde(default, with = "parse::serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] nftables: Option<bool>, log_level_in: Option<LogLevel>, log_level_out: Option<LogLevel>, log_level_forward: Option<LogLevel>, - #[serde(default, with = "parse::serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] log_nf_conntrack: Option<bool>, - #[serde(default, with = "parse::serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] ndp: Option<bool>, - #[serde(default, with = "parse::serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] nf_conntrack_allow_invalid: Option<bool>, // is Option<Vec<>> for easier deserialization #[serde(default, with = "parse::serde_option_conntrack_helpers")] nf_conntrack_helpers: Option<Vec<String>>, - #[serde(default, with = "parse::serde_option_number")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_i64")] nf_conntrack_max: Option<i64>, - #[serde(default, with = "parse::serde_option_number")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_i64")] nf_conntrack_tcp_timeout_established: Option<i64>, - #[serde(default, with = "parse::serde_option_number")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_i64")] nf_conntrack_tcp_timeout_syn_recv: Option<i64>, - #[serde(default, with = "parse::serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] nosmurfs: Option<bool>, - #[serde(default, with = "parse::serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] protection_synflood: Option<bool>, - #[serde(default, with = "parse::serde_option_number")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_i64")] protection_synflood_burst: Option<i64>, - #[serde(default, with = "parse::serde_option_number")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_i64")] protection_synflood_rate: Option<i64>, smurf_log_level: Option<LogLevel>, tcp_flags_log_level: Option<LogLevel>, - #[serde(default, with = "parse::serde_option_bool")] + #[serde(default, deserialize_with = "proxmox_serde::perl::deserialize_bool")] tcpflags: Option<bool>, } diff --git a/proxmox-ve-config/src/firewall/parse.rs b/proxmox-ve-config/src/firewall/parse.rs index 8cf4757..7fd5c84 100644 --- a/proxmox-ve-config/src/firewall/parse.rs +++ b/proxmox-ve-config/src/firewall/parse.rs @@ -148,86 +148,6 @@ pub fn parse_named_section_tail<'a>( }) } -// parses a number from a string OR number -pub mod serde_option_number { - use std::fmt; - - use serde::de::{Deserializer, Error, Visitor}; - - pub fn deserialize<'de, D: Deserializer<'de>>( - deserializer: D, - ) -> Result<Option<i64>, D::Error> { - struct V; - - impl<'de> Visitor<'de> for V { - type Value = Option<i64>; - - fn expecting(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.write_str("a numerical value") - } - - fn visit_str<E: Error>(self, v: &str) -> Result<Self::Value, E> { - v.parse().map_err(E::custom).map(Some) - } - - fn visit_none<E: Error>(self) -> Result<Self::Value, E> { - Ok(None) - } - - fn visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error> - where - D: Deserializer<'de>, - { - deserializer.deserialize_any(self) - } - } - - deserializer.deserialize_any(V) - } -} - -// parses a bool from a string OR bool -pub mod serde_option_bool { - use std::fmt; - - use serde::de::{Deserializer, Error, Visitor}; - - pub fn deserialize<'de, D: Deserializer<'de>>( - deserializer: D, - ) -> Result<Option<bool>, D::Error> { - struct V; - - impl<'de> Visitor<'de> for V { - type Value = Option<bool>; - - fn expecting(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.write_str("a boolean-like value") - } - - fn visit_bool<E: Error>(self, v: bool) -> Result<Self::Value, E> { - Ok(Some(v)) - } - - fn visit_str<E: Error>(self, v: &str) -> Result<Self::Value, E> { - super::parse_bool(v).map_err(E::custom).map(Some) - } - - fn visit_none<E: Error>(self) -> Result<Self::Value, E> { - Ok(None) - } - - fn visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error> - where - D: Deserializer<'de>, - { - deserializer.deserialize_any(self) - } - } - - deserializer.deserialize_any(V) - } -} - // parses a comma_separated list of strings pub mod serde_option_conntrack_helpers { use std::fmt; -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel