1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3use uuid::Uuid;
4
5#[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#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct SyncRequest {
19 pub project: String,
20 pub have: HashMap<String, Vec<String>>,
21}
22
23#[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#[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#[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#[derive(Debug, Clone, Serialize, Deserialize)]
54#[serde(rename_all = "lowercase")]
55pub enum SyncDirection {
56 Push,
57 Pull,
58 Bidirectional,
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize)]
63#[serde(rename_all = "lowercase")]
64pub enum SyncStatus {
65 Ok,
66 Error,
67 Partial,
68}
69
70#[derive(Debug, Clone, Default)]
72pub struct ApplyStats {
73 pub memories_applied: u32,
74 pub conflicts_resolved: u32,
75}
76
77#[derive(Debug, Clone, Default)]
79pub struct ExportStats {
80 pub memories_exported: u32,
81 pub bytes_written: u64,
82}