Fixing Serialize impl for Ipv4Net and Ipv6Net per issue #10

This commit is contained in:
Kris Price
2018-06-04 21:21:47 -07:00
parent ecd7425459
commit abc3b6fca6
2 changed files with 20 additions and 4 deletions
+2
View File
@@ -72,6 +72,7 @@ pub enum IpNet {
/// let net: Ipv4Net = "10.1.1.0/24".parse().unwrap();
/// assert_eq!(Ok(net.network()), "10.1.1.0".parse());
/// ```
//#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub struct Ipv4Net {
addr: Ipv4Addr,
@@ -102,6 +103,7 @@ pub struct Ipv4Net {
/// let net: Ipv6Net = "fd00::/32".parse().unwrap();
/// assert_eq!(Ok(net.network()), "fd00::".parse());
/// ```
//#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub struct Ipv6Net {
addr: Ipv6Addr,
+18 -4
View File
@@ -13,9 +13,16 @@ impl<'de> Deserialize<'de> for Ipv4Net {
impl Serialize for Ipv4Net {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer
where S: Serializer,
{
serializer.serialize_str(&self.to_string())
if serializer.is_human_readable() {
serializer.serialize_str(&self.to_string())
} else {
let mut v: Vec<u8> = vec![];
v.extend_from_slice(&self.octets());
v.push(self.prefix_len());
v.serialize(serializer)
}
}
}
@@ -33,7 +40,14 @@ impl Serialize for Ipv6Net {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer
{
serializer.serialize_str(&self.to_string())
if serializer.is_human_readable() {
serializer.serialize_str(&self.to_string())
} else {
let mut v: Vec<u8> = vec![];
v.extend_from_slice(&self.octets());
v.push(self.prefix_len());
v.serialize(serializer)
}
}
}
@@ -71,4 +85,4 @@ mod tests {
let net: IpNet = net_str.parse().unwrap();
assert_tokens(&net.readable(), &[Token::Str(net_str)]);
}
}
}