runique 1.1.25

A Django-inspired web framework for Rust with ORM, templates, and comprehensive security middleware
Documentation
//! # Runique Framework
//!
//! Framework web moderne basé sur Axum pour la création d'applications web robustes et sécurisées.
//!
//! Organisation des modules alignée sur la hiérarchie `src/` actuelle tout en
//! conservant des alias de compatibilité (`config_runique`, `formulaire`,
//! middleware, etc.).
//!
//! ## Modules principaux
//!
//! - **`app`** : Constructeur et gestionnaire d'application
//! - **`config`** : Configuration (serveur, sécurité, settings, fichiers statiques)
//! - **`context`** : Contexte de requête, gestion d'erreurs, moteurs de template
//! - **`engine`** : Moteur principal Runique
//! - **`flash`** : Gestion des messages flash
//! - **`forms`** : Système de formulaires et validation
//! - **`macros`** : Macros utilitaires pour routes, contexte, flash, etc.
//! - **`middleware`** : Middlewares de sécurité (CSRF, CSP, authentification, cache, etc.)
//! - **`utils`** : Utilitaires (CSRF, CSP nonce, parsing HTML, response helpers)
//! - **`db`** : Configuration ORM (optionnel, avec feature `orm`)
//!
//! ## Exemple rapide
//!
//! ```rust,ignore
//! use runique::prelude::*;
//!
//! #[tokio::main]
//! async fn main() {
//!     let config = RuniqueConfig::from_env();
//!     let app = RuniqueApp::builder(config).build().await.unwrap();
//!     app.run().await.unwrap();
//! }
//! ```

// ---------------------------------------------------------------------------
// Modules principaux (arborescence actuelle)
// ---------------------------------------------------------------------------
pub mod app;
pub mod config;
pub mod context;
#[cfg(feature = "orm")]
pub mod db;
pub mod engine;
pub mod flash;
pub mod forms;

pub mod macros;

pub mod admin;
pub mod errors;
pub mod middleware;
pub mod migration;
pub mod utils;

// ---------------------------------------------------------------------------
// Alias de compatibilité pour l’ancien nommage
// ---------------------------------------------------------------------------
pub mod config_runique {
    pub mod composant_config {
        pub mod security_struct {
            pub use crate::config::security::*;
        }
        pub mod server_struct {
            pub use crate::config::server::*;
        }
        pub mod settings_struct {
            pub use crate::config::settings::*;
        }
        pub mod static_struct {
            pub use crate::config::static_files::*;
        }
    }

    pub mod config_struct {
        pub use crate::config::app::RuniqueConfig;
    }

    pub use composant_config::*;
    pub use config_struct::RuniqueConfig;
}

#[cfg(feature = "orm")]
pub mod data_base_runique {
    pub mod config {
        pub use crate::db::config::*;
    }

    pub mod composant_data_base {
        pub use crate::macros::bdd::{objects::*, query::*};
    }

    pub use config::*;
}

pub mod formulaire {
    pub mod builder_form {
        pub mod base_struct {
            pub use crate::forms::base::*;
        }
        pub mod field_type {
            pub use crate::forms::fields::*;
        }
        pub mod generique_field {
            pub use crate::forms::generic::*;
        }
        pub mod formmanager {
            pub use crate::forms::manager::*;
        }
        pub mod option_field {
            pub use crate::forms::options::*;
        }
        pub mod trait_form {
            pub use crate::forms::field::*;
        }
    }

    pub mod utils {
        pub use crate::utils::*;
    }

    pub use builder_form::*;
    pub use utils::*;
}

pub mod middleware_runique {
    pub mod middleware {
        pub use crate::middleware::allowed_hosts::*;
        pub use crate::middleware::auth::*;
        pub use crate::middleware::cache::*;
        pub use crate::middleware::config::*;
        pub use crate::middleware::csp::*;
        pub use crate::middleware::csrf::*;
        pub use crate::middleware::errors::*;
    }

    pub use middleware::*;
}

pub mod macro_runique {
    pub use crate::macros::*;
    pub use crate::macros::{
        context::{context_simplifier, flash},
        forms::*,
        routeur::*,
    };
}

pub mod moteur_engine {
    pub mod engine_struct {
        pub use crate::engine::core::*;
    }

    pub use engine_struct::*;
}

pub mod runique_start {
    pub mod composant_app {
        pub mod builder_util {
            pub use crate::app::builder::*;
        }
        pub mod template_engine {
            pub use crate::app::templates::*;
        }
    }

    pub use crate::app::*;
}
pub use forms::Prisme;
// ---------------------------------------------------------------------------
// Ré-export des dépendances principales
// ---------------------------------------------------------------------------
pub use anyhow;
pub use argon2;
pub use async_trait;
pub use axum;
pub use chrono;
pub use hmac;
pub use once_cell;
pub use regex;
pub use serde;
pub use serde_json;
pub use sha2;
pub use tera;
pub use tokio;
pub use tower;
pub use tower_http;
pub use tower_sessions;
pub use uuid;

