faker_rust/default/
json.rs1use crate::config::FakerConfig;
4
5pub fn object() -> String {
7 let config = FakerConfig::current();
8 let keys = ["name", "email", "age", "city", "country", "company", "job"];
9
10 let num_fields = config.rand_range(2, 5) as usize;
11 let mut fields = Vec::new();
12
13 for i in 0..num_fields {
14 if i < keys.len() {
15 let key = keys[i];
16 let value = generate_value(&config);
17 fields.push(format!("\"{}\": {}", key, value));
18 }
19 }
20
21 format!("{{{}}}", fields.join(", "))
22}
23
24fn generate_value(config: &FakerConfig) -> String {
25 let type_choice = config.rand_range(0, 3);
26 match type_choice {
27 0 => {
28 let strings = ["test", "example", "sample", "data"];
30 format!("\"{}\"", strings[config.rand_range(0, strings.len() as u32) as usize])
31 }
32 1 => {
33 config.rand_range(1, 100).to_string()
35 }
36 _ => {
37 if config.rand_bool() { "true".to_string() } else { "false".to_string() }
39 }
40 }
41}
42
43pub fn array() -> String {
45 let config = FakerConfig::current();
46 let length = config.rand_range(1, 5) as usize;
47 let mut items = Vec::new();
48
49 for _ in 0..length {
50 items.push(generate_value(&config));
51 }
52
53 format!("[{}]", items.join(", "))
54}
55
56#[cfg(test)]
57mod tests {
58 use super::*;
59
60 #[test]
61 fn test_object() {
62 let json = object();
63 assert!(json.starts_with('{'));
64 assert!(json.ends_with('}'));
65 }
66
67 #[test]
68 fn test_array() {
69 let arr = array();
70 assert!(arr.starts_with('['));
71 assert!(arr.ends_with(']'));
72 }
73}