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:
2026-05-15 19:16:35 +02:00
parent 11b0f60892
commit efad573c3b
11 changed files with 3128 additions and 3 deletions

40
src/lib.rs Normal file
View 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);
}