Architecture
Pipeline
Les donnees circulent dans une seule direction a travers un pipeline fixe :
Chaque etape a une responsabilite unique. Rien ne circule en sens inverse.
GridState
GridState est la structure centrale. Elle contient trois sous-etats :
Toutes les mutations passent par GridState::apply(GridCommand). La mutation
directe des champs n'est pas exposee. Cela rend l'etat facile a capturer et
a rejouer.
Commandes
GridCommand est un enum de toutes les mutations possibles :
Les commandes sont peu couteuses a construire et peuvent etre mises en file
d'attente. Le renderer appelle apply une fois par frame d'animation avec
les commandes en attente.
SceneFrame
SceneBuilder::build(&grid_state) retourne un SceneFrame — une liste
plate de valeurs ScenePrimitive qui decrivent exactement ce qui doit
apparaitre a l'ecran :
Rect— rectangle rempli (fond de cellule, surbrillance de selection)Text— libelle de cellule avec police, couleur et limites de decoupageLine— ligne de bordure de la grille
La scene est agnostique du renderer. Vous pouvez implementer un nouveau
backend (WebGL, SVG, terminal) en consommant SceneFrame sans toucher
au core.
Graphe de dependances des crates
Ajouter un renderer
-
Creer un nouveau crate
Ajoutez
rs-grid-scenecomme dependance. -
Consommer SceneFrame
Appelez
SceneBuilder::build(&grid_state)pour obtenir unSceneFrame, puis iterez surSceneFrame::primitives. -
Emettre les appels de dessin
Mappez chaque
ScenePrimitive(Rect, Text, Line) vers l'API de votre backend.
Ne modifiez pas rs-grid-core ni rs-grid-scene lors de l'ajout d'un
renderer. Ces crates doivent rester libres de WASM et testables avec un
simple cargo test.