Skip to main content

net_sdk/
cortex.rs

1//! CortEX + RedEX + NetDb surface.
2//!
3//! Re-exports of the core event-sourced storage layer so SDK users
4//! can open typed domain adapters (tasks, memories) without depending
5//! on the `net` crate directly.
6//!
7//! ## Entry points
8//!
9//! - [`Redex`] — storage manager. Create in-memory with [`Redex::new`]
10//!   or disk-backed with [`Redex::with_persistent_dir`].
11//! - [`NetDb`] — unified handle bundling the enabled model adapters
12//!   behind a single query facade. Build via [`NetDb::builder`].
13//! - [`TasksAdapter`] / [`MemoriesAdapter`] — typed adapters if you
14//!   only need one model and don't want the `NetDb` wrapper.
15//! - [`RedexFile`] — raw event-log primitive for domain-agnostic use.
16//!
17//! ## Example
18//!
19//! ```no_run
20//! use net_sdk::cortex::{NetDb, Redex};
21//!
22//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
23//! # tokio::runtime::Runtime::new()?.block_on(async {
24//! let redex = Redex::new();
25//! let db = NetDb::builder(redex)
26//!     .origin(0xABCD_EF01)
27//!     .with_tasks()
28//!     .with_memories()
29//!     .build()
30//!     .await?;
31//!
32//! // Drive the tasks adapter:
33//! let seq = db.tasks().create(1, "write docs", 0)?;
34//! db.tasks().wait_for_seq(seq).await;
35//!
36//! // Snapshot + watch for reactive UI:
37//! let watcher = db.tasks().watch();
38//! let (snapshot, _stream) = db.tasks().snapshot_and_watch(watcher);
39//! assert_eq!(snapshot.len(), 1);
40//! # Ok::<_, Box<dyn std::error::Error>>(())
41//! # })
42//! # }
43//! ```
44//!
45//! ## Persistence
46//!
47//! Disk-backed files need `Redex::with_persistent_dir`. Pair with
48//! `NetDbBuilder::persistent(true)` to route every enabled model's
49//! RedEX file through the disk segment:
50//!
51//! ```no_run
52//! # use net_sdk::cortex::{NetDb, Redex};
53//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
54//! # tokio::runtime::Runtime::new()?.block_on(async {
55//! let redex = Redex::new().with_persistent_dir("/var/lib/net/redex");
56//! let db = NetDb::builder(redex)
57//!     .origin(0xABCD_EF01)
58//!     .persistent(true)
59//!     .with_tasks()
60//!     .build()
61//!     .await?;
62//! # drop(db);
63//! # Ok::<_, Box<dyn std::error::Error>>(())
64//! # })
65//! # }
66//! ```
67
68// ---- Storage primitive (RedEX) ---------------------------------------------
69
70pub use ::net::adapter::net::redex::{
71    FsyncPolicy, OrderedAppender, Redex, RedexError, RedexEvent, RedexFile, RedexFileConfig,
72    TypedRedexFile,
73};
74
75// ---- CortEX domain adapters ------------------------------------------------
76
77pub use ::net::adapter::net::cortex::{
78    compute_checksum, CortexAdapterError, EventEnvelope, EventMeta, IntoRedexPayload,
79    EVENT_META_SIZE,
80};
81
82pub use ::net::adapter::net::cortex::tasks::{
83    Task, TaskId, TaskStatus, TasksAdapter, TasksFilter, TasksQuery, TasksState, TasksWatcher,
84    DISPATCH_TASK_COMPLETED, DISPATCH_TASK_CREATED, DISPATCH_TASK_DELETED, DISPATCH_TASK_RENAMED,
85    TASKS_CHANNEL,
86};
87
88/// Re-export of the tasks-module `OrderBy` enum. Aliased so the
89/// memories variant can coexist in this flat namespace.
90pub use ::net::adapter::net::cortex::tasks::OrderBy as TasksOrderBy;
91
92pub use ::net::adapter::net::cortex::memories::{
93    MemoriesAdapter, MemoriesFilter, MemoriesQuery, MemoriesState, MemoriesWatcher, Memory,
94    MemoryId, MEMORIES_CHANNEL,
95};
96
97pub use ::net::adapter::net::cortex::memories::OrderBy as MemoriesOrderBy;
98
99// ---- NetDb facade ----------------------------------------------------------
100
101pub use ::net::adapter::net::netdb::{NetDb, NetDbBuilder, NetDbError, NetDbSnapshot};