Skip to main content

braid_core/fs/
state.rs

1use super::{debouncer::DebouncedSyncManager, ActivityTracker, PendingWrites};
2use crate::core::merge::{MergeType, MergeTypeRegistry};
3use crate::core::BraidClient;
4use crate::fs::binary_sync::BinarySyncManager;
5use crate::fs::config::Config;
6use crate::fs::versions::VersionStore;
7use parking_lot::Mutex as PMutex;
8use rusqlite::Connection;
9use std::collections::HashMap;
10use std::sync::Arc;
11use tokio::sync::RwLock;
12
13#[derive(Debug, Clone)]
14pub enum Command {
15    Sync {
16        url: String,
17    },
18    Unsync {
19        url: String,
20    },
21    SetCookie {
22        domain: String,
23        value: String,
24    },
25    SetIdentity {
26        domain: String,
27        email: String,
28    },
29    #[cfg(feature = "nfs")]
30    Mount {
31        port: u16,
32        mount_point: Option<String>,
33    },
34    #[cfg(feature = "nfs")]
35    Unmount,
36}
37
38/// Unified state for the BraidFS daemon.
39#[derive(Clone)]
40pub struct DaemonState {
41    pub config: Arc<RwLock<Config>>,
42    pub content_cache: Arc<RwLock<HashMap<String, String>>>,
43    pub version_store: Arc<RwLock<VersionStore>>,
44    pub tracker: ActivityTracker,
45    pub merge_registry: Arc<MergeTypeRegistry>,
46    pub active_merges: Arc<RwLock<HashMap<String, Box<dyn MergeType>>>>,
47    pub pending: PendingWrites,
48    pub client: BraidClient,
49    pub failed_syncs: Arc<RwLock<HashMap<String, (u16, std::time::Instant)>>>,
50    pub binary_sync: Arc<BinarySyncManager>,
51    pub inode_db: Arc<PMutex<Connection>>,
52    pub tx_cmd: async_channel::Sender<Command>,
53    pub debouncer: Arc<DebouncedSyncManager>,
54}