use clap::ValueEnum;
#[cfg(feature = "json")]
use serde::Serialize;
#[cfg_attr(feature = "json", derive(Serialize))]
#[cfg_attr(feature = "json", serde(rename_all = "lowercase"))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
pub enum UuidFormat {
Standard,
Simple,
Braced,
#[value(name = "urn")]
URN,
Hex,
}
impl UuidFormat {
pub const fn default() -> Self {
Self::Standard
}
pub const fn as_str(&self) -> &'static str {
match self {
Self::Standard => "standard",
Self::Simple => "simple",
Self::Braced => "braced",
Self::URN => "urn",
Self::Hex => "hex",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_format() {
assert_eq!(UuidFormat::default(), UuidFormat::Standard);
}
#[test]
fn test_format_variants() {
let variants = [
UuidFormat::Standard,
UuidFormat::Simple,
UuidFormat::Braced,
UuidFormat::URN,
UuidFormat::Hex,
];
for (i, v1) in variants.iter().enumerate() {
for (j, v2) in variants.iter().enumerate() {
if i == j {
assert_eq!(v1, v2);
} else {
assert_ne!(v1, v2);
}
}
}
}
#[test]
fn test_as_str() {
assert_eq!(UuidFormat::Standard.as_str(), "standard");
assert_eq!(UuidFormat::Simple.as_str(), "simple");
assert_eq!(UuidFormat::Braced.as_str(), "braced");
assert_eq!(UuidFormat::URN.as_str(), "urn");
assert_eq!(UuidFormat::Hex.as_str(), "hex");
}
#[test]
#[cfg(feature = "json")]
fn test_json_serialization() {
assert_eq!(
serde_json::to_string(&UuidFormat::Standard).unwrap(),
"\"standard\""
);
assert_eq!(
serde_json::to_string(&UuidFormat::Simple).unwrap(),
"\"simple\""
);
assert_eq!(
serde_json::to_string(&UuidFormat::Braced).unwrap(),
"\"braced\""
);
assert_eq!(serde_json::to_string(&UuidFormat::URN).unwrap(), "\"urn\"");
assert_eq!(serde_json::to_string(&UuidFormat::Hex).unwrap(), "\"hex\"");
}
}