| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | use std::fmt::{self, Display};use serde::{ser, de};pub type Result<T> = std::result::Result<T, Error>;#[derive(Debug)]pub enum Error {    Message(String),    Io(std::io::Error),    Eof,    UnknownLength,    SequenceTooLong(usize),    TooManyVariants(u32),}impl std::error::Error for Error {}impl Display for Error {    fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {        match self {            Error::Message(message) => formatter.write_str(message),            Error::Io(io_error) => io_error.fmt(formatter),            Error::Eof => formatter.write_str("unexpected end of input"),            Error::UnknownLength => formatter.write_str("sequence had an unknown length"),            Error::SequenceTooLong(length) => formatter.write_fmt(                format_args!("sequence was longer than 2**32 - 1: {}", length)            ),            Error::TooManyVariants(length) => formatter.write_fmt(                format_args!("too many variants to be serialized, the limit is 2**16: {}", length)            ),        }    }}impl ser::Error for Error {    fn custom<T: Display>(message: T) -> Self {        Error::Message(message.to_string())    }}impl de::Error for Error {    fn custom<T: Display>(message: T) -> Self {        Error::Message(message.to_string())    }}pub trait MapError<T> {    /// Returns self if no error occurred, otherwise converts the error to a serde_blocktree error.    fn map_error(self) -> Result<T>;}impl<T> MapError<T> for std::io::Result<T> {    fn map_error(self) -> Result<T> {        self.or_else(|err| Result::Err(Error::Io(err)))    }}
 |