use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(from = "String", into = "String")]
#[non_exhaustive]
pub enum RegistryStatus {
Registered,
SuspendedByAuthority,
Deactivated,
Unrecognised(String),
}
impl RegistryStatus {
#[must_use]
pub fn wire_str(&self) -> &str {
match self {
Self::Registered => "REGISTERED",
Self::SuspendedByAuthority => "SUSPENDED_BY_AUTHORITY",
Self::Deactivated => "DEACTIVATED",
Self::Unrecognised(value) => value,
}
}
}
impl From<String> for RegistryStatus {
fn from(value: String) -> Self {
match value.as_str() {
"REGISTERED" => Self::Registered,
"SUSPENDED_BY_AUTHORITY" => Self::SuspendedByAuthority,
"DEACTIVATED" => Self::Deactivated,
_ => Self::Unrecognised(value),
}
}
}
impl From<RegistryStatus> for String {
fn from(status: RegistryStatus) -> Self {
match status {
RegistryStatus::Unrecognised(value) => value,
known => known.wire_str().to_owned(),
}
}
}