use serde::Serialize;
use crate::message::Message;
#[derive(Clone, Debug, Serialize)]
pub struct Feedback {
pub field: &'static str,
pub messages: Vec<Message>,
}
impl Feedback {
pub fn is_negative(&self) -> bool {
!self.messages.is_empty()
}
}
impl PartialEq for Feedback {
fn eq(&self, other: &Self) -> bool {
if self.field != other.field {
return false;
}
self.messages == other.messages
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_is_negative() {
let f = Feedback {
field: "name",
messages: Vec::new(),
};
assert!(!f.is_negative());
let m = Message {
id: "validation.text",
text: Some("lorem ipsum"),
args: Vec::new(),
};
let f = Feedback {
field: "name",
messages: vec![m],
};
assert!(f.is_negative());
}
#[test]
fn test_eq() {
let a = Feedback {
field: "name",
messages: vec![Message {
id: "validation.test",
text: Some("lorem ipsum"),
args: Vec::new(),
}],
};
assert!(a.eq(&a));
let b = Feedback {
field: "name",
messages: vec![Message {
id: "validation.test",
text: Some("lorem ipsum"),
args: Vec::new(),
}],
};
assert!(a.eq(&b));
let c = Feedback {
field: "description",
messages: vec![Message {
id: "validation.test",
text: Some("lorem ipsum"),
args: Vec::new(),
}],
};
assert!(!a.eq(&c));
let d = Feedback {
field: "name",
messages: vec![Message {
id: "validation.test",
text: Some("lorem ipsum {0}"),
args: vec!["dolor sit amet".to_string()],
}],
};
assert!(!a.eq(&d));
}
}