Skip to main content

ic_query/subnet_catalog/model/classification/
specialization.rs

1//! Module: subnet_catalog::model::classification::specialization
2//!
3//! Defines stable subnet specialization labels used by catalog data.
4
5use serde::{Deserialize, Serialize};
6use std::str::FromStr;
7
8///
9/// SubnetSpecialization
10///
11/// Subnet specialization classification used by catalog records and reports.
12///
13
14#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
15#[serde(rename_all = "snake_case")]
16pub enum SubnetSpecialization {
17    /// No special subnet role is known.
18    None,
19    /// Fiduciary subnet.
20    Fiduciary,
21    /// European subnet.
22    European,
23    /// Unknown or unclassified specialization.
24    Unknown,
25}
26
27impl SubnetSpecialization {
28    /// Returns the stable snake_case value used in CLI filters and text output.
29    #[must_use]
30    pub const fn as_str(self) -> &'static str {
31        match self {
32            Self::None => "none",
33            Self::Fiduciary => "fiduciary",
34            Self::European => "european",
35            Self::Unknown => "unknown",
36        }
37    }
38}
39
40impl FromStr for SubnetSpecialization {
41    type Err = String;
42
43    fn from_str(value: &str) -> Result<Self, Self::Err> {
44        match value {
45            "none" => Ok(Self::None),
46            "fiduciary" => Ok(Self::Fiduciary),
47            "european" => Ok(Self::European),
48            "unknown" => Ok(Self::Unknown),
49            other => Err(format!(
50                "invalid value {other}; use none, fiduciary, european, or unknown"
51            )),
52        }
53    }
54}