1use rand::Rng;
4use uuid::Uuid;
5
6pub struct Faker;
8
9impl Faker {
10 pub fn name() -> String {
12 let names = [
13 "Alice", "Bob", "Carol", "Dave", "Eve", "Frank", "Grace", "Hank", "Iris", "Jack",
14 "Karen", "Leo", "Mia", "Nora", "Oscar", "Pam",
15 ];
16 let idx = rand::thread_rng().gen_range(0..names.len());
17 names[idx].to_string()
18 }
19
20 pub fn last_name() -> String {
22 let names = [
23 "Smith", "Jones", "Williams", "Brown", "Taylor", "Anderson", "Wilson", "Moore",
24 "Jackson", "White", "Harris", "Martin",
25 ];
26 let idx = rand::thread_rng().gen_range(0..names.len());
27 names[idx].to_string()
28 }
29
30 pub fn full_name() -> String {
32 format!("{} {}", Self::name(), Self::last_name())
33 }
34
35 pub fn email() -> String {
37 format!(
38 "{}.{}@example.com",
39 Self::name().to_lowercase(),
40 Self::last_name().to_lowercase(),
41 )
42 }
43
44 pub fn uuid() -> String {
46 Uuid::new_v4().to_string()
47 }
48
49 pub fn integer(lo: i64, hi: i64) -> i64 {
51 rand::thread_rng().gen_range(lo..=hi)
52 }
53
54 pub fn boolean() -> bool {
56 rand::thread_rng().gen_bool(0.5)
57 }
58
59 pub fn word() -> String {
61 let words = [
62 "lorem",
63 "ipsum",
64 "dolor",
65 "sit",
66 "amet",
67 "consectetur",
68 "adipiscing",
69 "elit",
70 "sed",
71 "eiusmod",
72 "tempor",
73 "incididunt",
74 ];
75 let idx = rand::thread_rng().gen_range(0..words.len());
76 words[idx].to_string()
77 }
78
79 pub fn sentence(words: usize) -> String {
81 let mut s: Vec<String> = (0..words).map(|_| Self::word()).collect();
82 if let Some(first) = s.first_mut() {
83 let mut chars = first.chars();
84 *first = chars
85 .next()
86 .map(|c| c.to_uppercase().collect::<String>() + chars.as_str())
87 .unwrap_or_default();
88 }
89 s.join(" ") + "."
90 }
91
92 pub fn url() -> String {
94 format!("https://example.com/{}", Self::uuid())
95 }
96
97 pub fn phone() -> String {
99 let mut rng = rand::thread_rng();
100 format!(
101 "+1-{:03}-{:03}-{:04}",
102 rng.gen_range(200..=999),
103 rng.gen_range(200..=999),
104 rng.gen_range(1000..=9999),
105 )
106 }
107
108 pub fn password() -> String {
110 format!("pass-{}", &Uuid::new_v4().to_string()[..8])
111 }
112}