use std::borrow::Cow;
use std::error;
use std::fmt;
use std::io;
#[derive(Debug)]
pub enum Error {
BadMagic,
DecodingError,
Eof,
Io(io::Error),
MalformedMetadata,
MisplacedMetadata,
PluralParsing,
UnknownEncoding,
}
use self::Error::*;
impl error::Error for Error {
fn source(&self) -> Option<&(dyn error::Error + 'static)> {
match *self {
Io(ref err) => Some(err),
_ => None,
}
}
}
impl fmt::Display for Error {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
match *self {
BadMagic => write!(fmt, "bad magic number"),
DecodingError => write!(fmt, "invalid byte sequence in a string"),
Eof => write!(fmt, "unxpected end of file"),
Io(ref err) => err.fmt(fmt),
MalformedMetadata => write!(fmt, "metadata syntax error"),
MisplacedMetadata => write!(fmt, "misplaced metadata"),
UnknownEncoding => write!(fmt, "unknown encoding specified"),
PluralParsing => write!(fmt, "invalid plural expression"),
}
}
}
impl From<io::Error> for Error {
fn from(inner: io::Error) -> Error {
Io(inner)
}
}
impl From<Cow<'static, str>> for Error {
fn from(_: Cow<'static, str>) -> Error {
DecodingError
}
}