1.5 KiB
name, description, type
| name | description | type |
|---|---|---|
| Patterns Rust observés dans TougliGui | Conventions de code Rust/Tauri utilisées dans le projet (state, erreurs, SQL, modules) | project |
State Tauri
DbState(pub Mutex<Connection>) dans commands.rs — une seule connexion SQLite partagée via Mutex.
Propagation d'erreurs
Les commandes Tauri retournent Result<T, String> : .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<CombatIndicator> sérialisé via serde_json. Désérialisé au retour avec serde_json::from_str.
Structure CombatIndicator (parser.rs)
pub struct CombatIndicator {
pub combat_type: String,
pub count: String,
#[serde(default)] pub label: Option<String>,
#[serde(default)] pub evitable: bool,
}
Pattern tests unitaires DB
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.