Skip to main content

Crate reinhardt_forms

Crate reinhardt_forms 

Source
Expand description

§Reinhardt Forms

Form processing and validation for the Reinhardt framework.

§Overview

This crate provides comprehensive form processing capabilities inspired by Django’s form system, focusing on data validation and multi-step form wizards.

This crate is designed to be WASM-compatible, providing a pure form processing layer without HTML generation or platform-specific features.

§Features

  • Form: Base form class with validation
  • ModelForm: Auto-generated forms from model definitions
  • FormSet: Handle multiple forms of the same type
  • FormWizard: Multi-step form workflows
  • Field Types: 20+ field types (CharField, IntegerField, EmailField, etc.)
  • WASM Support: Compatible with WebAssembly targets via wasm_compat module

§Quick Start

§Basic Form

use reinhardt_forms::{Form, CharField, EmailField, IntegerField};

#[derive(Form)]
struct ContactForm {
    name: CharField,
    email: EmailField,
    age: IntegerField,
    message: CharField,
}

// Validate form data
let form = ContactForm::from_data(&request_data);
if form.is_valid() {
    let name = form.cleaned_data.name;
    // Process the form...
} else {
    let errors = form.errors();
}

§Model Form

use reinhardt_forms::{ModelForm, ModelFormBuilder};

// Auto-generate form from User model
let form = ModelFormBuilder::<User>::new()
    .fields(&["username", "email", "bio"])
    .exclude(&["password"])
    .build();

§Available Field Types

FieldDescription
CharFieldText input with max_length validation
IntegerFieldInteger input with min/max validation
FloatFieldFloating-point number input
DecimalFieldDecimal number with precision control
BooleanFieldCheckbox input
EmailFieldEmail address validation
URLFieldURL validation
DateFieldDate input with format parsing
DateTimeFieldDateTime input
TimeFieldTime input
DurationFieldDuration input
FileFieldFile upload
ImageFieldImage upload with dimension validation
ChoiceFieldSelect dropdown
MultipleChoiceFieldMulti-select
ModelChoiceFieldForeign key selection
JSONFieldJSON data input
UUIDFieldUUID input
SlugFieldURL-safe slug input
RegexFieldCustom regex validation

§FormSets

Handle multiple forms of the same type:

use reinhardt_forms::{FormSet, FormSetFactory};

// Create a formset with 3 forms
let formset = FormSetFactory::<ItemForm>::new()
    .extra(3)
    .min_num(1)
    .max_num(10)
    .build();

if formset.is_valid() {
    for form in formset.forms() {
        // Process each form
    }
}

§Form Wizard

Multi-step forms:

use reinhardt_forms::{FormWizard, WizardStep};

let wizard = FormWizard::new()
    .add_step(WizardStep::new("account", AccountForm::new()))
    .add_step(WizardStep::new("profile", ProfileForm::new()))
    .add_step(WizardStep::new("confirmation", ConfirmForm::new()));

// Process wizard step
let result = wizard.process_step(&request).await?;

Re-exports§

pub use bound_field::BoundField;
pub use field::ErrorType;
pub use field::FieldError;
pub use field::FieldResult;
pub use field::FormField as Field;
pub use field::FormField;
pub use field::Widget;
pub use field::escape_attribute;
pub use field::html_escape;
pub use fields::BooleanField;
pub use fields::CharField;
pub use fields::ChoiceField;
pub use fields::ColorField;
pub use fields::ComboField;
pub use fields::DateField;
pub use fields::DateTimeField;
pub use fields::DecimalField;
pub use fields::DurationField;
pub use fields::EmailField;
pub use fields::FileField;
pub use fields::FloatField;
pub use fields::GenericIPAddressField;
pub use fields::IPProtocol;
pub use fields::ImageField;
pub use fields::IntegerField;
pub use fields::JSONField;
pub use fields::ModelChoiceField;
pub use fields::ModelMultipleChoiceField;
pub use fields::MultiValueField;
pub use fields::MultipleChoiceField;
pub use fields::PASSWORD_REDACTED;
pub use fields::PasswordField;
pub use fields::RegexField;
pub use fields::SlugField;
pub use fields::SplitDateTimeField;
pub use fields::TimeField;
pub use fields::URLField;
pub use fields::UUIDField;
pub use form::Form;
pub use form::FormError;
pub use form::FormResult;
pub use formset::FormSet;
pub use formsets::FormSetFactory;
pub use formsets::InlineFormSet;
pub use formsets::ModelFormSet as AdvancedModelFormSet;
pub use model_form::FieldType;
pub use model_form::FormModel;
pub use model_form::ModelForm;
pub use model_form::ModelFormBuilder;
pub use model_form::ModelFormConfig;
pub use model_formset::ModelFormSet;
pub use model_formset::ModelFormSetBuilder;
pub use model_formset::ModelFormSetConfig;
pub use validators::SlugValidator;
pub use validators::UrlValidator;
pub use wizard::FormWizard;
pub use wizard::WizardStep;

Modules§

bound_field
field
fields
form
formset
formsets
Advanced FormSet functionality
model_form
ModelForm implementation for ORM integration
model_formset
ModelFormSet implementation for managing multiple model forms
validators
Page/URL validators for form fields
wasm_compat
WASM Compatibility Layer for Forms (Week 5 Day 1-2)
wizard