use thiserror::Error;
#[derive(Debug, Error)]
pub enum Error {
#[error("invalid seed length: expected 32 bytes, got {actual} bytes")]
InvalidSeedLength { actual: usize },
#[error("duplicate key: {0}")]
DuplicateKey(String),
#[error("missing key: {0}")]
MissingKey(String),
#[error("invalid key: {0}")]
InvalidKey(String),
#[error("wrong number of keys: expected {0}, got {1}")]
ExtraKeys(usize, usize),
#[error("invalid key length: expected {expected}, got {actual}")]
InvalidKeyLength { expected: usize, actual: usize },
#[error("invalid next key length: expected {expected}, got {actual}")]
InvalidNextKeyLength { expected: usize, actual: usize },
#[error("invalid chain ID length: expected {expected}, got {actual}")]
InvalidChainIdLength { expected: usize, actual: usize },
#[error(
"invalid message length: expected at least {expected}, got {actual}"
)]
InvalidMessageLength { expected: usize, actual: usize },
#[error("invalid CBOR data in info field")]
InvalidInfoCbor,
#[error("date out of range: {details}")]
DateOutOfRange { details: String },
#[error("invalid date: {details}")]
InvalidDate { details: String },
#[error("missing required URL parameter: {parameter}")]
MissingUrlParameter { parameter: String },
#[error(
"year out of range for 2-byte serialization: must be between 2023-2150, got {year}"
)]
YearOutOfRange { year: i32 },
#[error("invalid month ({month}) or day ({day}) for year {year}")]
InvalidMonthOrDay { year: i32, month: u32, day: u32 },
#[error("resolution serialization error: {details}")]
ResolutionError { details: String },
#[error("bytewords error: {0}")]
Bytewords(#[from] bc_ur::Error),
#[error("CBOR error: {0}")]
Cbor(#[from] dcbor::Error),
#[error("URL parsing error: {0}")]
Url(#[from] url::ParseError),
#[error("base64 decoding error: {0}")]
Base64(#[from] base64::DecodeError),
#[error("JSON error: {0}")]
Json(#[from] serde_json::Error),
#[error("integer conversion error: {0}")]
TryFromInt(#[from] std::num::TryFromIntError),
#[cfg(feature = "envelope")]
#[error("envelope error: {0}")]
Envelope(#[from] bc_envelope::Error),
#[error("validation error: {0}")]
Validation(#[from] crate::validate::ValidationIssue),
}
pub type Result<T> = std::result::Result<T, Error>;
impl From<Error> for dcbor::Error {
fn from(error: Error) -> dcbor::Error {
match error {
Error::Cbor(err) => err,
_ => dcbor::Error::Custom(error.to_string()),
}
}
}