1use dcbor::prelude::CBORError;
2use thiserror::Error;
3
4#[derive(Debug, Error)]
5pub enum Error {
6 #[error("duplicate item: {item}")]
7 Duplicate { item: String },
8
9 #[error("item not found: {item}")]
10 NotFound { item: String },
11
12 #[error("item is still referenced: {item}")]
13 StillReferenced { item: String },
14
15 #[error("invalid or empty value: {field}")]
16 EmptyValue { field: String },
17
18 #[error("unknown privilege")]
19 UnknownPrivilege,
20
21 #[error("invalid XID")]
22 InvalidXid,
23
24 #[error("missing inception key")]
25 MissingInceptionKey,
26
27 #[error("invalid resolution method")]
28 InvalidResolutionMethod,
29
30 #[error("multiple provenance marks")]
31 MultipleProvenanceMarks,
32
33 #[error("unexpected predicate: {predicate}")]
34 UnexpectedPredicate { predicate: String },
35
36 #[error("unexpected nested assertions")]
37 UnexpectedNestedAssertions,
38
39 #[error("no permissions in service '{uri}'")]
40 NoPermissions { uri: String },
41
42 #[error("no key or delegate references in service '{uri}'")]
43 NoReferences { uri: String },
44
45 #[error("unknown key reference {reference} in service '{uri}'")]
46 UnknownKeyReference { reference: String, uri: String },
47
48 #[error("unknown delegate reference {reference} in service '{uri}'")]
49 UnknownDelegateReference { reference: String, uri: String },
50
51 #[error("key not found in XID document: {key}")]
52 KeyNotFoundInDocument { key: String },
53
54 #[error("delegate not found in XID document: {delegate}")]
55 DelegateNotFoundInDocument { delegate: String },
56
57 #[error("invalid password")]
58 InvalidPassword,
59
60 #[error("envelope is not signed")]
61 EnvelopeNotSigned,
62
63 #[error("signature verification failed")]
64 SignatureVerificationFailed,
65
66 #[error("no provenance mark to advance")]
67 NoProvenanceMark,
68
69 #[error(
70 "document already has generator, cannot provide external generator"
71 )]
72 GeneratorConflict,
73
74 #[error(
75 "document does not have generator, must provide external generator"
76 )]
77 NoGenerator,
78
79 #[error("generator chain ID mismatch: expected {}, got {}", hex::encode(.expected), hex::encode(.actual))]
80 ChainIdMismatch { expected: Vec<u8>, actual: Vec<u8> },
81
82 #[error("generator sequence mismatch: expected {expected}, got {actual}")]
83 SequenceMismatch { expected: u32, actual: u32 },
84
85 #[error("envelope parsing error")]
86 EnvelopeParsing(#[from] bc_envelope::Error),
87
88 #[error("component error")]
89 Component(#[from] bc_components::Error),
90
91 #[error("CBOR error")]
92 Cbor(#[from] CBORError),
93
94 #[error("provenance mark error")]
95 ProvenanceMark(#[from] provenance_mark::Error),
96}
97
98pub type Result<T> = std::result::Result<T, Error>;