[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 (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