Skip to content

Commit

Permalink
remove std String/Vec usage in tests and serde implementations
Browse files Browse the repository at this point in the history
  • Loading branch information
stbuehler committed Sep 30, 2024
1 parent b45892d commit 59a65e9
Show file tree
Hide file tree
Showing 9 changed files with 345 additions and 161 deletions.
23 changes: 17 additions & 6 deletions src/cidr/direct.rs
Original file line number Diff line number Diff line change
Expand Up @@ -303,31 +303,42 @@ mod tests {

use crate::Ipv4Cidr;

fn check_list_iter<T: PartialEq + core::fmt::Debug>(
data: impl AsRef<[T]>,
iter: impl IntoIterator<Item = T>,
) {
let mut iter = iter.into_iter();
for elem in data.as_ref() {
assert_eq!(Some(elem), iter.next().as_ref());
}
assert_eq!(None, iter.next());
}

#[test]
fn v4_ref_into_iter() {
let cidr = Ipv4Cidr::new(Ipv4Addr::new(1, 2, 3, 0), 30).unwrap();
assert_eq!(
vec![
check_list_iter(
[
Ipv4Addr::new(1, 2, 3, 0),
Ipv4Addr::new(1, 2, 3, 1),
Ipv4Addr::new(1, 2, 3, 2),
Ipv4Addr::new(1, 2, 3, 3),
],
cidr.into_iter().addresses().collect::<Vec<_>>()
cidr.into_iter().addresses(),
);
}

#[test]
fn v4_owned_into_iter() {
let cidr = Ipv4Cidr::new(Ipv4Addr::new(1, 2, 3, 0), 30).unwrap();
assert_eq!(
vec![
check_list_iter(
[
Ipv4Addr::new(1, 2, 3, 0),
Ipv4Addr::new(1, 2, 3, 1),
Ipv4Addr::new(1, 2, 3, 2),
Ipv4Addr::new(1, 2, 3, 3),
],
cidr.into_iter().addresses().collect::<Vec<_>>()
cidr.into_iter().addresses(),
);
}
}
20 changes: 8 additions & 12 deletions src/cidr/serde/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ impl serde::Serialize for Ipv4Cidr {
S: serde::Serializer,
{
if serializer.is_human_readable() {
serializer.serialize_str(&format!("{}", self))
serializer.serialize_str(format_cidr_fixed!("{}", self))
} else {
serde_common::serialize_v4(
serializer,
Expand All @@ -36,8 +36,7 @@ impl<'de> serde::Deserialize<'de> for Ipv4Cidr {
D: serde::Deserializer<'de>,
{
if deserializer.is_human_readable() {
let s = String::deserialize(deserializer)?;
s.parse().map_err(serde::de::Error::custom)
serde_common::deserialize_parse(deserializer)
} else {
let (addr, network_length) =
serde_common::deserialize_v4(deserializer, NAME_IPV4_CIDR)?;
Expand All @@ -54,7 +53,7 @@ impl serde::Serialize for Ipv6Cidr {
S: serde::Serializer,
{
if serializer.is_human_readable() {
serializer.serialize_str(&format!("{}", self))
serializer.serialize_str(format_cidr_fixed!("{}", self))
} else {
serde_common::serialize_v6(
serializer,
Expand All @@ -71,8 +70,7 @@ impl<'de> serde::Deserialize<'de> for Ipv6Cidr {
D: serde::Deserializer<'de>,
{
if deserializer.is_human_readable() {
let s = String::deserialize(deserializer)?;
s.parse().map_err(serde::de::Error::custom)
serde_common::deserialize_parse(deserializer)
} else {
let (addr, network_length) =
serde_common::deserialize_v6(deserializer, NAME_IPV6_CIDR)?;
Expand All @@ -89,7 +87,7 @@ impl serde::Serialize for IpCidr {
S: serde::Serializer,
{
if serializer.is_human_readable() {
serializer.serialize_str(&format!("{}", self))
serializer.serialize_str(format_cidr_fixed!("{}", self))
} else {
let data = match self {
Self::V4(c) => (IpAddr::V4(c.address), c.network_length),
Expand All @@ -106,8 +104,7 @@ impl<'de> serde::Deserialize<'de> for IpCidr {
D: serde::Deserializer<'de>,
{
if deserializer.is_human_readable() {
let s = String::deserialize(deserializer)?;
s.parse().map_err(serde::de::Error::custom)
serde_common::deserialize_parse(deserializer)
} else {
let (addr, network_length) = serde_common::deserialize(deserializer, NAME_IP_CIDR)?;
Self::new(addr, network_length).map_err(serde::de::Error::custom)
Expand All @@ -123,7 +120,7 @@ impl serde::Serialize for AnyIpCidr {
S: serde::Serializer,
{
if serializer.is_human_readable() {
serializer.serialize_str(&format!("{}", self))
serializer.serialize_str(format_cidr_fixed!("{}", self))
} else {
let data = match self {
Self::Any => None,
Expand All @@ -141,8 +138,7 @@ impl<'de> serde::Deserialize<'de> for AnyIpCidr {
D: serde::Deserializer<'de>,
{
if deserializer.is_human_readable() {
let s = String::deserialize(deserializer)?;
s.parse().map_err(serde::de::Error::custom)
serde_common::deserialize_parse(deserializer)
} else {
match serde_common::deserialize_any(deserializer, NAME_ANY_IP_CIDR)? {
None => Ok(Self::Any),
Expand Down
112 changes: 80 additions & 32 deletions src/cidr/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -300,81 +300,81 @@ fn parse_v4_33bit_2() {
#[test]
fn test_v4_representations_32bit() {
assert_eq!(
format!("{}", "127.0.0.1".parse::<Ipv4Cidr>().unwrap()),
format_cidr_fixed!("{}", "127.0.0.1".parse::<Ipv4Cidr>().unwrap()),
"127.0.0.1"
);
assert_eq!(
format!("{:#}", "127.0.0.1".parse::<Ipv4Cidr>().unwrap()),
format_cidr_fixed!("{:#}", "127.0.0.1".parse::<Ipv4Cidr>().unwrap()),
"127.0.0.1/32"
);

assert_eq!(
format!("{}", "127.0.0.1".parse::<IpCidr>().unwrap()),
format_cidr_fixed!("{}", "127.0.0.1".parse::<IpCidr>().unwrap()),
"127.0.0.1"
);
assert_eq!(
format!("{:#}", "127.0.0.1".parse::<IpCidr>().unwrap()),
format_cidr_fixed!("{:#}", "127.0.0.1".parse::<IpCidr>().unwrap()),
"127.0.0.1/32"
);

assert_eq!(
format!("{:?}", "127.0.0.1".parse::<Ipv4Cidr>().unwrap()),
format_cidr_fixed!("{:?}", "127.0.0.1".parse::<Ipv4Cidr>().unwrap()),
"127.0.0.1/32"
);

assert_eq!(
format!("{:?}", "127.0.0.1".parse::<IpCidr>().unwrap()),
format_cidr_fixed!("{:?}", "127.0.0.1".parse::<IpCidr>().unwrap()),
"V4(127.0.0.1/32)"
);

assert_eq!(
format!("{:#}", "127.0.0.1".parse::<IpCidr>().unwrap()),
format_cidr_fixed!("{:#}", "127.0.0.1".parse::<IpCidr>().unwrap()),
"127.0.0.1/32"
);
}

#[test]
fn test_v4_representations_8bit() {
assert_eq!(
format!("{}", "10.0.0.0/8".parse::<Ipv4Cidr>().unwrap()),
format_cidr_fixed!("{}", "10.0.0.0/8".parse::<Ipv4Cidr>().unwrap()),
"10.0.0.0/8"
);

assert_eq!(
format!("{}", "10.0.0.0/8".parse::<IpCidr>().unwrap()),
format_cidr_fixed!("{}", "10.0.0.0/8".parse::<IpCidr>().unwrap()),
"10.0.0.0/8"
);

assert_eq!(
format!("{:?}", "10.0.0.0/8".parse::<Ipv4Cidr>().unwrap()),
format_cidr_fixed!("{:?}", "10.0.0.0/8".parse::<Ipv4Cidr>().unwrap()),
"10.0.0.0/8"
);

assert_eq!(
format!("{:?}", "10.0.0.0/8".parse::<IpCidr>().unwrap()),
format_cidr_fixed!("{:?}", "10.0.0.0/8".parse::<IpCidr>().unwrap()),
"V4(10.0.0.0/8)"
);
}

#[test]
fn test_v4_representations_0bit() {
assert_eq!(
format!("{}", "0.0.0.0/0".parse::<Ipv4Cidr>().unwrap()),
format_cidr_fixed!("{}", "0.0.0.0/0".parse::<Ipv4Cidr>().unwrap()),
"0.0.0.0/0"
);

assert_eq!(
format!("{}", "0.0.0.0/0".parse::<IpCidr>().unwrap()),
format_cidr_fixed!("{}", "0.0.0.0/0".parse::<IpCidr>().unwrap()),
"0.0.0.0/0"
);

assert_eq!(
format!("{:?}", "0.0.0.0/0".parse::<Ipv4Cidr>().unwrap()),
format_cidr_fixed!("{:?}", "0.0.0.0/0".parse::<Ipv4Cidr>().unwrap()),
"0.0.0.0/0"
);

assert_eq!(
format!("{:?}", "0.0.0.0/0".parse::<IpCidr>().unwrap()),
format_cidr_fixed!("{:?}", "0.0.0.0/0".parse::<IpCidr>().unwrap()),
"V4(0.0.0.0/0)"
);
}
Expand Down Expand Up @@ -529,58 +529,106 @@ fn parse_v6_33bit_2() {

#[test]
fn test_v6_representations_128bit() {
assert_eq!(format!("{}", "::".parse::<Ipv6Cidr>().unwrap()), "::");
assert_eq!(format!("{:#}", "::".parse::<Ipv6Cidr>().unwrap()), "::/128");

assert_eq!(format!("{}", "::".parse::<IpCidr>().unwrap()), "::");
assert_eq!(format!("{:#}", "::".parse::<IpCidr>().unwrap()), "::/128");

assert_eq!(format!("{:?}", "::".parse::<Ipv6Cidr>().unwrap()), "::/128");
assert_eq!(
format_cidr_fixed!("{}", "::".parse::<Ipv6Cidr>().unwrap()),
"::"
);
assert_eq!(
format_cidr_fixed!("{:#}", "::".parse::<Ipv6Cidr>().unwrap()),
"::/128"
);
assert_eq!(
format_cidr_fixed!("{:?}", "::".parse::<Ipv6Cidr>().unwrap()),
"::/128"
);

assert_eq!(
format!("{:?}", "::".parse::<IpCidr>().unwrap()),
format_cidr_fixed!("{}", "::".parse::<IpCidr>().unwrap()),
"::"
);
assert_eq!(
format_cidr_fixed!("{:#}", "::".parse::<IpCidr>().unwrap()),
"::/128"
);
assert_eq!(
format_cidr_fixed!("{:?}", "::".parse::<IpCidr>().unwrap()),
"V6(::/128)"
);

assert_eq!(format!("{:#}", "::".parse::<IpCidr>().unwrap()), "::/128");
assert_eq!(
format_cidr_fixed!(
"{}",
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"
.parse::<IpCidr>()
.unwrap()
),
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
);
assert_eq!(
format_cidr_fixed!(
"{:#}",
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"
.parse::<IpCidr>()
.unwrap()
),
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"
);
assert_eq!(
format_cidr_fixed!(
"{:?}",
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"
.parse::<IpCidr>()
.unwrap()
),
"V6(ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128)"
);
}

#[test]
fn test_v6_representations_64bit() {
assert_eq!(
format!("{}", "2001:DB8:1234:5678::/64".parse::<Ipv6Cidr>().unwrap()),
format_cidr_fixed!("{}", "2001:DB8:1234:5678::/64".parse::<Ipv6Cidr>().unwrap()),
"2001:db8:1234:5678::/64"
);

assert_eq!(
format!("{}", "2001:DB8:1234:5678::/64".parse::<IpCidr>().unwrap()),
format_cidr_fixed!("{}", "2001:DB8:1234:5678::/64".parse::<IpCidr>().unwrap()),
"2001:db8:1234:5678::/64"
);

assert_eq!(
format!(
format_cidr_fixed!(
"{:?}",
"2001:DB8:1234:5678::/64".parse::<Ipv6Cidr>().unwrap()
),
"2001:db8:1234:5678::/64"
);

assert_eq!(
format!("{:?}", "2001:DB8:1234:5678::/64".parse::<IpCidr>().unwrap()),
format_cidr_fixed!("{:?}", "2001:DB8:1234:5678::/64".parse::<IpCidr>().unwrap()),
"V6(2001:db8:1234:5678::/64)"
);
}

#[test]
fn test_v6_representations_0bit() {
assert_eq!(format!("{}", "::/0".parse::<Ipv6Cidr>().unwrap()), "::/0");
assert_eq!(
format_cidr_fixed!("{}", "::/0".parse::<Ipv6Cidr>().unwrap()),
"::/0"
);

assert_eq!(format!("{}", "::/0".parse::<IpCidr>().unwrap()), "::/0");
assert_eq!(
format_cidr_fixed!("{}", "::/0".parse::<IpCidr>().unwrap()),
"::/0"
);

assert_eq!(format!("{:?}", "::/0".parse::<Ipv6Cidr>().unwrap()), "::/0");
assert_eq!(
format_cidr_fixed!("{:?}", "::/0".parse::<Ipv6Cidr>().unwrap()),
"::/0"
);

assert_eq!(
format!("{:?}", "::/0".parse::<IpCidr>().unwrap()),
format_cidr_fixed!("{:?}", "::/0".parse::<IpCidr>().unwrap()),
"V6(::/0)"
);
}
Expand Down
Loading

0 comments on commit 59a65e9

Please sign in to comment.