fkr/
lib.rs

1use fake::Fake;
2use strum::EnumIter;
3use strum::IntoEnumIterator;
4
5/// Available fake data types for generation.
6#[derive(Clone, Copy, Debug, strum::Display, EnumIter)]
7pub enum FkrOption {
8    /// Generates a version 4 UUID (random)
9    Uuidv4,
10    /// Generates a version 7 UUID (timestamp-based)
11    Uuidv7,
12    /// Generates a realistic email address
13    Email,
14    /// Generates a browser user agent string
15    UserAgent,
16    /// Generates an IPv4 address
17    IPv4,
18    /// Generates an IPv6 address
19    IPv6,
20    /// Generates a MAC address
21    MACAddress,
22}
23
24impl FkrOption {
25    /// Generates a fake string value based on the selected variant.
26    pub fn gen_string(&self) -> String {
27        match self {
28            Self::Uuidv4 => fake::uuid::UUIDv4.fake::<String>(),
29            Self::Uuidv7 => fake::uuid::UUIDv7.fake::<String>(),
30            Self::Email => fake::faker::internet::en::SafeEmail().fake::<String>(),
31            Self::UserAgent => fake::faker::internet::en::UserAgent().fake::<String>(),
32            Self::MACAddress => fake::faker::internet::en::MACAddress().fake::<String>(),
33            Self::IPv4 => fake::faker::internet::en::IPv4().fake::<String>(),
34            Self::IPv6 => fake::faker::internet::en::IPv6().fake::<String>(),
35        }
36    }
37
38    /// Returns a vector of all available [`FkrOption`] variants.
39    pub fn to_vec() -> Vec<Self> {
40        Self::iter().collect()
41    }
42}