use crate::credit_card::CreditCardOutputFormat;
use uuid::Uuid;
pub fn generate_uuid() -> String {
Uuid::new_v4().to_string()
}
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\":\""));
}
}