1use core::fmt;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq)]
9pub struct Overflow<T> {
10 pub value: T,
12 pub max: T,
14}
15
16impl<T: fmt::Display> fmt::Display for Overflow<T> {
17 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18 write!(f, "value {} exceeds max {}", self.value, self.max)
19 }
20}
21
22#[derive(Debug, Clone, Copy, PartialEq, Eq)]
24pub struct FieldOverflow<T> {
25 pub field: &'static str,
27 pub overflow: Overflow<T>,
29}
30
31impl<T: fmt::Display> fmt::Display for FieldOverflow<T> {
32 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
33 write!(f, "field '{}': {}", self.field, self.overflow)
34 }
35}
36
37#[derive(Debug, Clone, Copy, PartialEq, Eq)]
39pub struct UnknownDiscriminant<T> {
40 pub field: &'static str,
43 pub value: T,
45}
46
47impl<T: fmt::Display> fmt::Display for UnknownDiscriminant<T> {
48 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
49 if self.field.is_empty() {
50 write!(f, "unknown discriminant: {}", self.value)
51 } else {
52 write!(
53 f,
54 "field '{}': unknown discriminant {}",
55 self.field, self.value
56 )
57 }
58 }
59}