Skip to main content

faker_rust/default/
json.rs

1//! JSON data generator
2
3use crate::config::FakerConfig;
4
5/// Generate a random JSON object as string
6pub 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            // String
29            let strings = ["test", "example", "sample", "data"];
30            format!("\"{}\"", strings[config.rand_range(0, strings.len() as u32) as usize])
31        }
32        1 => {
33            // Number
34            config.rand_range(1, 100).to_string()
35        }
36        _ => {
37            // Boolean
38            if config.rand_bool() { "true".to_string() } else { "false".to_string() }
39        }
40    }
41}
42
43/// Generate a random JSON array as string
44pub 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}