1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
use std; use std::convert::From; use std::fmt::{self, Display}; use serde::{de, ser}; pub type Result<T> = std::result::Result<T, Error>; #[derive(Clone, Debug, PartialEq)] pub enum Error { Message(String), UnknownSegmentType, LengthNotFound, StackProblem, NonUtf8Str, UnsupportedType, Eof, ParsingLength, UnusedParseData, ParsingUnit, ParsingBool, ParsingMap, ParsingEnum, ParsingUnsigned, ParsingString, ParsingSeq, ParsingUnitVariant, } impl ser::Error for Error { fn custom<T: Display>(msg: T) -> Self { Error::Message(msg.to_string()) } } impl de::Error for Error { fn custom<T: Display>(msg: T) -> Self { Error::Message(msg.to_string()) } } impl From<std::string::FromUtf8Error> for Error { fn from(error: std::string::FromUtf8Error) -> Self { Error::NonUtf8Str } } impl Display for Error { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { formatter.write_str(std::error::Error::description(self)) } } impl std::error::Error for Error { fn description(&self) -> &str { match *self { Error::Message(ref msg) => msg, Error::UnknownSegmentType => "unknown segment type", Error::LengthNotFound => "length not found but required", Error::StackProblem => "stack problem", Error::UnusedParseData => "unused parse data", Error::ParsingUnit => "error parsing unit", Error::ParsingBool => "error parsing bool", Error::ParsingMap => "error parsing map", Error::ParsingEnum => "error parsing enum", Error::ParsingUnsigned => "error parsing unsigned", Error::ParsingString => "error parsing string", Error::ParsingSeq => "error parsing sequence", Error::ParsingUnitVariant => "error parsing unit variant", Error::Eof => "error eof", Error::UnsupportedType => "unsupported type", Error::ParsingLength => "error parsing data length", Error::NonUtf8Str => "error parsing string that wasn't utf8", } } }