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 document_actor_id;
33mod document_status;
34pub(crate) use document_status::DocumentStatus;
35pub mod errors;
36pub mod io;
37mod load;
38mod on_disk_state;
39pub use on_disk_state::CompactionHash;
40mod peer_doc_connection;
41mod ready;
42mod request;
43mod spawn_args;
44mod with_doc_result;
45pub use with_doc_result::WithDocResult;
46
47// Internal modules for async runtime
48mod actor_input;
49mod doc_state;
50pub(crate) use actor_input::ActorInput;
51
52pub use document_actor::DocumentActor;
53pub use document_actor_id::DocumentActorId;
54pub use errors::DocumentError;
55pub use spawn_args::SpawnArgs;