Skip to main content

faker_rust/default/
commerce.rs

1//! Commerce generator - generates random commerce-related data
2
3use crate::base::sample;
4use crate::locale::fetch_locale;
5
6/// Generate a random department name
7pub fn department() -> String {
8    fetch_locale("commerce.department", "en")
9        .map(|v| sample(&v))
10        .unwrap_or_else(|| "Electronics".to_string())
11}
12
13/// Generate a random product name
14pub fn product_name() -> String {
15    let config = crate::config::FakerConfig::current();
16    let choice = config.rand_usize(3);
17
18    let material = sample(&[
19        "Small".to_string(),
20        "Medium".to_string(),
21        "Large".to_string(),
22        "Extra Large".to_string(),
23        "Slim".to_string(),
24        "Compact".to_string(),
25    ]);
26    let product = fetch_locale("commerce.product_name.product", "en")
27        .map(|v| sample(&v))
28        .unwrap_or_else(|| "Table".to_string());
29    let dept = department();
30
31    match choice {
32        0 => format!("{} {}", material, product),
33        1 => format!("{} {}", dept, product),
34        _ => format!("{}, {} and {}", material, product, dept),
35    }
36}
37
38/// Generate a random brand name
39pub fn brand() -> String {
40    fetch_locale("commerce.brand", "en")
41        .map(|v| sample(&v))
42        .unwrap_or_else(|| "Nike".to_string())
43}
44
45/// Generate a random color
46pub fn color() -> String {
47    sample(&[
48        "Red".to_string(),
49        "Blue".to_string(),
50        "Green".to_string(),
51        "Yellow".to_string(),
52        "Orange".to_string(),
53        "Purple".to_string(),
54        "Pink".to_string(),
55        "Brown".to_string(),
56        "Black".to_string(),
57        "White".to_string(),
58    ])
59}
60
61/// Generate a random material
62pub fn material() -> String {
63    fetch_locale("commerce.material", "en")
64        .map(|v| sample(&v))
65        .unwrap_or_else(|| "Plastic".to_string())
66}
67
68/// Generate a random price
69pub fn price(range_start: Option<f64>, range_end: Option<f64>) -> String {
70    let config = crate::config::FakerConfig::current();
71    let start = range_start.unwrap_or(0.0) * 100.0;
72    let end = range_end.unwrap_or(100.0) * 100.0;
73    let price = config.rand_f64() * (end - start) + start;
74    format!("{:.2}", price / 100.0)
75}
76
77/// Generate a random promotion code
78pub fn promotion_code() -> String {
79    let config = crate::config::FakerConfig::current();
80    let prefix: String = (0..2)
81        .map(|_| config.rand_char(&crate::base::U_LETTERS))
82        .collect();
83    let suffix: String = (0..4)
84        .map(|_| config.rand_char(&crate::base::DIGITS))
85        .collect();
86    format!("{}{}", prefix, suffix)
87}
88
89/// Generate a random vendor name
90pub fn vendor() -> String {
91    fetch_locale("commerce.vendor", "en")
92        .map(|v| sample(&v))
93        .unwrap_or_else(|| "Acme Corp".to_string())
94}