1pub mod data;
2mod db;
3mod query;
4
5#[allow(clippy::module_inception)]
6mod store;
7
8#[cfg(test)]
9mod tests;
10
11use data::*;
12pub use query::*;
13use serde::{Deserialize, Serialize};
14#[allow(unused_imports)]
15pub use store::{Store, StoreKind};
16
17use crate::{ActError, Result};
18use std::{error::Error, sync::Arc};
19
20fn map_db_err(err: impl Error) -> ActError {
21 ActError::Store(err.to_string())
22}
23
24#[derive(Debug, Deserialize, Serialize)]
25pub struct PageData<T> {
26 pub count: usize,
27 pub page_num: usize,
28 pub page_count: usize,
29 pub page_size: usize,
30 pub rows: Vec<T>,
31}
32
33pub trait DbSet: Send + Sync {
34 type Item;
35 fn exists(&self, id: &str) -> Result<bool>;
36 fn find(&self, id: &str) -> Result<Self::Item>;
37 fn query(&self, query: &Query) -> Result<PageData<Self::Item>>;
38 fn create(&self, data: &Self::Item) -> Result<bool>;
39 fn update(&self, data: &Self::Item) -> Result<bool>;
40 fn delete(&self, id: &str) -> Result<bool>;
41}
42
43pub trait StoreAdapter: Send + Sync {
73 fn init(&self);
74
75 fn models(&self) -> Arc<dyn DbSet<Item = Model>>;
76 fn procs(&self) -> Arc<dyn DbSet<Item = Proc>>;
77 fn tasks(&self) -> Arc<dyn DbSet<Item = Task>>;
78 fn packages(&self) -> Arc<dyn DbSet<Item = Package>>;
79 fn messages(&self) -> Arc<dyn DbSet<Item = Message>>;
80 fn close(&self);
81}