1pub mod data;
2mod db;
3pub mod query;
4
5#[allow(clippy::module_inception)]
6mod store;
7
8#[cfg(test)]
9mod tests;
10
11use data::*;
12use serde::{Deserialize, Serialize};
13#[allow(unused_imports)]
14pub use store::Store;
15
16use crate::{ActError, Result};
17use query::*;
18use std::error::Error;
19use strum::{AsRefStr, EnumIter};
20
21fn map_db_err(err: impl Error) -> ActError {
22 ActError::Store(err.to_string())
23}
24
25#[derive(Debug, Clone, AsRefStr, PartialEq, Hash, Eq, EnumIter)]
26pub enum StoreIden {
27 #[strum(serialize = "packages")]
28 Packages,
29 #[strum(serialize = "models")]
30 Models,
31 #[strum(serialize = "procs")]
32 Procs,
33 #[strum(serialize = "tasks")]
34 Tasks,
35 #[strum(serialize = "messages")]
36 Messages,
37 #[strum(serialize = "events")]
38 Events,
39}
40
41#[derive(Debug, Deserialize, Serialize)]
42pub struct PageData<T> {
43 pub count: usize,
44 pub page_num: usize,
45 pub page_count: usize,
46 pub page_size: usize,
47 pub rows: Vec<T>,
48}
49
50pub trait DbCollectionIden {
51 fn iden() -> StoreIden;
52}
53
54pub trait DbCollection: Send + Sync {
55 type Item;
56 fn exists(&self, id: &str) -> Result<bool>;
57 fn find(&self, id: &str) -> Result<Self::Item>;
58 fn query(&self, query: &Query) -> Result<PageData<Self::Item>>;
59 fn create(&self, data: &Self::Item) -> Result<bool>;
60 fn update(&self, data: &Self::Item) -> Result<bool>;
61 fn delete(&self, id: &str) -> Result<bool>;
62}