use crate::faker::internet::raw::*; use crate::faker::lorem::raw::Word; use crate::faker::name::raw::FirstName; use crate::locales::{Data, EN}; use crate::{Dummy, Fake, Faker}; use rand::distributions::{Distribution, Uniform}; use rand::seq::SliceRandom; use rand::Rng; use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; impl Dummy> for String { fn dummy_with_rng(_: &FreeEmailProvider, rng: &mut R) -> Self { let s = *L::INTERNET_FREE_EMAIL_PROVIDER.choose(rng).unwrap(); s.into() } } impl Dummy> for &str { fn dummy_with_rng(_: &FreeEmailProvider, rng: &mut R) -> Self { *L::INTERNET_FREE_EMAIL_PROVIDER.choose(rng).unwrap() } } impl Dummy> for String { fn dummy_with_rng(_: &DomainSuffix, rng: &mut R) -> Self { let s = *L::INTERNET_DOMAIN_SUFFIX.choose(rng).unwrap(); s.into() } } impl Dummy> for &str { fn dummy_with_rng(_: &DomainSuffix, rng: &mut R) -> Self { *L::INTERNET_DOMAIN_SUFFIX.choose(rng).unwrap() } } impl Dummy> for String { fn dummy_with_rng(c: &FreeEmail, rng: &mut R) -> Self { let username: String = Username(c.0).fake_with_rng(rng); let provider: String = FreeEmailProvider(c.0).fake_with_rng(rng); format!("{}@{}", username, provider) } } impl Dummy> for String { fn dummy_with_rng(_: &SafeEmail, rng: &mut R) -> Self { let username: String = FirstName(EN).fake_with_rng::<&str, _>(rng).to_lowercase(); let domain = ["com", "net", "org"].choose(rng).unwrap(); format!("{}@example.{}", username, domain) } } impl Dummy> for String { fn dummy_with_rng(_: &Username, rng: &mut R) -> Self { match Faker.fake_with_rng::(rng) { 0 => FirstName(EN).fake_with_rng::<&str, _>(rng).to_lowercase(), 1 | 2 => format!( "{}.{}", Word(EN).fake_with_rng::<&str, _>(rng), FirstName(EN).fake_with_rng::<&str, _>(rng).to_lowercase() ), 3 | 4 => format!( "{}{}", FirstName(EN).fake_with_rng::<&str, _>(rng).to_lowercase(), Faker.fake_with_rng::(rng) ), _ => format!( "{}_{}", FirstName(EN).fake_with_rng::<&str, _>(rng).to_lowercase(), Word(EN).fake_with_rng::<&str, _>(rng), ), } } } impl Dummy> for String { fn dummy_with_rng(c: &Password, rng: &mut R) -> Self { let len: usize = c.1.fake_with_rng(rng); let s: Option = (0..len) .map(|_| Some(*L::INTERNET_PASSWORD_CHARS.choose(rng)?)) .collect(); s.unwrap_or_default() } } impl Dummy> for String { fn dummy_with_rng(_: &IPv4, rng: &mut R) -> Self { let u = Uniform::new_inclusive(u8::min_value(), u8::max_value()); format!( "{}.{}.{}.{}", u.sample(rng), u.sample(rng), u.sample(rng), u.sample(rng), ) } } impl Dummy> for Ipv4Addr { #[inline] fn dummy_with_rng(_: &IPv4, rng: &mut R) -> Self { Faker.fake_with_rng::(rng) } } impl Dummy> for String { fn dummy_with_rng(_: &IPv6, rng: &mut R) -> Self { let u = Uniform::new_inclusive(u16::min_value(), u16::max_value()); format!( "{:X}:{:X}:{:X}:{:X}:{:X}:{:X}:{:X}:{:X}", u.sample(rng), u.sample(rng), u.sample(rng), u.sample(rng), u.sample(rng), u.sample(rng), u.sample(rng), u.sample(rng), ) } } impl Dummy> for Ipv6Addr { #[inline] fn dummy_with_rng(_: &IPv6, rng: &mut R) -> Self { Faker.fake_with_rng::(rng) } } impl Dummy> for IpAddr { #[inline] fn dummy_with_rng(_: &IP, rng: &mut R) -> Self { Faker.fake_with_rng::(rng) } } impl Dummy> for String { fn dummy_with_rng(_: &MACAddress, rng: &mut R) -> Self { let u = Uniform::new_inclusive(u8::min_value(), u8::max_value()); format!( "{:02X}:{:02X}:{:02X}:{:02X}:{:02X}:{:02X}", u.sample(rng), u.sample(rng), u.sample(rng), u.sample(rng), u.sample(rng), u.sample(rng), ) } } impl Dummy> for String { fn dummy_with_rng(_: &Color, rng: &mut R) -> Self { let u = Uniform::new_inclusive(u8::min_value(), u8::max_value()); format!( "#{:02X}{:02X}{:02X}", u.sample(rng), u.sample(rng), u.sample(rng), ) } } impl Dummy> for String { fn dummy_with_rng(_: &UserAgent, rng: &mut R) -> Self { let s = *L::INTERNET_USER_AGENT.choose(rng).unwrap(); s.into() } } impl Dummy> for &str { fn dummy_with_rng(_: &UserAgent, rng: &mut R) -> Self { *L::INTERNET_USER_AGENT.choose(rng).unwrap() } }