use darling::FromMeta;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum UuidVersion {
#[default]
V7,
V4
}
impl FromMeta for UuidVersion {
fn from_string(value: &str) -> darling::Result<Self> {
match value.to_lowercase().as_str() {
"v7" | "7" => Ok(UuidVersion::V7),
"v4" | "4" => Ok(UuidVersion::V4),
_ => Err(darling::Error::unknown_value(value))
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_is_v7() {
assert_eq!(UuidVersion::default(), UuidVersion::V7);
}
#[test]
fn from_meta_v7() {
assert_eq!(UuidVersion::from_string("v7").unwrap(), UuidVersion::V7);
assert_eq!(UuidVersion::from_string("7").unwrap(), UuidVersion::V7);
assert_eq!(UuidVersion::from_string("V7").unwrap(), UuidVersion::V7);
}
#[test]
fn from_meta_v4() {
assert_eq!(UuidVersion::from_string("v4").unwrap(), UuidVersion::V4);
assert_eq!(UuidVersion::from_string("4").unwrap(), UuidVersion::V4);
assert_eq!(UuidVersion::from_string("V4").unwrap(), UuidVersion::V4);
}
#[test]
fn from_meta_invalid() {
assert!(UuidVersion::from_string("v1").is_err());
assert!(UuidVersion::from_string("v5").is_err());
assert!(UuidVersion::from_string("uuid7").is_err());
}
}