ic_query/subnet_catalog/resolver/
model.rs1use crate::subnet_catalog::{RoutingRange, SubnetInfo};
2use serde::{Deserialize, Serialize};
3use std::str::FromStr;
4
5#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
9#[serde(rename_all = "snake_case")]
10pub enum ResolveAs {
11 Subnet,
12 Canister,
13}
14
15impl ResolveAs {
16 #[must_use]
17 pub const fn as_str(self) -> &'static str {
18 match self {
19 Self::Subnet => "subnet",
20 Self::Canister => "canister",
21 }
22 }
23}
24
25impl FromStr for ResolveAs {
26 type Err = String;
27
28 fn from_str(value: &str) -> Result<Self, Self::Err> {
29 match value {
30 "subnet" => Ok(Self::Subnet),
31 "canister" => Ok(Self::Canister),
32 other => Err(format!("invalid value {other}; use subnet or canister")),
33 }
34 }
35}
36
37#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
41#[serde(rename_all = "snake_case")]
42pub enum ResolvedSubnetSubject {
43 Subnet,
44 Canister,
45}
46
47impl ResolvedSubnetSubject {
48 #[must_use]
49 pub const fn as_str(self) -> &'static str {
50 match self {
51 Self::Subnet => "subnet",
52 Self::Canister => "canister",
53 }
54 }
55}
56
57#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
61pub struct ResolvedSubnet {
62 pub input_principal: String,
63 pub resolved_as: ResolvedSubnetSubject,
64 pub resolved_from: String,
65 pub subnet: SubnetInfo,
66 pub matched_canister_principal: Option<String>,
67 pub matched_routing_range: Option<RoutingRange>,
68}