Skip to main content

sigstore_trust_root/
error.rs

1//! Error types for trusted root operations
2
3use thiserror::Error;
4
5/// Errors that can occur during trusted root operations
6#[derive(Debug, Error)]
7pub enum Error {
8    /// JSON parsing error
9    #[error("failed to parse JSON: {0}")]
10    Json(#[from] serde_json::Error),
11
12    /// Base64 decoding error
13    #[error("failed to decode base64: {0}")]
14    Base64(#[from] base64::DecodeError),
15
16    /// Certificate parsing error
17    #[error("failed to parse certificate: {0}")]
18    Certificate(String),
19
20    /// Invalid key format
21    #[error("invalid key format: {0}")]
22    InvalidKey(String),
23
24    /// Missing required field
25    #[error("missing required field: {0}")]
26    MissingField(String),
27
28    /// Unsupported media type
29    #[error("unsupported media type: {0}")]
30    UnsupportedMediaType(String),
31
32    /// No matching key found
33    #[error("no matching key found for ID: {0}")]
34    KeyNotFound(String),
35
36    /// No matching certificate found
37    #[error("no matching certificate found")]
38    CertificateNotFound,
39
40    /// Time parsing error
41    #[error("failed to parse time: {0}")]
42    TimeParse(String),
43
44    /// TUF error (only available with "tuf" feature)
45    #[error("TUF error: {0}")]
46    Tuf(String),
47}
48
49/// Result type for trusted root operations
50pub type Result<T> = std::result::Result<T, Error>;
51
52/// Convert from sigstore_types::Error to our Error type
53impl From<sigstore_types::Error> for Error {
54    fn from(err: sigstore_types::Error) -> Self {
55        match err {
56            sigstore_types::Error::Base64(e) => Error::Base64(e),
57            sigstore_types::Error::Json(e) => Error::Json(e),
58            sigstore_types::Error::InvalidEncoding(s) => Error::InvalidKey(s),
59            sigstore_types::Error::InvalidCertificate(s) => Error::Certificate(s),
60            sigstore_types::Error::MissingField(s) => Error::MissingField(s),
61            // For other variants, convert to string error
62            _ => Error::InvalidKey(err.to_string()),
63        }
64    }
65}