1f1555e47Sopenharmony_ciuse std::error;
2f1555e47Sopenharmony_ciuse std::fmt;
3f1555e47Sopenharmony_ciuse std::io;
4f1555e47Sopenharmony_ciuse std::num;
5f1555e47Sopenharmony_ciuse std::str;
6f1555e47Sopenharmony_ci
7f1555e47Sopenharmony_ci/// A common error type for the `autocfg` crate.
8f1555e47Sopenharmony_ci#[derive(Debug)]
9f1555e47Sopenharmony_cipub struct Error {
10f1555e47Sopenharmony_ci    kind: ErrorKind,
11f1555e47Sopenharmony_ci}
12f1555e47Sopenharmony_ci
13f1555e47Sopenharmony_ciimpl error::Error for Error {
14f1555e47Sopenharmony_ci    fn description(&self) -> &str {
15f1555e47Sopenharmony_ci        "AutoCfg error"
16f1555e47Sopenharmony_ci    }
17f1555e47Sopenharmony_ci
18f1555e47Sopenharmony_ci    fn cause(&self) -> Option<&error::Error> {
19f1555e47Sopenharmony_ci        match self.kind {
20f1555e47Sopenharmony_ci            ErrorKind::Io(ref e) => Some(e),
21f1555e47Sopenharmony_ci            ErrorKind::Num(ref e) => Some(e),
22f1555e47Sopenharmony_ci            ErrorKind::Utf8(ref e) => Some(e),
23f1555e47Sopenharmony_ci            ErrorKind::Other(_) => None,
24f1555e47Sopenharmony_ci        }
25f1555e47Sopenharmony_ci    }
26f1555e47Sopenharmony_ci}
27f1555e47Sopenharmony_ci
28f1555e47Sopenharmony_ciimpl fmt::Display for Error {
29f1555e47Sopenharmony_ci    fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
30f1555e47Sopenharmony_ci        match self.kind {
31f1555e47Sopenharmony_ci            ErrorKind::Io(ref e) => e.fmt(f),
32f1555e47Sopenharmony_ci            ErrorKind::Num(ref e) => e.fmt(f),
33f1555e47Sopenharmony_ci            ErrorKind::Utf8(ref e) => e.fmt(f),
34f1555e47Sopenharmony_ci            ErrorKind::Other(s) => s.fmt(f),
35f1555e47Sopenharmony_ci        }
36f1555e47Sopenharmony_ci    }
37f1555e47Sopenharmony_ci}
38f1555e47Sopenharmony_ci
39f1555e47Sopenharmony_ci#[derive(Debug)]
40f1555e47Sopenharmony_cienum ErrorKind {
41f1555e47Sopenharmony_ci    Io(io::Error),
42f1555e47Sopenharmony_ci    Num(num::ParseIntError),
43f1555e47Sopenharmony_ci    Utf8(str::Utf8Error),
44f1555e47Sopenharmony_ci    Other(&'static str),
45f1555e47Sopenharmony_ci}
46f1555e47Sopenharmony_ci
47f1555e47Sopenharmony_cipub fn from_io(e: io::Error) -> Error {
48f1555e47Sopenharmony_ci    Error {
49f1555e47Sopenharmony_ci        kind: ErrorKind::Io(e),
50f1555e47Sopenharmony_ci    }
51f1555e47Sopenharmony_ci}
52f1555e47Sopenharmony_ci
53f1555e47Sopenharmony_cipub fn from_num(e: num::ParseIntError) -> Error {
54f1555e47Sopenharmony_ci    Error {
55f1555e47Sopenharmony_ci        kind: ErrorKind::Num(e),
56f1555e47Sopenharmony_ci    }
57f1555e47Sopenharmony_ci}
58f1555e47Sopenharmony_ci
59f1555e47Sopenharmony_cipub fn from_utf8(e: str::Utf8Error) -> Error {
60f1555e47Sopenharmony_ci    Error {
61f1555e47Sopenharmony_ci        kind: ErrorKind::Utf8(e),
62f1555e47Sopenharmony_ci    }
63f1555e47Sopenharmony_ci}
64f1555e47Sopenharmony_ci
65f1555e47Sopenharmony_cipub fn from_str(s: &'static str) -> Error {
66f1555e47Sopenharmony_ci    Error {
67f1555e47Sopenharmony_ci        kind: ErrorKind::Other(s),
68f1555e47Sopenharmony_ci    }
69f1555e47Sopenharmony_ci}
70