use bytes::Bytes;
use crate::v2::{write::Section, Tag};
#[derive(Debug, Default)]
#[non_exhaustive]
pub enum SignatureAlgorithm {
#[default]
None,
}
impl SignatureAlgorithm {
pub(crate) fn begin(self) -> SignatureState {
match self {
SignatureAlgorithm::None => SignatureState::None,
}
}
}
#[derive(Debug)]
pub(crate) enum SignatureState {
None,
}
impl SignatureState {
pub(crate) fn update(&mut self, _section: &Section) -> Result<(), SignatureError> {
match self {
SignatureState::None => Ok(()),
}
}
pub(crate) fn finish(self) -> Result<Signature, SignatureError> {
match self {
SignatureState::None => Ok(Signature::none()),
}
}
}
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum SignatureError {
#[error(transparent)]
Other(Box<dyn std::error::Error + Send + Sync>),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
pub struct Signature {
pub tag: Tag,
pub value: Bytes,
}
impl Signature {
pub const fn none() -> Self {
Signature::new(Tag::SignatureNone, Bytes::new())
}
pub const fn new(tag: Tag, value: Bytes) -> Self {
Signature { tag, value }
}
pub const fn is_none(&self) -> bool {
matches!(self.tag, Tag::SignatureNone)
}
}