Skip to main content

runique/
lib.rs

1#![doc = include_str!("../README.md")]
2
3// ---------------------------------------------------------------------------
4// Modules principaux (arborescence actuelle)
5// ---------------------------------------------------------------------------
6pub mod app;
7pub mod config;
8pub mod context;
9#[cfg(feature = "orm")]
10pub mod db;
11pub mod engine;
12pub mod flash;
13pub mod forms;
14pub mod macros;
15pub mod migration;
16
17pub mod admin;
18pub mod errors;
19pub mod middleware;
20
21pub mod utils;
22
23// ---------------------------------------------------------------------------
24// Alias de compatibilité pour l’ancien nommage
25// ---------------------------------------------------------------------------
26pub mod config_runique {
27    pub mod composant_config {
28        pub mod security_struct {
29            pub use crate::config::security::*;
30        }
31        pub mod server_struct {
32            pub use crate::config::server::*;
33        }
34        pub mod settings_struct {
35            pub use crate::config::settings::*;
36        }
37        pub mod static_struct {
38            pub use crate::config::static_files::*;
39        }
40    }
41
42    pub mod config_struct {
43        pub use crate::config::app::RuniqueConfig;
44    }
45
46    pub use composant_config::*;
47    pub use config_struct::RuniqueConfig;
48}
49
50#[cfg(feature = "orm")]
51pub mod data_base_runique {
52    pub mod config {
53        pub use crate::db::config::*;
54    }
55
56    pub mod composant_data_base {
57        pub use crate::macros::bdd::{objects::*, query::*};
58    }
59
60    pub use config::*;
61}
62
63pub mod formulaire {
64    pub mod builder_form {
65        pub mod base_struct {
66            pub use crate::forms::base::*;
67        }
68        pub mod field_type {
69            pub use crate::forms::fields::*;
70        }
71        pub mod generique_field {
72            pub use crate::forms::generic::*;
73        }
74        pub mod formmanager {
75            pub use crate::forms::Forms;
76        }
77        pub mod option_field {
78            pub use crate::forms::options::*;
79        }
80        pub mod trait_form {
81            pub use crate::forms::field::*;
82        }
83        pub mod model_form {
84            pub use crate::forms::model_form::*;
85        }
86    }
87
88    pub mod utils {
89        pub use crate::utils::*;
90    }
91
92    pub use builder_form::*;
93    pub use utils::*;
94}
95
96pub mod middleware_runique {
97    pub mod middleware {
98        pub use crate::middleware::allowed_hosts::*;
99        pub use crate::middleware::auth::*;
100        pub use crate::middleware::cache::*;
101        pub use crate::middleware::config::*;
102        pub use crate::middleware::csp::*;
103        pub use crate::middleware::csrf::*;
104        pub use crate::middleware::errors::*;
105    }
106
107    pub use middleware::*;
108}
109
110pub mod macro_runique {
111    pub use crate::macros::*;
112    pub use crate::macros::{
113        context::{context_simplifier, flash},
114        forms::*,
115        routeur::*,
116    };
117}
118
119pub mod moteur_engine {
120    pub mod engine_struct {
121        pub use crate::engine::core::*;
122    }
123
124    pub use engine_struct::*;
125}
126
127pub mod runique_start {
128    pub mod composant_app {
129        pub mod template_engine {
130            pub use crate::app::templates::*;
131        }
132    }
133
134    pub use crate::app::*;
135}
136pub use forms::Prisme;
137// ---------------------------------------------------------------------------
138// Ré-export des dépendances principales
139// ---------------------------------------------------------------------------
140pub use anyhow;
141pub use argon2;
142pub use async_trait;
143pub use axum;
144pub use chrono;
145pub use hmac;
146pub use once_cell;
147pub use regex;
148#[cfg(feature = "orm")]
149pub use sea_orm;
150pub use serde;
151pub use serde_json;
152pub use sha2;
153pub use tera;
154pub use tokio;
155pub use tower;
156pub use tower_http;
157pub use tower_sessions;
158pub use uuid;
159
160pub use derive_form::model;
161
162// ---------------------------------------------------------------------------
163// Prelude simplifié
164// ---------------------------------------------------------------------------
165pub mod prelude {
166    // ========================================================================
167    // ERREURS
168    // ========================================================================
169    pub use crate::errors::ErrorContext;
170    pub use crate::errors::RuniqueError;
171    pub use tracing;
172    // ========================================================================
173    // MODULES PRINCIPAUX
174    // ========================================================================
175    pub use crate::app::{RuniqueApp, RuniqueAppBuilder};
176    pub use crate::config::app::RuniqueConfig;
177    pub use crate::context::{AppError, Request};
178    pub use crate::engine::RuniqueEngine;
179    pub use crate::flash::{FlashMessage, Message, MessageLevel};
180    pub use crate::forms::{
181        field::{FormField, RuniqueForm},
182        fields::{
183            boolean::BooleanField,
184            choice::{ChoiceField, ChoiceOption},
185            datetime::DateTimeField,
186            file::FileField,
187            hidden::HiddenField,
188            number::NumericField,
189            special::{ColorField, IPAddressField, JSONField, SlugField, UUIDField},
190            text::TextField,
191            CheckboxField, DateField, DurationField, RadioField, TimeField,
192        },
193        generic::{FieldKind, GenericField},
194        model_form::ModelForm,
195        Forms, Prisme,
196    };
197    pub use crate::migration::schema::ModelSchema;
198    pub use crate::utils::aliases::*;
199    pub use derive_form::{form, model};
200
201    // ========================================================================
202    // CONFIGURATION
203    // ========================================================================
204    use crate::chrono;
205    pub use crate::config::{security::SecurityConfig, server::ServerConfig};
206
207    // ========================================================================
208    // UTILS
209    // ========================================================================
210    pub use crate::utils::csp_nonce::*;
211    pub use crate::utils::csrf::*;
212
213    // ========================================================================
214    // CONTEXTE & TEMPLATE
215    // ========================================================================
216    // pub use crate::context::error::*;
217    pub use crate::context::request::RuniqueContext;
218
219    // ========================================================================
220    // MIDDLEWARE
221    // ========================================================================
222    pub use crate::middleware::{
223        allowed_hosts::*, auth::*, cache::*, config::*, csp::*, csrf::*, errors::*,
224    };
225
226    // ========================================================================
227    // AXUM & HTTP
228    // ========================================================================
229    pub use axum::{
230        extract::{Extension, Form, FromRequestParts, Path, Query, State},
231        http::{HeaderMap, HeaderValue, Method, StatusCode},
232        middleware,
233        response::{Html, IntoResponse, Redirect, Response},
234        routing::{any, delete, get, patch, post, put},
235        Json, Router,
236    };
237
238    // ========================================================================
239    // ORM (optionnel)
240    // ========================================================================
241    // pub use crate::migration::user_runique;
242    #[cfg(feature = "orm")]
243    pub use crate::db::{DatabaseConfig, DatabaseConfigBuilder, DatabaseEngine};
244    #[cfg(feature = "orm")]
245    pub use sea_orm::{
246        self, entity::prelude::*, ActiveModelBehavior, ActiveModelTrait, ColumnTrait,
247        ConnectOptions, Database, DatabaseConnection, DbErr, EntityTrait, ModelTrait, NotSet,
248        QueryFilter, QueryOrder, QuerySelect, Set,
249    };
250    pub use sea_orm_migration::sea_query;
251
252    // ========================================================================
253    // SÉRIALISATION & DONNÉES
254    // ========================================================================
255    pub use serde::{Deserialize, Deserializer, Serialize, Serializer};
256    pub use serde_json;
257
258    // ========================================================================
259    // TEMPLATE ENGINE
260    // ========================================================================
261    pub use tera::{Context, Tera};
262
263    // ========================================================================
264    // ASYNC & TOKIO
265    // ========================================================================
266    pub use async_trait::async_trait;
267    pub use once_cell::sync::Lazy;
268    pub use tokio;
269
270    // ========================================================================
271    // TYPES STANDARDS COURANTS
272    // ========================================================================
273    pub use std::collections::{HashMap, HashSet};
274    pub use std::sync::Arc;
275
276    // ========================================================================
277    // SÉCURITÉ - HMAC, Hashing, etc.
278    // ========================================================================
279    pub use crate::utils::password::{
280        hash, password_init, verify, AutoConfig, Manual, PasswordConfig,
281    };
282    pub use hmac::{Hmac, Mac};
283    pub use sha2::Sha256;
284
285    // ========================================================================
286    // SESSIONS & DATES
287    // ========================================================================
288    pub use anyhow::{Context as AnyhowContext, Error, Result};
289    pub use chrono::{DateTime, NaiveDate, NaiveDateTime, Utc};
290    pub use regex::Regex;
291    pub use tower_sessions::{Session, SessionManagerLayer};
292    pub use uuid::Uuid;
293
294    // ========================================================================
295    // Admin
296    // ========================================================================
297    pub use crate::admin::config::config_admin::AdminConfig;
298    pub use crate::admin::daemon::{generate, parse_admin_file, watch};
299    pub use crate::admin::registry::AdminRegistry;
300    pub use crate::admin::resource::{
301        AdminResource, ColumnFilter, CrudOperation, DisplayConfig, ResourcePermissions,
302    };
303    pub use crate::admin::router::{build_admin_router, AdminState};
304    pub use axum::http::method::*;
305}