1use core::fmt;
22
23#[derive(Debug, Clone, Copy, PartialEq, Eq)]
25pub struct OverflowError;
26
27impl fmt::Display for OverflowError {
28 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
29 f.write_str("decimal overflow")
30 }
31}
32
33#[derive(Debug, Clone, Copy, PartialEq, Eq)]
35pub enum DivError {
36 Overflow,
38 DivisionByZero,
40}
41
42impl fmt::Display for DivError {
43 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
44 match self {
45 Self::Overflow => f.write_str("decimal division overflow"),
46 Self::DivisionByZero => f.write_str("division by zero"),
47 }
48 }
49}
50
51#[derive(Debug, Clone, Copy, PartialEq, Eq)]
53pub enum ParseError {
54 InvalidFormat,
56 Overflow,
58 PrecisionLoss,
60}
61
62impl fmt::Display for ParseError {
63 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
64 match self {
65 Self::InvalidFormat => f.write_str("invalid decimal format"),
66 Self::Overflow => f.write_str("decimal parse overflow"),
67 Self::PrecisionLoss => f.write_str("precision loss in decimal parse"),
68 }
69 }
70}
71
72#[derive(Debug, Clone, Copy, PartialEq, Eq)]
74pub enum ConvertError {
75 Overflow,
77 PrecisionLoss,
79}
80
81impl fmt::Display for ConvertError {
82 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
83 match self {
84 Self::Overflow => f.write_str("decimal conversion overflow"),
85 Self::PrecisionLoss => f.write_str("precision loss in decimal conversion"),
86 }
87 }
88}
89
90#[cfg(feature = "std")]
91impl std::error::Error for OverflowError {}
92
93#[cfg(feature = "std")]
94impl std::error::Error for DivError {}
95
96#[cfg(feature = "std")]
97impl std::error::Error for ParseError {}
98
99#[cfg(feature = "std")]
100impl std::error::Error for ConvertError {}