Skip to content

Commit a9c8c66

Browse files
authored
Merge pull request #84 from rcvalle/master
Implement Arbitrary for Ipv4Addr and Ipv6Addr
2 parents d14dbe5 + 26ccbe2 commit a9c8c66

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

src/lib.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ use core::time::Duration;
4545
use std::borrow::{Cow, ToOwned};
4646
use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, LinkedList, VecDeque};
4747
use std::ffi::{CString, OsString};
48+
use std::net::{Ipv4Addr, Ipv6Addr};
4849
use std::path::PathBuf;
4950
use std::rc::Rc;
5051
use std::sync::atomic::{AtomicBool, AtomicIsize, AtomicUsize};
@@ -1074,6 +1075,28 @@ implement_nonzero_int! { NonZeroU64, u64 }
10741075
implement_nonzero_int! { NonZeroU128, u128 }
10751076
implement_nonzero_int! { NonZeroUsize, usize }
10761077

1078+
impl<'a> Arbitrary<'a> for Ipv4Addr {
1079+
fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
1080+
Ok(Ipv4Addr::from(u32::arbitrary(u)?))
1081+
}
1082+
1083+
#[inline]
1084+
fn size_hint(_depth: usize) -> (usize, Option<usize>) {
1085+
(4, Some(4))
1086+
}
1087+
}
1088+
1089+
impl<'a> Arbitrary<'a> for Ipv6Addr {
1090+
fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
1091+
Ok(Ipv6Addr::from(u128::arbitrary(u)?))
1092+
}
1093+
1094+
#[inline]
1095+
fn size_hint(_depth: usize) -> (usize, Option<usize>) {
1096+
(16, Some(16))
1097+
}
1098+
}
1099+
10771100
#[cfg(test)]
10781101
mod test {
10791102
use super::*;

0 commit comments

Comments
 (0)