[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