use std::fmt;
use std::io;
use value_trait::ValueType;
#[derive(Debug)]
pub enum EncoderError {
InvalidField(&'static str),
InvalidTimestamp(ValueType),
InvalidValue(String, ValueType),
Io(io::Error),
MissingField(&'static str),
}
impl PartialEq for EncoderError {
fn eq(&self, other: &Self) -> bool {
match (self, other) {
(EncoderError::InvalidField(v1), EncoderError::InvalidField(v2))
| (EncoderError::MissingField(v1), EncoderError::MissingField(v2)) => v1 == v2,
(EncoderError::InvalidTimestamp(v1), EncoderError::InvalidTimestamp(v2)) => v1 == v2,
(EncoderError::InvalidValue(k1, v1), EncoderError::InvalidValue(k2, v2)) => {
k1 == k2 && v1 == v2
}
(EncoderError::Io(_), EncoderError::Io(_)) => true,
(_, _) => false,
}
}
}
#[derive(Debug, PartialEq)]
pub enum DecoderError {
EqInTagValue(usize),
Unexpected(usize),
Generic(usize, String),
InvalidFields(usize),
MissingTagValue(usize),
ParseFloatError(usize, lexical::Error),
ParseIntError(usize, lexical::Error),
TrailingCharacter(usize),
InvalidEscape(usize),
UnexpectedEnd(usize),
}
impl fmt::Display for EncoderError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{:?}", self)
}
}
impl fmt::Display for DecoderError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{:?}", self)
}
}
impl std::error::Error for EncoderError {}
impl std::error::Error for DecoderError {}
pub type EncoderResult<T> = std::result::Result<T, EncoderError>;
pub type DecoderResult<T> = std::result::Result<T, DecoderError>;
impl From<io::Error> for EncoderError {
fn from(e: io::Error) -> Self {
Self::Io(e)
}
}