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