1pub type Result<A> = std::result::Result<A, Error>;
2
3#[derive(Debug)]
4pub enum Error {
5 FieldNotExist { field: String },
6 CannotScanYaml { detail: String },
7 IncompatibleVersion { version: String },
8 TypeMismatch { expected: String, found: String },
9 UnknownDataType { found: String },
10 Enclosed { key: String, causes: Vec<Error> },
11 Multiple { causes: Vec<Error> },
12}
13
14impl Error {
15 pub fn multiple(mut causes: Vec<Self>) -> Self {
16 if causes.len() == 1 {
17 causes.remove(0)
18 } else {
19 Self::Multiple { causes }
20 }
21 }
22}
23
24pub fn by_key(key: impl Into<String>) -> impl FnOnce(Error) -> Error {
25 move |cause| Error::Enclosed {
26 key: key.into(),
27 causes: vec![cause],
28 }
29}
30
31pub fn with_key(key: impl Into<String>) -> impl FnOnce(Vec<Error>) -> Error {
32 move |causes| Error::Enclosed {
33 key: key.into(),
34 causes,
35 }
36}
37
38pub type Output<A> = crate::core::Output<A, Error>;