use crate::context::Request;
use crate::forms::field::RuniqueForm;
pub struct ValidationForm<F: RuniqueForm> {
form: F,
}
impl<F: RuniqueForm> ValidationForm<F> {
pub async fn try_new(mut form: F, request: &Request) -> Result<Self, F> {
form.register_dynamic_fields(request).await;
let validate = match request.method.is_safe() {
true => form.allow_get(request),
false => form.allow_post(request),
};
if validate && form.is_valid().await {
Ok(Self { form })
} else {
Err(form)
}
}
pub fn into_form(self) -> F {
self.form
}
pub fn database_error(&mut self, err: &sea_orm::DbErr) {
self.form.database_error(err);
}
}
impl<F: RuniqueForm> std::ops::Deref for ValidationForm<F> {
type Target = F;
fn deref(&self) -> &F {
&self.form
}
}