hubworld 0.3.1

A Rust library for generating random data: UUIDs, names, passwords, and credit cards
Documentation
use crate::credit_card::CreditCardOutputFormat;
use uuid::Uuid;

/// Generates a random UUID v4
pub fn generate_uuid() -> String {
    Uuid::new_v4().to_string()
}

/// Generates UUID output in the selected format.
pub fn generate_uuid_formatted(format: CreditCardOutputFormat) -> String {
    let value = generate_uuid();
    match format {
        CreditCardOutputFormat::Plain => value,
        CreditCardOutputFormat::Json => format!("{{\"uuid\":\"{}\"}}", value),
        CreditCardOutputFormat::JsonLd => format!(
            "{{\"@context\":\"https://schema.org\",\"@type\":\"PropertyValue\",\"name\":\"uuid\",\"value\":\"{}\"}}",
            value
        ),
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_generate_uuid() {
        let uuid1 = generate_uuid();
        let uuid2 = generate_uuid();

        assert_ne!(uuid1, uuid2);

        assert!(uuid::Uuid::parse_str(&uuid1).is_ok());
        assert!(uuid::Uuid::parse_str(&uuid2).is_ok());

        assert_eq!(uuid1.len(), 36);
        assert_eq!(uuid2.len(), 36);
    }

    #[test]
    fn test_generate_uuid_formatted_json() {
        let output = generate_uuid_formatted(CreditCardOutputFormat::Json);
        assert!(output.contains("\"uuid\":\""));
    }

    #[test]
    fn test_generate_uuid_formatted_jsonld() {
        let output = generate_uuid_formatted(CreditCardOutputFormat::JsonLd);
        assert!(output.contains("\"@context\":\"https://schema.org\""));
        assert!(output.contains("\"name\":\"uuid\""));
        assert!(output.contains("\"value\":\""));
    }
}