use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Error {
Message(String),
Parse(String),
UnsupportedType(&'static str),
KeyMustBeString,
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Error::Message(msg) => write!(f, "{msg}"),
Error::Parse(msg) => write!(f, "parse error: {msg}"),
Error::UnsupportedType(t) => write!(f, "unsupported type: {t}"),
Error::KeyMustBeString => write!(f, "map keys must be strings"),
}
}
}
impl std::error::Error for Error {}
impl serde::de::Error for Error {
fn custom<T: fmt::Display>(msg: T) -> Self {
Error::Message(msg.to_string())
}
}
impl serde::ser::Error for Error {
fn custom<T: fmt::Display>(msg: T) -> Self {
Error::Message(msg.to_string())
}
}
pub type Result<T> = std::result::Result<T, Error>;