restflow_core/storage/
mod.rs

1pub 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}