Validation
Typed form validation in #[submit] with the validator crate.
Install
validator = { version = "0.19", features = ["derive"] }Submit with Validate trait
use validator::{Validate, ValidationError};
#[derive(Deserialize, Validate)]
struct SignupForm {
#[validate(email)]
email: String,
#[validate(length(min = 8))]
password: String,
}
#[submit]
async fn signup(form: SignupForm, _req: &FlowRequest) -> Result<(), SubmitError> {
if let Err(errors) = form.validate() {
let mut err = SubmitError::new("Fix the errors below.");
for (field, msgs) in errors.field_errors() {
if let Some(m) = msgs.first().and_then(|m| m.message.as_ref()) {
err = err.field(field, m);
}
}
return Err(err);
}
db::create_user(&form.email, &form.password).await?;
Ok(())
}Field errors map to Form client enhancement automatically. See Actions.