samod_core/actors/document.rs
1//! Document actor implementation for managing automerge documents.
2//!
3//! Document actors are passive state machines that manage individual documents.
4//! They handle loading documents from storage, saving them when needed, and
5//! managing their lifecycle.
6//!
7//! ## Architecture
8//!
9//! - **State machines**: Actors process messages and return results
10//! - **Sans-IO**: All I/O operations are returned as tasks for the caller to execute
11//! - **Simple lifecycle**: Initialize → Load → Ready → Terminate
12//!
13//! ## Usage
14//!
15//! ```text
16//! // Create an actor
17//! let actor = DocumentActor::new(document_id);
18//!
19//! // Initialize it
20//! let result = actor.handle_message(now, SamodToActorMessage::Initialize)?;
21//!
22//! // Execute I/O tasks
23//! for io_task in result.io_tasks {
24//! let io_result = execute_io(io_task)?;
25//! actor.handle_io_complete(now, io_result)?;
26//! }
27//! ```
28
29mod doc_actor_result;
30pub mod document_actor;
31pub use doc_actor_result::DocActorResult;
32mod sync_message_stat;
33pub use sync_message_stat::{SyncDirection, SyncMessageStat};
34mod document_actor_id;
35mod document_status;
36pub(crate) use document_status::DocumentStatus;
37pub mod errors;
38pub mod io;
39mod load;
40mod on_disk_state;
41pub use on_disk_state::CompactionHash;
42mod peer_doc_connection;
43mod phase;
44mod spawn_args;
45mod with_doc_result;
46pub use with_doc_result::WithDocResult;
47
48// Internal modules for async runtime
49mod actor_input;
50mod doc_state;
51pub(crate) use actor_input::ActorInput;
52
53pub use document_actor::DocumentActor;
54pub use document_actor_id::DocumentActorId;
55pub use errors::DocumentError;
56pub use spawn_args::SpawnArgs;