#[cfg(feature = "orm")]
pub use sea_orm;

pub use derive_form::DeriveModelForm;

// ---------------------------------------------------------------------------
// Prelude simplifié
// ---------------------------------------------------------------------------
pub mod prelude {
    // ========================================================================
    // ERREURS
    // ========================================================================
    pub use crate::errors::ErrorContext;
    pub use crate::errors::RuniqueError;
    pub use tracing;
    // ========================================================================
    // MODULES PRINCIPAUX
    // ========================================================================
    pub use crate::app::{RuniqueApp, RuniqueAppBuilder};
    pub use crate::config::app::RuniqueConfig;
    pub use crate::context::{AppError, Request};
    pub use crate::engine::RuniqueEngine;
    pub use crate::flash::{FlashMessage, Message, MessageLevel};
    pub use crate::forms::{
        field::{FormField, RuniqueForm},
        fields::{
            boolean::BooleanField,
            choice::ChoiceField,
            datetime::DateTimeField,
            file::FileField,
            hidden::HiddenField,
            number::NumericField,
            special::{ColorField, JSONField, SlugField},
            text::TextField,
        },
        generic::{FieldKind, GenericField},
        manager::Forms,
        Prisme,
    };
    pub use crate::utils::aliases::*;
    pub use derive_form::DeriveModelForm;

    // ========================================================================
    // CONFIGURATION
    // ========================================================================
    pub use crate::config::{security::SecurityConfig, server::ServerConfig};

    // ========================================================================
    // UTILS
    // ========================================================================
    pub use crate::utils::csp_nonce::*;
    pub use crate::utils::csrf::*;

    // ========================================================================
    // CONTEXTE & TEMPLATE
    // ========================================================================
    // pub use crate::context::error::*;
    pub use crate::context::request::RuniqueContext;

    // ========================================================================
    // MIDDLEWARE
    // ========================================================================
    pub use crate::middleware::{
        allowed_hosts::*, auth::*, cache::*, config::*, csp::*, csrf::*, errors::*,
    };

    // ========================================================================
    // AXUM & HTTP
    // ========================================================================
    pub use axum::{
        extract::{Extension, Form, FromRequestParts, Path, Query, State},
        http::{HeaderMap, HeaderValue, Method, StatusCode},
        middleware,
        response::{Html, IntoResponse, Redirect, Response},
        routing::{any, delete, get, patch, post, put},
        Json, Router,
    };

    // ========================================================================
    // ORM (optionnel)
    // ========================================================================
    #[cfg(feature = "orm")]
    pub use crate::db::{DatabaseConfig, DatabaseConfigBuilder, DatabaseEngine};
    #[cfg(feature = "orm")]
    pub use sea_orm::{
        self, entity::prelude::*, ActiveModelBehavior, ActiveModelTrait, ColumnTrait,
        ConnectOptions, Database, DatabaseConnection, DbErr, EntityTrait, ModelTrait, NotSet,
        QueryFilter, QueryOrder, QuerySelect, Set,
    };

    // ========================================================================
    // SÉRIALISATION & DONNÉES
    // ========================================================================
    pub use serde::{Deserialize, Deserializer, Serialize, Serializer};
    pub use serde_json;

    // ========================================================================
    // TEMPLATE ENGINE
    // ========================================================================
    pub use tera::{Context, Tera};

    // ========================================================================
    // ASYNC & TOKIO
    // ========================================================================
    pub use async_trait::async_trait;
    pub use once_cell::sync::Lazy;
    pub use tokio;

    // ========================================================================
    // TYPES STANDARDS COURANTS
    // ========================================================================
    pub use std::collections::{HashMap, HashSet};
    pub use std::sync::Arc;

    // ========================================================================
    // SÉCURITÉ - HMAC, Hashing, etc.
    // ========================================================================
    pub use argon2::{
        password_hash::{rand_core::OsRng, SaltString},
        Argon2, PasswordHash, PasswordHasher, PasswordVerifier,
    };
    pub use hmac::{Hmac, Mac};
    pub use sha2::Sha256;

    // ========================================================================
    // SESSIONS & DATES
    // ========================================================================
    pub use anyhow::{Context as AnyhowContext, Error, Result};
    pub use chrono::{DateTime, NaiveDate, NaiveDateTime, Utc};
    pub use regex::Regex;
    pub use tower_sessions::{Session, SessionManagerLayer};
    pub use uuid::Uuid;

    // ========================================================================
    // Admin
    // ========================================================================
    pub use crate::admin::config::config_admin::AdminConfig;
    pub use crate::admin::daemon::{generate, parse_admin_file, watch};
    pub use crate::admin::registry::AdminRegistry;
    pub use crate::admin::resource::{
        AdminResource, ColumnFilter, CrudOperation, DisplayConfig, ResourcePermissions,
    };
    pub use crate::admin::router::{build_admin_router, AdminState};
}