[pdm-devel] [PATCH proxmox v2 04/14] network-types: add api wrapper type for std::net::IpAddr

Lukas Wagner l.wagner at proxmox.com
Tue Dec 9 10:16:44 CET 2025


Reviewed-by: Lukas Wagner <l.wagner at proxmox.com>

On Fri Dec 5, 2025 at 12:25 PM CET, Christoph Heiss wrote:
> Much like the existing ones for Ipv4Addr/Ipv6Addr.
>
> Signed-off-by: Christoph Heiss <c.heiss at proxmox.com>
> ---
> Changes v1 -> v2:
>   * no changes
>
>  proxmox-network-types/src/ip_address.rs | 64 ++++++++++++++++++++++++-
>  1 file changed, 62 insertions(+), 2 deletions(-)
>
> diff --git a/proxmox-network-types/src/ip_address.rs b/proxmox-network-types/src/ip_address.rs
> index 1c721975..5133f5d9 100644
> --- a/proxmox-network-types/src/ip_address.rs
> +++ b/proxmox-network-types/src/ip_address.rs
> @@ -16,8 +16,10 @@ pub mod api_types {
>      use std::net::AddrParseError;
>      use std::ops::{Deref, DerefMut};
>  
> -    use proxmox_schema::api_types::IP_V6_SCHEMA;
> -    use proxmox_schema::{api_types::IP_V4_SCHEMA, ApiType, UpdaterType};
> +    use proxmox_schema::{
> +        api_types::{IP_SCHEMA, IP_V4_SCHEMA, IP_V6_SCHEMA},
> +        ApiType, UpdaterType,
> +    };
>      use serde_with::{DeserializeFromStr, SerializeDisplay};
>  
>      #[derive(
> @@ -135,6 +137,64 @@ pub mod api_types {
>              Self(value)
>          }
>      }
> +
> +    #[derive(
> +        Debug,
> +        Clone,
> +        Copy,
> +        Eq,
> +        PartialEq,
> +        Ord,
> +        PartialOrd,
> +        DeserializeFromStr,
> +        SerializeDisplay,
> +        Hash,
> +    )]
> +    #[repr(transparent)]
> +    pub struct IpAddr(pub std::net::IpAddr);
> +
> +    impl ApiType for IpAddr {
> +        const API_SCHEMA: proxmox_schema::Schema = IP_SCHEMA;
> +    }
> +
> +    impl UpdaterType for IpAddr {
> +        type Updater = Option<IpAddr>;
> +    }
> +
> +    impl Deref for IpAddr {
> +        type Target = std::net::IpAddr;
> +
> +        fn deref(&self) -> &Self::Target {
> +            &self.0
> +        }
> +    }
> +
> +    impl DerefMut for IpAddr {
> +        fn deref_mut(&mut self) -> &mut Self::Target {
> +            &mut self.0
> +        }
> +    }
> +
> +    impl std::str::FromStr for IpAddr {
> +        type Err = AddrParseError;
> +
> +        fn from_str(value: &str) -> Result<Self, Self::Err> {
> +            let ip_address = std::net::IpAddr::from_str(value)?;
> +            Ok(Self(ip_address))
> +        }
> +    }
> +
> +    impl std::fmt::Display for IpAddr {
> +        fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
> +            self.0.fmt(f)
> +        }
> +    }
> +
> +    impl From<std::net::IpAddr> for IpAddr {
> +        fn from(value: std::net::IpAddr) -> Self {
> +            Self(value)
> +        }
> +    }
>  }
>  
>  /// The family (v4 or v6)  of an IP address or CIDR prefix





More information about the pdm-devel mailing list