all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Wolfgang Bumiller <w.bumiller@proxmox.com>
To: Stefan Hanreich <s.hanreich@proxmox.com>
Cc: pve-devel@lists.proxmox.com
Subject: Re: [pve-devel] [PATCH proxmox-ve-rs v2 12/25] sdn: add name types
Date: Wed, 6 Nov 2024 15:18:16 +0100	[thread overview]
Message-ID: <tw2wtjbuwigtyg6azhzyct36bldsxrcxirbfi7xrh3bzybfdyn@omj4ielrqout> (raw)
In-Reply-To: <20241010155637.255451-13-s.hanreich@proxmox.com>

On Thu, Oct 10, 2024 at 05:56:24PM GMT, Stefan Hanreich wrote:
> Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
> ---
>  proxmox-ve-config/src/lib.rs     |   1 +
>  proxmox-ve-config/src/sdn/mod.rs | 240 +++++++++++++++++++++++++++++++
>  2 files changed, 241 insertions(+)
>  create mode 100644 proxmox-ve-config/src/sdn/mod.rs
> 
> diff --git a/proxmox-ve-config/src/lib.rs b/proxmox-ve-config/src/lib.rs
> index 1b6feae..d17136c 100644
> --- a/proxmox-ve-config/src/lib.rs
> +++ b/proxmox-ve-config/src/lib.rs
> @@ -2,3 +2,4 @@ pub mod common;
>  pub mod firewall;
>  pub mod guest;
>  pub mod host;
> +pub mod sdn;
> diff --git a/proxmox-ve-config/src/sdn/mod.rs b/proxmox-ve-config/src/sdn/mod.rs
> new file mode 100644
> index 0000000..4e7c525
> --- /dev/null
> +++ b/proxmox-ve-config/src/sdn/mod.rs
> @@ -0,0 +1,240 @@
> +use std::{error::Error, fmt::Display, str::FromStr};
> +
> +use serde_with::DeserializeFromStr;
> +
> +use crate::firewall::types::Cidr;
> +
> +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
> +pub enum SdnNameError {
> +    Empty,
> +    TooLong,
> +    InvalidSymbols,
> +    InvalidSubnetCidr,
> +    InvalidSubnetFormat,
> +}
> +
> +impl Error for SdnNameError {}
> +
> +impl Display for SdnNameError {
> +    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
> +        f.write_str(match self {
> +            SdnNameError::TooLong => "name too long",
> +            SdnNameError::InvalidSymbols => "invalid symbols in name",
> +            SdnNameError::InvalidSubnetCidr => "invalid cidr in name",
> +            SdnNameError::InvalidSubnetFormat => "invalid format for subnet name",
> +            SdnNameError::Empty => "name is empty",
> +        })
> +    }
> +}
> +
> +fn validate_sdn_name(name: &str) -> Result<(), SdnNameError> {
> +    if name.is_empty() {
> +        return Err(SdnNameError::Empty);
> +    }
> +
> +    if name.len() > 8 {
> +        return Err(SdnNameError::TooLong);
> +    }
> +
> +    // safe because of empty check
> +    if !name.chars().next().unwrap().is_ascii_alphabetic() {
> +        return Err(SdnNameError::InvalidSymbols);
> +    }
> +
> +    if !name.chars().all(|c| c.is_ascii_alphanumeric()) {
> +        return Err(SdnNameError::InvalidSymbols);
> +    }
> +
> +    Ok(())
> +}
> +
> +/// represents the name of an sdn zone
> +#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, DeserializeFromStr)]
> +pub struct ZoneName(String);
> +
> +impl ZoneName {
> +    /// construct a new zone name
> +    ///
> +    /// # Errors
> +    ///
> +    /// This function will return an error if the name is empty, too long (>8 characters), starts
> +    /// with a non-alphabetic symbol or if there are non alphanumeric symbols contained in the name.
> +    pub fn new(name: String) -> Result<Self, SdnNameError> {
> +        validate_sdn_name(&name)?;
> +        Ok(ZoneName(name))
> +    }
> +
> +    pub fn name(&self) -> &str {

^ I wonder if this should be `as_str()`
And would it make sense to `impl AsRef<str>`?


_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


  reply	other threads:[~2024-11-06 14:18 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-10 15:56 [pve-devel] [PATCH docs/firewall/manager/proxmox{-ve-rs, -firewall, -perl-rs} v2 00/25] autogenerate ipsets for sdn objects Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 01/25] debian: add files for packaging Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 02/25] bump serde_with to 3 Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 03/25] bump dependencies Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 04/25] firewall: add sdn scope for ipsets Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 05/25] firewall: add ip range types Stefan Hanreich
2024-11-06 13:13   ` Wolfgang Bumiller
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 06/25] firewall: address: use new iprange type for ip entries Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 07/25] ipset: add range variant to addresses Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 08/25] iprange: add methods for converting an ip range to cidrs Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 09/25] ipset: address: add helper methods Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 10/25] firewall: guest: derive traits according to rust api guidelines Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 11/25] common: add allowlist Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 12/25] sdn: add name types Stefan Hanreich
2024-11-06 14:18   ` Wolfgang Bumiller [this message]
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 13/25] sdn: add ipam module Stefan Hanreich
2024-11-06 14:52   ` Wolfgang Bumiller
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 14/25] sdn: ipam: add method for generating ipsets Stefan Hanreich
2024-11-06 15:12   ` Wolfgang Bumiller
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 15/25] sdn: add config module Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 16/25] sdn: config: add method for generating ipsets Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 17/25] tests: add sdn config tests Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-ve-rs v2 18/25] tests: add ipam tests Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-firewall v2 19/25] config: tests: add support for loading sdn and ipam config Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-firewall v2 20/25] ipsets: autogenerate ipsets for vnets and ipam Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH pve-firewall v2 21/25] add support for loading sdn firewall configuration Stefan Hanreich
2024-11-07 10:44   ` Wolfgang Bumiller
2024-10-10 15:56 ` [pve-devel] [PATCH pve-firewall v2 22/25] api: load sdn ipsets Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH proxmox-perl-rs v2 23/25] add PVE::RS::Firewall::SDN module Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH pve-manager v2 24/25] firewall: add sdn scope to IPRefSelector Stefan Hanreich
2024-10-10 15:56 ` [pve-devel] [PATCH pve-docs v2 25/25] sdn: add documentation for firewall integration Stefan Hanreich
2024-11-12 12:34 ` [pve-devel] [PATCH docs/firewall/manager/proxmox{-ve-rs, -firewall, -perl-rs} v2 00/25] autogenerate ipsets for sdn objects Stefan Hanreich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=tw2wtjbuwigtyg6azhzyct36bldsxrcxirbfi7xrh3bzybfdyn@omj4ielrqout \
    --to=w.bumiller@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    --cc=s.hanreich@proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal