velr-types 0.1.0

Shared public value types for Velr drivers
Documentation
use std::fmt;

#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DecodeError {
    EmptyInput,
    UnknownTag(u8),
    InvalidUtf8,
    InvalidJson(String),
    InvalidTemporal(String),
    InvalidSpatial(String),
    InvalidList(String),
    InvalidVector(String),
    InvalidStorageClass(&'static str),
    UnexpectedTag { expected: &'static str, actual: u8 },
    Truncated,
    NonCanonical(&'static str),
}

impl fmt::Display for DecodeError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            Self::EmptyInput => write!(f, "empty input"),
            Self::UnknownTag(tag) => write!(f, "unknown tag 0x{tag:02x}"),
            Self::InvalidUtf8 => write!(f, "invalid UTF-8"),
            Self::InvalidJson(msg) => write!(f, "invalid JSON: {msg}"),
            Self::InvalidTemporal(msg) => write!(f, "invalid temporal value: {msg}"),
            Self::InvalidSpatial(msg) => write!(f, "invalid spatial value: {msg}"),
            Self::InvalidList(msg) => write!(f, "invalid list value: {msg}"),
            Self::InvalidVector(msg) => write!(f, "invalid vector value: {msg}"),
            Self::InvalidStorageClass(msg) => write!(f, "invalid storage class: {msg}"),
            Self::UnexpectedTag { expected, actual } => {
                write!(f, "unexpected tag 0x{actual:02x}, expected {expected}")
            }
            Self::Truncated => write!(f, "truncated input"),
            Self::NonCanonical(msg) => write!(f, "non-canonical encoding: {msg}"),
        }
    }
}

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

#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EncodeError {
    InvalidTemporal(&'static str),
    InvalidSpatial(&'static str),
    InvalidList(&'static str),
    InvalidVector(&'static str),
    NonCanonicalValue(&'static str),
}

impl fmt::Display for EncodeError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            Self::InvalidTemporal(msg) => write!(f, "invalid temporal value: {msg}"),
            Self::InvalidSpatial(msg) => write!(f, "invalid spatial value: {msg}"),
            Self::InvalidList(msg) => write!(f, "invalid list value: {msg}"),
            Self::InvalidVector(msg) => write!(f, "invalid vector value: {msg}"),
            Self::NonCanonicalValue(msg) => write!(f, "non-canonical value: {msg}"),
        }
    }
}

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