braid_core/core/server/mod.rs
1//! Braid HTTP server implementation.
2//!
3//! This module provides server-side support for the Braid protocol using Axum.
4//! It enables applications to:
5//!
6//! - **Track resource versions** as a directed acyclic graph (DAG)
7//! - **Send updates** as snapshots or patches
8//! - **Stream subscription updates** to clients (HTTP 209)
9//! - **Handle version conflicts** with merge strategies
10//! - **Manage resource state** with CRDT support
11//!
12//! # Module Organization
13//!
14//! ```text
15//! server/
16//! ├── middleware - BraidLayer and BraidState extractor
17//! ├── send_update - SendUpdateExt trait for responses
18//! ├── parse_update - ParseUpdateExt trait for requests
19//! ├── config - ServerConfig options
20//! ├── resource_state - ResourceStateManager for CRDT state
21//! └── conflict_resolver - ConflictResolver for merging
22//! ```
23
24mod config;
25mod middleware;
26mod parse_update;
27mod send_update;
28pub mod utils;
29
30pub mod conflict_resolver;
31pub mod multiplex;
32pub mod resource_state;
33pub mod subscription;
34
35#[cfg(test)]
36mod tests;
37
38pub use braid_http::types::UpdateResponse;
39pub use config::ServerConfig;
40pub use conflict_resolver::ConflictResolver;
41pub use middleware::{BraidLayer, BraidState, IsFirefox};
42pub use parse_update::ParseUpdateExt;
43pub use resource_state::ResourceStateManager;
44pub use send_update::SendUpdateExt;
45
46use crate::core::Update;
47use std::sync::Arc;
48use tokio::sync::broadcast;
49
50/// Broadcast channel for sending updates to multiple subscribers.
51pub type UpdateBroadcast = broadcast::Sender<Arc<Update>>;