Skip to main content

zinq_schema/error/
field.rs

1use super::GroupError;
2
3#[derive(Debug, Clone)]
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5pub struct FieldError {
6    pub name: String,
7    pub message: Option<String>,
8    pub errors: Option<GroupError>,
9}
10
11impl FieldError {
12    pub fn new(name: &str) -> Self {
13        return Self {
14            name: name.to_string(),
15            message: None,
16            errors: None,
17        };
18    }
19
20    pub fn len(&self) -> usize {
21        return match &self.errors {
22            None => 0,
23            Some(errors) => errors.len(),
24        };
25    }
26
27    pub fn message(self, message: &str) -> Self {
28        let mut next = self.clone();
29        next.message = Some(message.to_string());
30        return next;
31    }
32
33    pub fn error(self, err: super::Error) -> Self {
34        let mut next = self.clone();
35
36        return match &mut next.errors {
37            None => {
38                next.errors = Some(GroupError::new());
39                next
40            }
41            Some(errors) => {
42                errors.add(err);
43                next
44            }
45        };
46    }
47}
48impl std::fmt::Display for FieldError {
49    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
50        write!(f, "FieldError {{")?;
51        write!(f, "\n\tname: \"{}\"", self.name)?;
52
53        if let Some(v) = &self.message {
54            write!(f, ",\n\tmessage: \"{}\"", v)?;
55        }
56
57        if let Some(v) = &self.errors {
58            write!(f, "{}", v)?;
59        }
60
61        return write!(f, "\n}}\n");
62    }
63}
64
65impl std::error::Error for FieldError {
66    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
67        return Some(self);
68    }
69}