use crate::error::{Error, Result};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ServerTag {
PermanentOffline,
TemporaryOffline,
}
impl ServerTag {
pub fn to_i32(self) -> i32 {
match self {
Self::PermanentOffline => 0,
Self::TemporaryOffline => 1,
}
}
pub fn try_from_i32(value: i32) -> Result<Self> {
match value {
0 => Ok(Self::PermanentOffline),
1 => Ok(Self::TemporaryOffline),
_ => Err(Error::IllegalArgument {
message: format!("Unsupported ServerTag: {value}"),
}),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_server_tag_roundtrip() {
for tag in [ServerTag::PermanentOffline, ServerTag::TemporaryOffline] {
assert_eq!(ServerTag::try_from_i32(tag.to_i32()).unwrap(), tag);
}
}
#[test]
fn test_server_tag_unknown() {
assert!(ServerTag::try_from_i32(99).is_err());
}
}