Skip to main content

Crate anyform

Crate anyform 

Source
Expand description

§anyform

Any database. Any form. Zero hassle.

§Features

  • Schema-driven forms: Define forms in the database, not code
  • Multiple output formats: JSON, HTML, Tera templates
  • Multi-step wizards: Progress tracking with conditional logic
  • Survey & quiz support: Scoring, results, analytics
  • Multi-database: SQLite, PostgreSQL, MySQL via SeaORM

§Quick Start

use axum::{Router, Extension};
use anyform::AnyFormRouter;
use sea_orm::Database;

#[tokio::main]
async fn main() {
    let db = Database::connect("sqlite:forms.db").await.unwrap();

    let app = Router::new()
        .merge(AnyFormRouter::new(db.clone()))
        .layer(Extension(db));

    let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
    axum::serve(listener, app).await.unwrap();
}

Re-exports§

pub use migration::Migrator;
pub use init::init_schema;
pub use entities::field::ActiveModel as FieldActiveModel;
pub use entities::field::Entity as FieldEntity;
pub use entities::field::Model as Field;
pub use entities::field_option::ActiveModel as FieldOptionActiveModel;
pub use entities::field_option::Entity as FieldOptionEntity;
pub use entities::field_option::Model as FieldOption;
pub use entities::form::ActiveModel as FormActiveModel;
pub use entities::form::Entity as FormEntity;
pub use entities::form::Model as Form;
pub use entities::result::ActiveModel as ResultActiveModel;
pub use entities::result::Entity as ResultEntity;
pub use entities::result::Model as FormResult;
pub use entities::step::ActiveModel as StepActiveModel;
pub use entities::step::Entity as StepEntity;
pub use entities::step::Model as Step;
pub use entities::submission::ActiveModel as SubmissionActiveModel;
pub use entities::submission::Entity as SubmissionEntity;
pub use entities::submission::Model as Submission;
pub use schema::FieldValue;
pub use schema::FormSettings;
pub use schema::ScaleLabels;
pub use schema::UiOptions;
pub use schema::ValidationRules;
pub use schema::ValueType;
pub use condition::ConditionOp;
pub use condition::ConditionRule;
pub use seed::clear_seeded_forms;
pub use seed::seed_all;
pub use seed::seed_contact_form;
pub use seed::seed_feedback_form;
pub use seed::seed_quiz_form;
pub use error::FormError;
pub use error::IntoApiError;
pub use error::StepValidationErrors;
pub use error::ValidationErrors;
pub use validation::is_field_visible;
pub use validation::is_step_visible;
pub use validation::validate_field;
pub use validation::validate_multi_step_submission;
pub use validation::validate_step;
pub use validation::validate_submission;
pub use services::CreateFieldInput;
pub use services::CreateFormInput;
pub use services::CreateOptionInput;
pub use services::CreateStepInput;
pub use services::FormBuilder;
pub use extractors::FormSubmission;
pub use extractors::RequestId;
pub use extractors::ValidatedSubmission;
pub use response::ApiError;
pub use response::ApiResponse;
pub use response::PaginationInfo;
pub use render::FormJson;
pub use render::HtmlOptions;
pub use render::HtmlRenderer;
pub use render::JsonRenderer;
pub use render::TeraRenderer;

Modules§

condition
Condition rules for dynamic step/field visibility.
entities
SeaORM entity definitions for anyform.
error
Error types for anyform.
extractors
Axum extractors for form handling.
init
Schema initialization for embedded use.
migration
render
Form rendering to different output formats.
response
API response envelope types.
schema
Schema types for form definitions.
seed
Database seeding for example forms.
services
Service layer for anyform.
validation
Form validation engine.

Traits§

MigratorTrait
Performing migrations on a database