Files
TougliGui/src-tauri/.claude/agent-memory/tauri-rust-architect/project_rust_patterns.md

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.