Skip to main content

fake/impls/std/
net.rs

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}