#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum SurrealSdkVersion {
#[default]
V2,
V3,
}
impl std::fmt::Display for SurrealSdkVersion {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::V2 => write!(f, "v2"),
Self::V3 => write!(f, "v3"),
}
}
}
impl std::str::FromStr for SurrealSdkVersion {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.to_lowercase().as_str() {
"v2" | "2" => Ok(Self::V2),
"v3" | "3" => Ok(Self::V3),
_ => Err(anyhow::anyhow!(
"Invalid SDK version: '{s}'. Expected 'v2' or 'v3'"
)),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_is_v2() {
assert_eq!(SurrealSdkVersion::default(), SurrealSdkVersion::V2);
}
#[test]
fn test_display() {
assert_eq!(SurrealSdkVersion::V2.to_string(), "v2");
assert_eq!(SurrealSdkVersion::V3.to_string(), "v3");
}
#[test]
fn test_from_str() {
assert_eq!(
"v2".parse::<SurrealSdkVersion>().unwrap(),
SurrealSdkVersion::V2
);
assert_eq!(
"V2".parse::<SurrealSdkVersion>().unwrap(),
SurrealSdkVersion::V2
);
assert_eq!(
"2".parse::<SurrealSdkVersion>().unwrap(),
SurrealSdkVersion::V2
);
assert_eq!(
"v3".parse::<SurrealSdkVersion>().unwrap(),
SurrealSdkVersion::V3
);
assert_eq!(
"V3".parse::<SurrealSdkVersion>().unwrap(),
SurrealSdkVersion::V3
);
assert_eq!(
"3".parse::<SurrealSdkVersion>().unwrap(),
SurrealSdkVersion::V3
);
}
#[test]
fn test_from_str_invalid() {
assert!("v4".parse::<SurrealSdkVersion>().is_err());
assert!("invalid".parse::<SurrealSdkVersion>().is_err());
}
}