use std::{convert, error,
fmt::{self, Display},
option};
#[derive(Copy, Clone, Debug)]
pub enum Error
{
Eof,
ExpectedBoolean,
ExpectedInteger,
ExpectedSign,
ExpectedString,
NoEndQuote,
ExpectedReal,
ExpectedNothing,
}
impl fmt::Display for Error
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result
{
use Error::*;
let err = match *self {
Eof => "End-of-file",
ExpectedBoolean => "Expected a boolean",
ExpectedInteger => "Expected an integer",
ExpectedSign => "Expected an integer sign",
ExpectedString => "Expected a string",
NoEndQuote => "EOF without closing string",
ExpectedReal => "Expected a real",
ExpectedNothing => "Expected a nothing",
};
write!(f, "{}", err)
}
}
impl error::Error for Error {}
impl convert::From<option::NoneError> for Error
{
fn from(_error: option::NoneError) -> Self
{
Self::Eof
}
}
impl serde::de::Error for Error
{
fn custom<T>(_msg: T) -> Self
where T: Display,
{
unimplemented!()
}
}