record_query/
error.rs

1use csv;
2use glob;
3use protobuf;
4use rmpv;
5use serde_cbor;
6use serde_hjson;
7use serde_json;
8use serde_protobuf;
9use serde_yaml;
10use std::io;
11use std::string;
12use toml;
13#[cfg(feature = "v8")]
14use v8;
15use yaml_rust;
16
17use std::result;
18
19pub type Result<A> = result::Result<A, Error>;
20
21#[derive(Debug, Fail)]
22pub enum Error {
23    #[fail(display = "protobuf error")]
24    Protobuf(#[cause] serde_protobuf::error::Error),
25    #[fail(display = "IO error")]
26    Io(#[cause] io::Error),
27    #[fail(display = "UTF-8 error")]
28    Utf8(#[cause] string::FromUtf8Error),
29    #[fail(display = "native protobuf error")]
30    NativeProtobuf(#[cause] protobuf::ProtobufError),
31    #[fail(display = "MessagePack encode error")]
32    MessagePackEncode(#[cause] rmpv::encode::Error),
33    #[fail(display = "Avro error")]
34    Avro(#[cause] Avro),
35    #[fail(display = "CBOR error")]
36    Cbor(#[cause] serde_cbor::error::Error),
37    #[fail(display = "HJSON error")]
38    Hjson(#[cause] serde_hjson::Error),
39    #[fail(display = "JSON error")]
40    Json(#[cause] serde_json::Error),
41    #[fail(display = "YAML error")]
42    Yaml(#[cause] serde_yaml::Error),
43    #[fail(display = "YAML scan error")]
44    YamlScan(#[cause] yaml_rust::ScanError),
45    #[fail(display = "TOML deserialize error")]
46    TomlDeserialize(#[cause] toml::de::Error),
47    #[fail(display = "TOML serialize error")]
48    TomlSerialize(#[cause] toml::ser::Error),
49    #[fail(display = "glob error")]
50    Glob(#[cause] glob::GlobError),
51    #[fail(display = "glob pattern error")]
52    GlobPattern(#[cause] glob::PatternError),
53    #[fail(display = "CSV error")]
54    Csv(#[cause] csv::Error),
55    #[fail(display = "MessagePack decode error")]
56    MessagePackDecode(#[cause] rmpv::decode::Error),
57    #[fail(display = "unimplemented: {}", msg)]
58    Unimplemented { msg: String },
59    #[fail(display = "illegal state: {}", msg)]
60    IllegalState { msg: String },
61    #[fail(display = "format error: {}", msg)]
62    Format { msg: String },
63    #[fail(display = "internal error: {}", _0)]
64    Internal(&'static str),
65    #[fail(display = "{}", _0)]
66    Message(String),
67}
68
69#[derive(Debug, Fail)]
70pub enum Avro {
71    #[fail(display = "decode error")]
72    Decode(#[cause] avro_rs::DecodeError),
73    #[fail(display = "error when parsing schema")]
74    ParseSchema(#[cause] avro_rs::ParseSchemaError),
75    #[fail(display = "schema resolution error")]
76    SchemaResolution(#[cause] avro_rs::SchemaResolutionError),
77    #[fail(display = "validation error")]
78    Validation(#[cause] avro_rs::ValidationError),
79    #[fail(display = "{}", message)]
80    Custom { message: String },
81}
82
83impl Error {
84    pub fn unimplemented(msg: String) -> Self {
85        Self::Unimplemented { msg }
86    }
87
88    pub fn illegal_state(msg: String) -> Self {
89        Self::IllegalState { msg }
90    }
91}
92
93impl Avro {
94    pub fn downcast(error: failure::Error) -> Self {
95        let error = match error.downcast::<avro_rs::DecodeError>() {
96            Ok(error) => return Self::Decode(error),
97            Err(error) => error,
98        };
99
100        let error = match error.downcast::<avro_rs::ParseSchemaError>() {
101            Ok(error) => return Self::ParseSchema(error),
102            Err(error) => error,
103        };
104
105        let error = match error.downcast::<avro_rs::SchemaResolutionError>() {
106            Ok(error) => return Self::SchemaResolution(error),
107            Err(error) => error,
108        };
109
110        let error = match error.downcast::<avro_rs::ValidationError>() {
111            Ok(error) => return Self::Validation(error),
112            Err(error) => error,
113        };
114
115        Self::Custom {
116            message: error.to_string(),
117        }
118    }
119}
120
121macro_rules! gen_from {
122    ($t:ty, $i:ident) => {
123        impl From<$t> for Error {
124            fn from(e: $t) -> Self {
125                Self::$i(e)
126            }
127        }
128    };
129}
130
131gen_from!(serde_protobuf::error::Error, Protobuf);
132gen_from!(io::Error, Io);
133#[cfg(feature = "js")]
134gen_from!(v8::error::Error, Js);
135gen_from!(string::FromUtf8Error, Utf8);
136gen_from!(protobuf::ProtobufError, NativeProtobuf);
137gen_from!(rmpv::encode::Error, MessagePackEncode);
138gen_from!(serde_cbor::error::Error, Cbor);
139gen_from!(serde_hjson::Error, Hjson);
140gen_from!(serde_json::Error, Json);
141gen_from!(serde_yaml::Error, Yaml);
142gen_from!(yaml_rust::ScanError, YamlScan);
143gen_from!(toml::de::Error, TomlDeserialize);
144gen_from!(toml::ser::Error, TomlSerialize);
145gen_from!(glob::GlobError, Glob);
146gen_from!(glob::PatternError, GlobPattern);
147gen_from!(csv::Error, Csv);
148gen_from!(rmpv::decode::Error, MessagePackDecode);