tawasuyu

tawasuyu/hifas

Motor en Rust para decidir, con demostración y no a ojo, cuándo un conjunto de réplicas local-first puede operar sin coordinación y cuándo no — y, cuando la respuesta es "sí, dentro de límites", proveer el mecanismo que lo garantiza.

Rust 24Markdown 15TOML 1358 Definitions

⎇ dbd6875b002d449ae0cc222ffbe91b6e2848f59d src/nerve.rs Rust · 34 lines · 1.0 KB History Who touched what raw

M0/T0: scaffold del crate sheafsync 6595dbed8 · Sergio ·

1//! `nerve` — el grafo de qué réplicas comparten datos con cuáles (§6.2).
2//!
3//! Vértices = réplicas, aristas = pares que comparten un dato.
4
5use petgraph::graph::UnGraph;
6
7/// Identificador de una réplica (vértice del nervio).
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
9pub struct ReplicaId(pub usize);
10
11/// Qué coordenadas del estado se comparten en una arista.
12///
13/// M0: forma únicamente; el detalle de la proyección se fija en `sheaf` (T1/T2).
14#[derive(Debug, Clone, Default, PartialEq)]
15pub struct SharedLink {
16    /// Índices de las coordenadas compartidas en esta arista.
17    pub shared_coords: Vec<usize>,
18}
19
20/// El nervio: grafo no dirigido de réplicas y sus enlaces compartidos.
21#[derive(Debug, Default)]
22pub struct Nerve {
23    /// Grafo no dirigido: vértices = réplicas, aristas = pares que comparten datos.
24    pub graph: UnGraph<ReplicaId, SharedLink>,
25}
26
27impl Nerve {
28    /// Nervio vacío.
29    pub fn new() -> Self {
30        Self {
31            graph: UnGraph::new_undirected(),
32        }
33    }
34}