Skip to main content

ic_query/subnet_catalog/
error.rs

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