use super::std_messages::{BadRequest, FieldViolation};
pub(crate) mod vec;
#[non_exhaustive]
#[derive(Clone, Debug)]
pub struct ErrorDetails {
pub(crate) bad_request: Option<BadRequest>,
}
impl ErrorDetails {
pub fn new() -> Self {
ErrorDetails { bad_request: None }
}
pub fn with_bad_request(field_violations: Vec<FieldViolation>) -> Self {
ErrorDetails {
bad_request: Some(BadRequest::new(field_violations)),
..ErrorDetails::new()
}
}
pub fn with_bad_request_violation(
field: impl Into<String>,
description: impl Into<String>,
) -> Self {
ErrorDetails {
bad_request: Some(BadRequest::with_violation(field, description)),
..ErrorDetails::new()
}
}
pub fn bad_request(&self) -> Option<BadRequest> {
self.bad_request.clone()
}
pub fn set_bad_request(&mut self, violations: Vec<FieldViolation>) -> &mut Self {
self.bad_request = Some(BadRequest::new(violations));
self
}
pub fn add_bad_request_violation(
&mut self,
field: impl Into<String>,
description: impl Into<String>,
) -> &mut Self {
match &mut self.bad_request {
Some(bad_request) => {
bad_request.add_violation(field, description);
}
None => {
self.bad_request = Some(BadRequest::with_violation(field, description));
}
};
self
}
pub fn has_bad_request_violations(&self) -> bool {
if let Some(bad_request) = &self.bad_request {
return !bad_request.field_violations.is_empty();
}
false
}
}