use alloc::string::String;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("invalid integrity field: {0}")]
InvalidField(&'static str),
#[error("missing HTTP signature component: {0}")]
MissingComponent(String),
#[error("invalid HTTP signature component: {0}")]
InvalidComponent(String),
#[error("invalid HTTP signature target URI")]
InvalidTargetUri,
#[error("duplicate covered component")]
DuplicateComponent,
#[error("duplicate signature label")]
DuplicateLabel,
#[error("missing or mismatched SHA-256 content digest")]
ContentDigest,
#[error("only Ed25519 HTTP message signatures are supported")]
Algorithm,
#[error("invalid HTTP message signature")]
Signature,
#[error("HTTP signature policy rejected the message: {0}")]
Policy(&'static str),
#[error("HTTP integrity metadata limit exceeded")]
Limit,
#[error("invalid HTTP body frame order")]
FrameOrder,
#[error("trailers are unavailable for this message")]
TrailersUnavailable,
#[error("failed to generate signature nonce: {0}")]
Random(String),
#[error("invalid signature clock")]
Clock,
}
impl From<sfv::Error> for Error {
fn from(_: sfv::Error) -> Self {
Self::InvalidField("structured field syntax")
}
}