1#[derive(Debug, Clone, PartialEq)]
3pub struct FieldError {
4 pub field: String,
5 pub message: String,
6}
7
8impl FieldError {
9 pub fn new(field: impl Into<String>, message: impl Into<String>) -> Self {
10 Self { field: field.into(), message: message.into() }
11 }
12}
13
14impl std::fmt::Display for FieldError {
15 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
16 write!(f, "{}: {}", self.field, self.message)
17 }
18}
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23
24 #[test]
25 fn field_error_new() {
26 let e = FieldError::new("email", "invalid");
27 assert_eq!(e.field, "email");
28 assert_eq!(e.message, "invalid");
29 }
30
31 #[test]
32 fn field_error_display() {
33 let e = FieldError::new("name", "required");
34 assert_eq!(format!("{}", e), "name: required");
35 }
36
37 #[test]
38 fn field_error_clone() {
39 let e = FieldError::new("age", "too young");
40 let c = e.clone();
41 assert_eq!(e, c);
42 }
43}