1use crate::{Dummy, Fake, Faker};
2use rand::distr::{Distribution, Uniform};
3use rand::RngExt;
4use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddrV4, SocketAddrV6};
5
6impl Dummy<Faker> for Ipv4Addr {
7 fn dummy_with_rng<R: RngExt + ?Sized>(_: &Faker, rng: &mut R) -> Self {
8 let u = Uniform::new_inclusive(u8::MIN, u8::MAX).expect("u8::MIN <= u8::MAX");
9 Ipv4Addr::new(u.sample(rng), u.sample(rng), u.sample(rng), u.sample(rng))
10 }
11}
12
13impl Dummy<Faker> for Ipv6Addr {
14 fn dummy_with_rng<R: RngExt + ?Sized>(_: &Faker, rng: &mut R) -> Self {
15 let u = Uniform::new_inclusive(u16::MIN, u16::MAX).expect("u16::MIN <= u16::MAX");
16 Ipv6Addr::new(
17 u.sample(rng),
18 u.sample(rng),
19 u.sample(rng),
20 u.sample(rng),
21 u.sample(rng),
22 u.sample(rng),
23 u.sample(rng),
24 u.sample(rng),
25 )
26 }
27}
28
29impl Dummy<Faker> for IpAddr {
30 fn dummy_with_rng<R: RngExt + ?Sized>(_: &Faker, rng: &mut R) -> Self {
31 if Faker.fake_with_rng::<bool, _>(rng) {
32 IpAddr::V4(Faker.fake_with_rng::<Ipv4Addr, _>(rng))
33 } else {
34 IpAddr::V6(Faker.fake_with_rng::<Ipv6Addr, _>(rng))
35 }
36 }
37}
38
39impl Dummy<Faker> for SocketAddrV4 {
40 fn dummy_with_rng<R: RngExt + ?Sized>(_: &Faker, rng: &mut R) -> Self {
41 let ip: Ipv4Addr = Faker.fake_with_rng(rng);
42 let port: u16 = Faker.fake_with_rng(rng);
43 SocketAddrV4::new(ip, port)
44 }
45}
46
47impl Dummy<Faker> for SocketAddrV6 {
48 fn dummy_with_rng<R: RngExt + ?Sized>(_: &Faker, rng: &mut R) -> Self {
49 let ip: Ipv6Addr = Faker.fake_with_rng(rng);
50 let port: u16 = Faker.fake_with_rng(rng);
51 let flowinfo: u32 = Faker.fake_with_rng(rng);
52 let scope_id: u32 = Faker.fake_with_rng(rng);
53 SocketAddrV6::new(ip, port, flowinfo, scope_id)
54 }
55}