Actions (Submits)
#[submit] handlers process form POSTs with typed validation and field-level errors.
Define a submit handler
#[derive(Deserialize)]
struct ContactForm {
email: String,
message: String,
}
#[submit]
async fn contact(form: ContactForm, _req: &FlowRequest)
-> Result<ContactResult, SubmitError>
{
if form.email.is_empty() {
return Err(SubmitError::new("Fix errors")
.field("email", "Required"));
}
Ok(ContactResult { ok: true })
}Wire to Form
view! {
<Form submit={contact}>
<input name="email" type="email" />
<textarea name="message"></textarea>
<button type="submit">"Send"</button>
</Form>
}SubmitError
Return structured validation errors. The runtime maps field_errors to form fields when using client enhancement.
SubmitError::new("Invalid input")
.field("email", "Must be a valid email")
.field("message", "Too short")HTTP endpoint
Forms POST to /_resuma/submit/:name. Works without JavaScript via standard form submission.