restflow_core/storage/
mod.rs1pub mod agent;
2pub mod config;
3pub mod execution_history;
4pub mod secrets;
5pub mod task_queue;
6pub mod trigger;
7pub mod workflow;
8
9use anyhow::Result;
10use redb::Database;
11use std::sync::Arc;
12
13pub use agent::AgentStorage;
14pub use config::{ConfigStorage, SystemConfig};
15pub use execution_history::ExecutionHistoryStorage;
16pub use secrets::SecretStorage;
17pub use task_queue::TaskQueue;
18pub use trigger::TriggerStorage;
19pub use workflow::WorkflowStorage;
20
21pub struct Storage {
22 db: Arc<Database>,
23 pub workflows: WorkflowStorage,
24 pub queue: TaskQueue,
25 pub config: ConfigStorage,
26 pub triggers: TriggerStorage,
27 pub agents: AgentStorage,
28 pub secrets: SecretStorage,
29 pub execution_history: ExecutionHistoryStorage,
30}
31
32impl Storage {
33 pub fn new(path: &str) -> Result<Self> {
34 let db = Arc::new(Database::create(path)?);
35
36 let workflows = WorkflowStorage::new(db.clone())?;
37 let queue = TaskQueue::new(db.clone())?;
38 let config = ConfigStorage::new(db.clone())?;
39 let triggers = TriggerStorage::new(db.clone())?;
40 let agents = AgentStorage::new(db.clone())?;
41 let secrets = SecretStorage::new(db.clone())?;
42 let execution_history = ExecutionHistoryStorage::new(db.clone())?;
43
44 Ok(Self {
45 db,
46 workflows,
47 queue,
48 config,
49 triggers,
50 agents,
51 secrets,
52 execution_history,
53 })
54 }
55
56 pub fn get_db(&self) -> Arc<Database> {
57 self.db.clone()
58 }
59}