Skip to main content

mneme/sync/
protocol.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3use uuid::Uuid;
4
5/// Mensaje de saludo inicial en sync.
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct SyncHello {
8    pub peer_id: Uuid,
9    pub peer_name: String,
10    pub project: String,
11    pub mneme_version: String,
12    pub memory_count: u32,
13    pub heads: HashMap<String, Vec<String>>,
14}
15
16/// Solicitud de sync.
17#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct SyncRequest {
19    pub project: String,
20    pub have: HashMap<String, Vec<String>>,
21}
22
23/// Respuesta de sync.
24#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct SyncResponse {
26    pub project: String,
27    pub changes: Vec<MemoryChangeset>,
28    pub tombstones: Vec<String>,
29}
30
31/// Cambio individual de una memoria.
32#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct MemoryChangeset {
34    pub automerge_id: String,
35    pub payload: Vec<u8>,
36    pub is_full_doc: bool,
37}
38
39/// Resultado de una operacion de sync.
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct SyncResult {
42    pub peer_name: String,
43    pub direction: SyncDirection,
44    pub memories_sent: u32,
45    pub memories_received: u32,
46    pub conflicts_resolved: u32,
47    pub duration_ms: u64,
48    pub status: SyncStatus,
49    pub error: Option<String>,
50}
51
52/// Direccion del sync.
53#[derive(Debug, Clone, Serialize, Deserialize)]
54#[serde(rename_all = "lowercase")]
55pub enum SyncDirection {
56    Push,
57    Pull,
58    Bidirectional,
59}
60
61/// Estado del sync.
62#[derive(Debug, Clone, Serialize, Deserialize)]
63#[serde(rename_all = "lowercase")]
64pub enum SyncStatus {
65    Ok,
66    Error,
67    Partial,
68}
69
70/// Estadisticas de aplicacion de cambios.
71#[derive(Debug, Clone, Default)]
72pub struct ApplyStats {
73    pub memories_applied: u32,
74    pub conflicts_resolved: u32,
75}
76
77/// Estadisticas de exportacion.
78#[derive(Debug, Clone, Default)]
79pub struct ExportStats {
80    pub memories_exported: u32,
81    pub bytes_written: u64,
82}