Skip to main content

a3s_code_core/capability/
error.rs

1use thiserror::Error;
2
3use super::CapabilityKind;
4
5/// Validation failure that prevents an immutable capability set from being
6/// constructed.
7#[derive(Clone, Debug, Error, Eq, PartialEq)]
8pub enum CapabilitySetError {
9    #[error("Capability field '{field}' is not a canonical identifier: {reason}")]
10    InvalidIdentifier {
11        field: &'static str,
12        reason: &'static str,
13    },
14    #[error("Capability field '{field}' is not a canonical SHA-256 digest")]
15    InvalidDigest { field: &'static str },
16    #[error("Capability generation field '{field}' is invalid")]
17    InvalidGeneration { field: &'static str },
18    #[error("Capability field '{field}' exceeds its bound of {max}")]
19    BoundExceeded { field: &'static str, max: usize },
20    #[error("Capability source '{source_id}' submitted an empty contribution")]
21    EmptyContribution { source_id: String },
22    #[error(
23        "Capability '{capability}' belongs to source '{actual_source}', not contribution source '{expected_source}'"
24    )]
25    SourceMismatch {
26        capability: String,
27        expected_source: String,
28        actual_source: String,
29    },
30    #[error("Capability source '{source_id}' was contributed more than once")]
31    DuplicateSource { source_id: String },
32    #[error(
33        "A capability set mixes A3S Use cursor identities (generation {expected_generation} vs {actual_generation}, capability revision mismatch: {revision_mismatch}, Registry revision mismatch: {registry_revision_mismatch})"
34    )]
35    MixedUseGeneration {
36        expected_generation: u64,
37        actual_generation: u64,
38        revision_mismatch: bool,
39        registry_revision_mismatch: bool,
40    },
41    #[error("Capability '{capability}' was contributed more than once")]
42    DuplicateCapability { capability: String },
43    #[error("Capability '{capability}' repeats dependency '{dependency}'")]
44    DuplicateDependency {
45        capability: String,
46        dependency: String,
47    },
48    #[error("Capability '{capability}' depends on itself")]
49    SelfDependency { capability: String },
50    #[error("Capability '{capability}' depends on missing capability '{dependency}'")]
51    MissingDependency {
52        capability: String,
53        dependency: String,
54    },
55    #[error("External {kind} capability '{public_name}' cannot shadow a built-in")]
56    BuiltinShadow {
57        kind: CapabilityKind,
58        public_name: String,
59    },
60    #[error("Multiple {kind} capabilities publish the same name '{public_name}'")]
61    PublicNameConflict {
62        kind: CapabilityKind,
63        public_name: String,
64    },
65    #[error("The canonical capability set could not be encoded: {0}")]
66    CanonicalEncoding(String),
67}