Skip to main content

ic_query/subnet_catalog/model/classification/
specialization.rs

1use serde::{Deserialize, Serialize};
2use std::str::FromStr;
3
4///
5/// SubnetSpecialization
6///
7#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
8#[serde(rename_all = "snake_case")]
9pub enum SubnetSpecialization {
10    None,
11    Fiduciary,
12    European,
13    Unknown,
14}
15
16impl SubnetSpecialization {
17    #[must_use]
18    pub const fn as_str(self) -> &'static str {
19        match self {
20            Self::None => "none",
21            Self::Fiduciary => "fiduciary",
22            Self::European => "european",
23            Self::Unknown => "unknown",
24        }
25    }
26}
27
28impl FromStr for SubnetSpecialization {
29    type Err = String;
30
31    fn from_str(value: &str) -> Result<Self, Self::Err> {
32        match value {
33            "none" => Ok(Self::None),
34            "fiduciary" => Ok(Self::Fiduciary),
35            "european" => Ok(Self::European),
36            "unknown" => Ok(Self::Unknown),
37            other => Err(format!(
38                "invalid value {other}; use none, fiduciary, european, or unknown"
39            )),
40        }
41    }
42}