notepack 0.3.0

A compact binary format and Rust library for encoding and decoding Nostr notes
Documentation
#[derive(Debug)]
pub enum Error {
    Truncated,
    VarintOverflow,
    VarintUnterminated,
    Utf8(std::str::Utf8Error),
    FromHex,
    Decode(base64::DecodeError),
    InvalidPrefix,
    Json(serde_json::Error),
}

impl core::fmt::Display for Error {
    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
        match self {
            Error::Truncated => {
                write!(f, "notepack string is truncated")
            }
            Error::VarintOverflow => {
                write!(f, "varint overflowed")
            }
            Error::VarintUnterminated => {
                write!(f, "varint is unterminated")
            }
            Error::Utf8(err) => {
                write!(f, "utf8 error: {err}")
            }
            Error::FromHex => {
                write!(f, "error when converting from hex")
            }
            Error::Decode(err) => {
                write!(f, "base64 decode err: {err}")
            }
            Error::InvalidPrefix => {
                write!(f, "String did not start with notepack_")
            }
            Error::Json(err) => {
                write!(f, "json error: {err}")
            }
        }
    }
}

impl From<std::str::Utf8Error> for Error {
    fn from(err: std::str::Utf8Error) -> Self {
        Error::Utf8(err)
    }
}

impl From<base64::DecodeError> for Error {
    fn from(err: base64::DecodeError) -> Self {
        Error::Decode(err)
    }
}

impl From<hex::FromHexError> for Error {
    fn from(_err: hex::FromHexError) -> Self {
        Error::FromHex
    }
}

impl From<serde_json::Error> for Error {
    fn from(err: serde_json::Error) -> Self {
        Error::Json(err)
    }
}

impl std::error::Error for Error {}