acts_next/store/
mod.rs

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
43/// Store adapter trait
44/// Used to implement custom storage
45///
46/// # Example
47/// ```no_run
48/// use acts::{data::{Model, Proc, Task, Package, Message}, DbSet, StoreAdapter};
49/// use std::sync::Arc;
50/// struct TestStore;
51/// impl StoreAdapter for TestStore {
52///
53///     fn models(&self) -> Arc<dyn DbSet<Item = Model>> {
54///         todo!()
55///     }
56///     fn procs(&self) -> Arc<dyn DbSet<Item =Proc>> {
57///         todo!()
58///     }
59///     fn tasks(&self) -> Arc<dyn DbSet<Item =Task>> {
60///         todo!()
61///     }
62///     fn packages(&self) -> Arc<dyn DbSet<Item =Package>> {
63///         todo!()
64///     }
65///     fn messages(&self) -> Arc<dyn DbSet<Item =Message>> {
66///         todo!()
67///     }
68///     fn init(&self) {}
69///     fn close(&self) {}
70/// }
71/// ```
72pub 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}