Skip to main content

ic_query/subnet_catalog/
error.rs

1use thiserror::Error as ThisError;
2
3///
4/// CatalogError
5///
6#[derive(Debug, ThisError)]
7pub enum CatalogError {
8    #[error(transparent)]
9    Json(#[from] serde_json::Error),
10
11    #[error("unsupported subnet catalog schema version {found}; supported version is {supported}")]
12    UnsupportedSchemaVersion { found: u32, supported: u32 },
13
14    #[error("subnet catalog must contain at least one subnet")]
15    EmptySubnets,
16
17    #[error("subnet catalog must contain at least one routing range")]
18    EmptyRoutingRanges,
19
20    #[error("invalid principal in {field}: {value}: {reason}")]
21    InvalidPrincipal {
22        field: &'static str,
23        value: String,
24        reason: String,
25    },
26
27    #[error("duplicate subnet principal in catalog: {subnet_principal}")]
28    DuplicateSubnet { subnet_principal: String },
29
30    #[error("routing range references unknown subnet: {subnet_principal}")]
31    UnknownRoutingSubnet { subnet_principal: String },
32
33    #[error(
34        "invalid routing range for {subnet_principal}: start {start_canister_id} sorts after end {end_canister_id}"
35    )]
36    InvalidRoutingRange {
37        subnet_principal: String,
38        start_canister_id: String,
39        end_canister_id: String,
40    },
41
42    #[error("subnet principal {subnet_principal} was not found in the cached catalog")]
43    UnknownSubnet { subnet_principal: String },
44
45    #[error("principal prefix {prefix:?} did not match cached subnet principals")]
46    PrincipalPrefixNotFound { prefix: String },
47
48    #[error("principal prefix {prefix:?} is ambiguous; matches: {matches:?}")]
49    AmbiguousPrincipalPrefix {
50        prefix: String,
51        matches: Vec<String>,
52    },
53
54    #[error(
55        "canister principal {canister_principal} was not covered by cached routing ranges at registry_version={registry_version}, catalog_schema_version={catalog_schema_version}"
56    )]
57    RouteNotFound {
58        canister_principal: String,
59        registry_version: u64,
60        catalog_schema_version: u32,
61    },
62}