Skip to main content

acts_next/store/
mod.rs

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}