feat(scaffold): add Axum + Leptos SSR base structure
Sets up the full project skeleton: Cargo.toml with ssr/hydrate features, Axum server entry point, shared Leptos lib, root App component with router, server/client module split, and Trunk config for WASM build. Both `cargo check --features ssr` and `cargo check --features hydrate --target wasm32-unknown-unknown` pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
40
src/lib.rs
Normal file
40
src/lib.rs
Normal file
@@ -0,0 +1,40 @@
|
||||
// lib.rs — Racine de la bibliothèque partagée
|
||||
//
|
||||
// Ce fichier est compilé dans les DEUX modes :
|
||||
// "ssr" → le serveur Axum l'utilise pour rendre du HTML
|
||||
// "hydrate" → trunk le compile en WebAssembly pour le navigateur
|
||||
//
|
||||
// C'est ce partage de code qui rend Leptos "full-stack" :
|
||||
// on écrit les composants une fois, ils s'exécutent des deux côtés.
|
||||
|
||||
// Déclaration des sous-modules de cette bibliothèque.
|
||||
// `pub` les rend accessibles depuis main.rs et d'autres crates.
|
||||
pub mod app; // Composant racine App() et configuration du routeur
|
||||
pub mod client; // Pages et composants de l'interface utilisateur
|
||||
pub mod server; // Handlers HTTP et logique métier côté serveur
|
||||
|
||||
// Point d'entrée WebAssembly — exécuté par le navigateur au chargement du bundle .wasm
|
||||
//
|
||||
// `#[cfg(feature = "hydrate")]` : ce code n'existe que dans le bundle WASM.
|
||||
// `#[wasm_bindgen(start)]` : demande à wasm-bindgen d'appeler cette fonction
|
||||
// automatiquement sans intervention JavaScript.
|
||||
#[cfg(feature = "hydrate")]
|
||||
#[wasm_bindgen::prelude::wasm_bindgen(start)]
|
||||
pub fn hydrate() {
|
||||
use crate::app::App;
|
||||
|
||||
// Active les messages d'erreur Rust dans la console du navigateur.
|
||||
// Sans ça, un panic Rust en WASM affiche juste "unreachable executed" — inutile.
|
||||
// `set_once()` garantit qu'on ne l'initialise pas plusieurs fois si hydrate() est appelé plusieurs fois.
|
||||
console_error_panic_hook::set_once();
|
||||
|
||||
// Monte l'application Leptos dans le <body> de la page HTML.
|
||||
//
|
||||
// En mode "hydration" (SSR + WASM), Leptos ne recrée pas le DOM depuis zéro.
|
||||
// Il trouve le HTML déjà rendu par le serveur et y attache les event listeners
|
||||
// pour rendre l'interface interactive. C'est plus rapide qu'un SPA classique
|
||||
// qui construit tout le DOM côté client.
|
||||
//
|
||||
// `hydrate_body` (Leptos 0.7) = mode SSR + hydration (≠ `mount_to_body` qui repart de zéro)
|
||||
leptos::mount::hydrate_body(App);
|
||||
}
|
||||
Reference in New Issue
Block a user