Add Shell component wrapping the full HTML document (DOCTYPE, head, body)
required by leptos_meta. Add [package.metadata.leptos] to Cargo.toml and
switch get_configuration to Some("Cargo.toml"). Server now returns valid
HTML with title injection and WASM hydration scripts.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
87 lines
3.7 KiB
TOML
87 lines
3.7 KiB
TOML
[package]
|
|
name = "rust-ipam"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
|
|
# Leptos nécessite deux formats de compilation :
|
|
# - rlib : bibliothèque normale, utilisée par le serveur Axum
|
|
# - cdylib : bibliothèque dynamique compilée en WebAssembly pour le navigateur
|
|
[lib]
|
|
crate-type = ["cdylib", "rlib"]
|
|
|
|
# Les "features" permettent d'activer du code conditionnellement selon le contexte.
|
|
# On compile deux fois le même code : une fois en mode "ssr" (serveur), une fois "hydrate" (WASM).
|
|
[features]
|
|
# Mode serveur : active Axum, Tokio, et le rendu HTML côté serveur
|
|
ssr = [
|
|
"dep:axum",
|
|
"dep:tokio",
|
|
"dep:tower-http",
|
|
"dep:leptos_axum",
|
|
"dep:tracing-subscriber",
|
|
"leptos/ssr",
|
|
"leptos_meta/ssr",
|
|
"leptos_router/ssr",
|
|
]
|
|
# Mode client : compile l'application en WebAssembly pour le navigateur
|
|
# Note : seul `leptos` expose une feature "hydrate" ; leptos_meta et leptos_router
|
|
# n'en ont pas besoin — ils s'adaptent automatiquement au mode de compilation.
|
|
hydrate = [
|
|
"dep:console_error_panic_hook",
|
|
"dep:wasm-bindgen",
|
|
"leptos/hydrate",
|
|
]
|
|
|
|
[dependencies]
|
|
# --- Dépendances partagées (compilées côté serveur ET client) ---
|
|
|
|
# Framework UI réactif full-stack : le cœur du projet
|
|
leptos = { version = "0.7", features = [] }
|
|
# Gestion des balises HTML <head> (title, meta tags, liens CSS...)
|
|
leptos_meta = { version = "0.7", features = [] }
|
|
# Routeur : associe des URLs à des composants, côté serveur et client
|
|
leptos_router = { version = "0.7", features = [] }
|
|
|
|
# Dérive automatiquement des types d'erreurs idiomatiques Rust
|
|
thiserror = "1"
|
|
# Macros pour les logs : tracing::info!(), tracing::error!()...
|
|
tracing = "0.1"
|
|
|
|
# --- Dépendances serveur uniquement (activées par la feature "ssr") ---
|
|
|
|
# Serveur HTTP asynchrone rapide et ergonomique
|
|
axum = { version = "0.7", optional = true }
|
|
# Runtime asynchrone Rust (nécessaire pour `async fn main()` et les Futures)
|
|
tokio = { version = "1", features = ["full"], optional = true }
|
|
# Pont entre Leptos et Axum : SSR, server functions, streaming...
|
|
leptos_axum = { version = "0.7", optional = true }
|
|
# Middleware HTTP : sert les fichiers statiques (CSS, WASM compilé, images...)
|
|
tower-http = { version = "0.5", features = ["fs"], optional = true }
|
|
# Formateur de logs pour le terminal (affiche les messages tracing::info!...)
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"], optional = true }
|
|
|
|
# --- Dépendances client uniquement (activées par la feature "hydrate") ---
|
|
|
|
# Affiche les panics Rust dans la console du navigateur (indispensable pour déboguer)
|
|
console_error_panic_hook = { version = "0.1", optional = true }
|
|
# Pont entre Rust/WASM et JavaScript : permet d'appeler du JS depuis Rust
|
|
wasm-bindgen = { version = "0.2", optional = true }
|
|
|
|
# Configuration Leptos lue par get_configuration(Some("Cargo.toml"))
|
|
# Définit les chemins des fichiers compilés et l'adresse du serveur.
|
|
[package.metadata.leptos]
|
|
output-name = "rust-ipam" # Nom de base des fichiers .wasm et .js générés
|
|
site-root = "target/site" # Dossier racine des fichiers compilés par trunk
|
|
site-pkg-dir = "pkg" # Sous-dossier des assets WASM/JS dans site-root
|
|
site-addr = "127.0.0.1:3000" # Adresse d'écoute du serveur Axum
|
|
reload-port = 3001 # Port WebSocket pour le hot-reload en développement
|
|
|
|
# Profil de compilation WASM optimisé pour réduire la taille du fichier .wasm
|
|
# Un fichier WASM plus petit = page qui charge plus vite
|
|
[profile.wasm-release]
|
|
inherits = "release"
|
|
opt-level = "z" # Optimise pour la taille (z) plutôt que la vitesse (3)
|
|
lto = true # Link-Time Optimization : élimine le code mort entre crates
|
|
codegen-units = 1 # Un seul thread de codegen = meilleure optimisation globale
|
|
panic = "abort" # Pas de stack unwinding = binaire plus petit
|