Introduces a global design system using CSS custom properties as design tokens. Light and dark themes are defined via [data-theme] attribute on <html>; the system preference (prefers-color-scheme) is the default when no explicit choice is stored. ThemeToggle component (Auto → Light → Dark cycle) persists the choice to localStorage and applies it on hydration without flash. New themes can be added by defining a [data-theme="name"] CSS block and adding a variant to ThemeChoice. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
103 lines
4.7 KiB
TOML
103 lines
4.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",
|
|
"dep:dotenvy",
|
|
"dep:ipnetwork",
|
|
"dep:sqlx",
|
|
"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",
|
|
"dep:web-sys",
|
|
"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"
|
|
# Sérialisation/désérialisation — nécessaire pour les server functions Leptos
|
|
# (les types de retour doivent traverser la frontière server ↔ client)
|
|
serde = { version = "1", features = ["derive"] }
|
|
|
|
# --- 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 }
|
|
# Charge automatiquement le fichier .env au démarrage du serveur
|
|
dotenvy = { version = "0.15", optional = true }
|
|
# Parsing et calcul de plages d'adresses IP (CIDR) — ex: 192.168.1.0/24
|
|
ipnetwork = { version = "0.20", optional = true }
|
|
# Database access: connection pools, queries, migrations — SQLite + PostgreSQL
|
|
# "any" = runtime-dispatched driver (same code works with both backends)
|
|
sqlx = { version = "0.8", features = ["runtime-tokio", "tls-rustls", "sqlite", "postgres", "migrate", "any"], 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 }
|
|
# Bindings aux APIs du navigateur : window, document, localStorage, Element...
|
|
web-sys = { version = "0.3", features = ["Window", "Document", "Element", "Storage"], 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
|