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)
    }
}