Architecture d'un projet Runique

Macros Rust

Runique fournit un ensemble de macros pour simplifier le développement.

Macros de contexte

MacroDescriptionExemple
context!Créer un contexte Teracontext!("title" => "Page")
context_update!Ajouter au contexte d'une Requestcontext_update!(request => { "key" => value })

Macros flash messages

MacroDescriptionExemple
success!Message de succès (session)success!(request.notices => "OK !")
error!Message d'erreur (session)error!(request.notices => "Erreur")
info!Message info (session)info!(request.notices => "Info")
warning!Avertissement (session)warning!(request.notices => "Attention")
flash_now!Message immédiat (sans session)flash_now!(error => "Erreurs")

Macros de routage

MacroDescriptionExemple
urlpatterns!Définir des routes avec nomsurlpatterns!("/" => view!{...}, name = "index")
view!Handler pour toutes méthodes HTTPview!{ handler }
impl_objects!Manager Django-like pour SeaORMimpl_objects!(Entity)

Macros d'erreur

MacroDescription
impl_from_error!Génère From<Error> pour AppError

En situation

Les macros se combinent dans un handler typique :

use runique::prelude::*;

pub async fn contact(mut request: Request) -> AppResult<Response> {
    let mut form: ContactForm = request.form();

    if request.is_post() && form.is_valid().await {
        // Flash en session + redirection (pattern Post/Redirect/Get)
        success!(request.notices => "Message envoyé !");
        return Ok(Redirect::to("/contact").into_response());
    }

    // Ajoute des variables au contexte de la requête
    context_update!(request => {
        "title" => "Contact",
        "contact_form" => &form,
    });
    request.render("contact.html")
}

success! / error! / info! / warning! écrivent en session (visibles après redirection). flash_now! produit un message immédiat sans session — utile quand on réaffiche la même page sans rediriger.