1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
// Copyright 2025 The Drasi Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//! # drasi-lib
//!
//! Embedded library for running Drasi continuous queries with sources, queries, and reactions.
//!
//! ## Error Handling
//!
//! All public API methods return [`error::Result<T>`], which uses [`DrasiError`] —
//! a structured enum that supports pattern matching on failure modes.
//!
//! Internal modules and plugin trait implementations use `anyhow::Result` for flexibility.
//! The [`DrasiError::Internal`] variant (with `#[from] anyhow::Error`) auto-converts
//! internal errors at the public API boundary via `?`.
//!
//! See the [`error`] module documentation for the full error handling architecture.
// ============================================================================
// Core Public Modules
// ============================================================================
/// Component dependency graph — the single source of truth for configuration
/// Fluent builders for DrasiLib and components
/// Runtime context types for plugin service injection
/// State store provider for persistent plugin state
/// Error types for drasi-lib
/// Identity providers for authentication credentials
/// Recovery policy and error types for checkpoint-based recovery
// ============================================================================
// Internal Modules (crate-private, but visible to integration tests)
// ============================================================================
// These modules are internal but need to be accessible to integration tests
// that test platform-specific components
// Sub-modules for lib_core operations (split for maintainability)
// Config module needs to be public for configuration types
// Indexes module for storage backend configuration
// Profiling module for performance monitoring
pub
// ============================================================================
// Clean Public API - Everything Users Need
// ============================================================================
/// Main server type - use `DrasiLib::builder()` to create instances
///
/// # Examples
///
/// ```no_run
/// use drasi_lib::DrasiLib;
///
/// # async fn example() -> Result<(), Box<dyn std::error::Error>> {
/// let core = DrasiLib::builder()
/// .with_id("my-server")
/// .build()
/// .await?;
/// core.start().await?;
/// # Ok(())
/// # }
/// ```
pub use DrasiLib;
/// Error types for drasi-lib
pub use ;
/// Recovery policy and error types for checkpoint-based recovery
pub use ;
/// Component status type for monitoring component states
pub use ComponentStatus;
/// Component event for tracking lifecycle changes
pub use ;
/// Subscription response for source subscriptions
pub use SubscriptionResponse;
/// Dispatch mode for configuring event routing (Broadcast or Channel)
pub use DispatchMode;
/// Log level and log message types for component log streaming
pub use ;
/// Tracing initialization function - call to set up component log routing
pub use get_or_init_global_registry;
/// Deprecated tracing initialization functions — use `get_or_init_global_registry()` instead.
pub use ;
// ============================================================================
// Configuration Types
// ============================================================================
pub use QuerySnapshot;
/// Configuration types
pub use ;
/// Storage backend configuration types
pub use ;
// ============================================================================
// Plugin Traits (for plugin development)
// ============================================================================
/// Source trait for implementing source plugins
pub use Source;
/// Structured error type for source operations (e.g., replay position unavailable)
pub use SourceError;
/// Reaction traits for implementing reaction plugins
pub use Reaction;
/// Bootstrap provider trait for implementing bootstrap plugins
pub use BootstrapProvider;
/// Bootstrap provider that generates data from the component graph
pub use ComponentGraphBootstrapProvider;
/// Index backend plugin trait for implementing storage backends
pub use IndexBackendPlugin;
/// State store provider traits and default implementation
pub use ;
/// Runtime context types for plugin initialization
pub use ;
/// Base implementations for reaction plugins
pub use ;
/// Base implementations for source plugins
pub use ;
// ============================================================================
// Builder Types (for fluent configuration)
// ============================================================================
/// Fluent builder for DrasiLib instances
pub use DrasiLibBuilder;
/// Fluent builder for query configurations
pub use Query;
/// Async helper to wait for a component to reach a target status without polling.
pub use wait_for_status;
/// Component graph types for dependency tracking and configuration queries
pub use ;
// ============================================================================
// API Module (backward compatibility alias)
// ============================================================================
/// Re-export builders as `api` module for backward compatibility with tests.
/// This allows `use crate::api::{Query};` to work.