zinq_schema/error/
field.rs1use 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}