--- name: Patterns Rust observés dans TougliGui description: Conventions de code Rust/Tauri utilisées dans le projet (state, erreurs, SQL, modules) type: project --- ## State Tauri `DbState(pub Mutex)` dans `commands.rs` — une seule connexion SQLite partagée via Mutex. ## Propagation d'erreurs Les commandes Tauri retournent `Result` : `.map_err(|e| e.to_string())`. Pas de type d'erreur custom. ## Paramètres SQL positionnels rusqlite utilise `?1`, `?2`... (positionnels nommés) et non `?` (positionnels ordinals). Les fonctions `get_cached_previews` et `get_cached_urls` construisent dynamiquement les placeholders avec `format!("?{}", i)` pour les `IN (...)` variadic. ## Sérialisation JSON en DB `quest_previews.indicators_json` stocke un `Vec` sérialisé via `serde_json`. Désérialisé au retour avec `serde_json::from_str`. ## Structure CombatIndicator (parser.rs) ```rust pub struct CombatIndicator { pub combat_type: String, pub count: String, #[serde(default)] pub label: Option, #[serde(default)] pub evitable: bool, } ``` ## Pattern tests unitaires DB ```rust fn test_db() -> Connection { let conn = Connection::open_in_memory().unwrap(); crate::db::migrate(&conn).unwrap(); conn } ``` Chaque test crée sa propre DB in-memory → isolation totale, pas de cleanup nécessaire. **Why:** Conventions observées directement dans le code source. **How to apply:** Respecter ces patterns dans tous les ajouts futurs pour maintenir la cohérence.