use std::ops::Deref;
use std::ops::DerefMut;
use crate::stuff::api_error::ApiError;
use crate::stuff::api_error::ApiResult;
#[derive(Default)]
pub struct FormErrors<E> {
inner: E,
modified: bool,
}
impl<E: Default> FormErrors<E> {
pub fn new() -> Self {
Self::default()
}
pub fn check(self) -> ApiResult<(), E> {
if self.modified {
Err(ApiError::FormError(self.inner))
} else {
Ok(())
}
}
pub fn fail<T>(self) -> ApiResult<T, E> {
Err(ApiError::FormError(self.inner))
}
}
impl<E> Deref for FormErrors<E> {
type Target = E;
fn deref(&self) -> &Self::Target {
&self.inner
}
}
impl<E> DerefMut for FormErrors<E> {
fn deref_mut(&mut self) -> &mut Self::Target {
self.modified = true;
&mut self.inner
}
}