From e2c4014bda48f24ce37cdd0ddec643f5c710232a Mon Sep 17 00:00:00 2001 From: fox0 <15684995+fox0@users.noreply.github.com> Date: Sun, 28 Jan 2024 20:39:21 +0700 Subject: [PATCH] impls for Ipv4Addr/Ipv6Addr --- src/de/impls.rs | 17 +++++++++++++++++ src/enc/impls.rs | 17 ++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/de/impls.rs b/src/de/impls.rs index bf88847d..d825a08a 100644 --- a/src/de/impls.rs +++ b/src/de/impls.rs @@ -10,6 +10,7 @@ use crate::{ use core::{ cell::{Cell, RefCell}, cmp::Reverse, + net::{Ipv4Addr, Ipv6Addr}, num::{ NonZeroI128, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI8, NonZeroIsize, NonZeroU128, NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU8, NonZeroUsize, Wrapping, @@ -670,6 +671,22 @@ impl Decode for Duration { } impl_borrow_decode!(Duration); +impl Decode for Ipv4Addr { + fn decode(decoder: &mut D) -> Result { + let octets: [u8; 4] = Decode::decode(decoder)?; + Ok(Ipv4Addr::from(octets)) + } +} +impl_borrow_decode!(Ipv4Addr); + +impl Decode for Ipv6Addr { + fn decode(decoder: &mut D) -> Result { + let octets: [u8; 16] = Decode::decode(decoder)?; + Ok(Ipv6Addr::from(octets)) + } +} +impl_borrow_decode!(Ipv6Addr); + impl Decode for Range where T: Decode, diff --git a/src/enc/impls.rs b/src/enc/impls.rs index a2c518d2..0c2dec51 100644 --- a/src/enc/impls.rs +++ b/src/enc/impls.rs @@ -3,10 +3,11 @@ use crate::{ config::{Endianness, IntEncoding, InternalEndianConfig, InternalIntEncodingConfig}, error::EncodeError, }; -use core::cmp::Reverse; use core::{ cell::{Cell, RefCell}, + cmp::Reverse, marker::PhantomData, + net::{Ipv4Addr, Ipv6Addr}, num::{ NonZeroI128, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI8, NonZeroIsize, NonZeroU128, NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU8, NonZeroUsize, Wrapping, @@ -437,6 +438,20 @@ impl Encode for Duration { } } +impl Encode for Ipv4Addr { + fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> { + self.octets().encode(encoder)?; + Ok(()) + } +} + +impl Encode for Ipv6Addr { + fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> { + self.octets().encode(encoder)?; + Ok(()) + } +} + impl Encode for Range where T: Encode,