base/onescomplement/
error.rs

1//! Basic error reporting.
2
3use std::error::Error;
4use std::fmt::{self, Debug, Display, Formatter};
5
6/// Represents a failure to convert to or from one of the signed or
7/// unsigned types defined in the base crate.
8#[derive(Clone, Copy, Debug, PartialEq, Eq)]
9pub enum ConversionFailed {
10    // TODO: give more range-specific name
11    TooLarge,
12    TooSmall,
13}
14
15#[derive(Clone, Copy, Debug, PartialEq, Eq)]
16pub enum StringConversionFailed {
17    Range(ConversionFailed),
18    EmptyInput,
19    NotOctal(char),
20}
21
22impl Error for ConversionFailed {}
23
24impl Display for ConversionFailed {
25    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), fmt::Error> {
26        match self {
27            ConversionFailed::TooLarge => f.write_str("value is too large"),
28            ConversionFailed::TooSmall => f.write_str("value is too small"),
29        }
30    }
31}
32
33impl Display for StringConversionFailed {
34    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), fmt::Error> {
35        match self {
36            StringConversionFailed::Range(e) => std::fmt::Display::fmt(&e, f),
37            StringConversionFailed::NotOctal(ch) => {
38                write!(f, "value contains a non-octal digit {ch}")
39            }
40            StringConversionFailed::EmptyInput => {
41                f.write_str("an empty string is not a valid number")
42            }
43        }
44    }
45}