From a164e1bbf847b321b51a134107207debd4028c2f Mon Sep 17 00:00:00 2001 From: Ramon de C Valle Date: Wed, 19 May 2021 20:40:04 -0700 Subject: [PATCH 1/3] Implement Arbitrary for Ipv4Addr and Ipv6Addr This commit implements the Arbitrary trait for the std::net::{Ipv4Addr, Ipv6Addr} types. --- src/lib.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 367d4bf..c909966 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -45,6 +45,7 @@ use core::time::Duration; use std::borrow::{Cow, ToOwned}; use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, LinkedList, VecDeque}; use std::ffi::{CString, OsString}; +use std::net::{Ipv4Addr, Ipv6Addr}; use std::path::PathBuf; use std::rc::Rc; use std::sync::atomic::{AtomicBool, AtomicIsize, AtomicUsize}; @@ -1074,6 +1075,28 @@ implement_nonzero_int! { NonZeroU64, u64 } implement_nonzero_int! { NonZeroU128, u128 } implement_nonzero_int! { NonZeroUsize, usize } +impl<'a> Arbitrary<'a> for Ipv4Addr { + fn arbitrary(u: &mut Unstructured<'a>) -> Result { + Ok(Ipv4Addr::from(u32::arbitrary(u).unwrap())) + } + + #[inline] + fn size_hint(_depth: usize) -> (usize, Option) { + (4, Some(4)) + } +} + +impl<'a> Arbitrary<'a> for Ipv6Addr { + fn arbitrary(u: &mut Unstructured<'a>) -> Result { + Ok(Ipv6Addr::from(u128::arbitrary(u).unwrap())) + } + + #[inline] + fn size_hint(_depth: usize) -> (usize, Option) { + (16, Some(16)) + } +} + #[cfg(test)] mod test { use super::*; From e5ea96afe563f5453f6882970b30ac8d0ee6f87a Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Thu, 20 May 2021 07:17:10 -0700 Subject: [PATCH 2/3] Update src/lib.rs --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index c909966..39c721d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1077,7 +1077,7 @@ implement_nonzero_int! { NonZeroUsize, usize } impl<'a> Arbitrary<'a> for Ipv4Addr { fn arbitrary(u: &mut Unstructured<'a>) -> Result { - Ok(Ipv4Addr::from(u32::arbitrary(u).unwrap())) + Ok(Ipv4Addr::from(u32::arbitrary(u)?)) } #[inline] From 26ccbe26bfbeb6c39f3136d7eaecfaa53496eefa Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Thu, 20 May 2021 07:17:17 -0700 Subject: [PATCH 3/3] Update src/lib.rs --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 39c721d..fef2620 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1088,7 +1088,7 @@ impl<'a> Arbitrary<'a> for Ipv4Addr { impl<'a> Arbitrary<'a> for Ipv6Addr { fn arbitrary(u: &mut Unstructured<'a>) -> Result { - Ok(Ipv6Addr::from(u128::arbitrary(u).unwrap())) + Ok(Ipv6Addr::from(u128::arbitrary(u)?)) } #[inline]