1use thiserror::Error;
4
5#[derive(Debug, Error)]
7pub enum Error {
8 #[error("invalid base64: {0}")]
10 Base64(#[from] base64ct::Error),
11
12 #[error("JSON error: {0}")]
14 Json(#[from] serde_json::Error),
15
16 #[error("signature verification failed")]
18 SignatureVerification,
19
20 #[error("invalid signature: {0}")]
22 InvalidSignature(String),
23
24 #[error("invalid key: {0}")]
26 InvalidKey(String),
27
28 #[error("thumbprint mismatch: expected {expected}, got {actual}")]
30 ThumbprintMismatch {
31 expected: String,
33 actual: String,
35 },
36
37 #[error("algorithm mismatch: key uses {key_alg}, payload specifies {pay_alg}")]
39 AlgorithmMismatch {
40 key_alg: &'static str,
42 pay_alg: String,
44 },
45
46 #[error("revoke payload size {size} exceeds maximum {max}")]
48 RevokeTooLarge {
49 size: usize,
51 max: usize,
53 },
54
55 #[error("invalid timestamp: {0}")]
57 InvalidTimestamp(String),
58
59 #[error("missing required field: {0}")]
61 MissingField(&'static str),
62
63 #[error("canonicalization error: {0}")]
65 Canonicalization(String),
66}
67
68pub type Result<T> = std::result::Result<T, Error>;