Adds an enum for supported conntrack helpers (amanda, ftp, irc, netbios-ns,
pptp, sane, sip, snmp, tftp). Implements CommaSeparatedListSchema to allow
usage with CommaSeparatedList<FirewallConntrackHelper>.

Extracted form perl api and added "enum-fallback" feature.

Signed-off-by: Dietmar Maurer <[email protected]>
---
 proxmox-firewall-api-types/src/conntrack.rs | 52 +++++++++++++++++++++
 proxmox-firewall-api-types/src/lib.rs       |  3 ++
 2 files changed, 55 insertions(+)
 create mode 100644 proxmox-firewall-api-types/src/conntrack.rs

diff --git a/proxmox-firewall-api-types/src/conntrack.rs 
b/proxmox-firewall-api-types/src/conntrack.rs
new file mode 100644
index 00000000..278ec2ad
--- /dev/null
+++ b/proxmox-firewall-api-types/src/conntrack.rs
@@ -0,0 +1,52 @@
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
+use proxmox_schema::comma_separated_list::CommaSeparatedListSchema;
+use proxmox_schema::{api, ApiType, Schema};
+
+#[api]
+/// Firewall conntrack helper.
+#[derive(Clone, Copy, Debug, Eq, PartialEq, serde::Deserialize, 
serde::Serialize)]
+pub enum FirewallConntrackHelper {
+    #[serde(rename = "amanda")]
+    /// amanda.
+    Amanda,
+    #[serde(rename = "ftp")]
+    /// ftp.
+    Ftp,
+    #[serde(rename = "irc")]
+    /// irc.
+    Irc,
+    #[serde(rename = "netbios-ns")]
+    /// netbios-ns.
+    NetbiosNs,
+    #[serde(rename = "pptp")]
+    /// pptp.
+    Pptp,
+    #[serde(rename = "sane")]
+    /// sane.
+    Sane,
+    #[serde(rename = "sip")]
+    /// sip.
+    Sip,
+    #[serde(rename = "snmp")]
+    /// snmp.
+    Snmp,
+    #[serde(rename = "tftp")]
+    /// tftp.
+    Tftp,
+    #[cfg(feature = "enum-fallback")]
+    /// Unknown variants for forward compatibility.
+    #[serde(untagged)]
+    UnknownEnumValue(FixedString),
+}
+serde_plain::derive_display_from_serialize!(FirewallConntrackHelper);
+serde_plain::derive_fromstr_from_deserialize!(FirewallConntrackHelper);
+
+// So that we can use CommaSeparatedList<FirewallConntrackHelper>
+impl CommaSeparatedListSchema for FirewallConntrackHelper {
+    const ARRAY_SCHEMA: Schema = proxmox_schema::ArraySchema::new(
+        "Array of firewall conntrack helper names.",
+        &FirewallConntrackHelper::API_SCHEMA,
+    )
+    .schema();
+}
diff --git a/proxmox-firewall-api-types/src/lib.rs 
b/proxmox-firewall-api-types/src/lib.rs
index c66262cc..c6fc9ebb 100644
--- a/proxmox-firewall-api-types/src/lib.rs
+++ b/proxmox-firewall-api-types/src/lib.rs
@@ -1,3 +1,6 @@
+mod conntrack;
+pub use conntrack::FirewallConntrackHelper;
+
 mod log;
 pub use log::{
     FirewallLogLevel, FirewallLogRateLimit, FirewallPacketRate, 
FirewallPacketRateTimescale,
-- 
2.47.3



Reply via email to