Files
rust-ipam/Cargo.toml
mathieu efad573c3b 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>
2026-05-15 19:16:35 +02:00

78 lines
3.2 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 }
# 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