1use async_trait::async_trait;
2
3pub mod memory_adapter;
4pub mod null_adapter;
5pub mod string_adapter;
6
7#[cfg(not(target_arch = "wasm32"))]
8pub mod file_adapter;
9
10pub use memory_adapter::MemoryAdapter;
11pub use null_adapter::NullAdapter;
12pub use string_adapter::StringAdapter;
13
14#[cfg(not(target_arch = "wasm32"))]
15pub use file_adapter::FileAdapter;
16
17use crate::{model::Model, Result};
18
19#[derive(Clone)]
20pub struct Filter<'a> {
21 pub p: Vec<&'a str>,
22 pub g: Vec<&'a str>,
23}
24
25#[async_trait]
26pub trait Adapter: Send + Sync {
27 async fn load_policy(&mut self, m: &mut dyn Model) -> Result<()>;
28 async fn load_filtered_policy<'a>(
29 &mut self,
30 m: &mut dyn Model,
31 f: Filter<'a>,
32 ) -> Result<()>;
33 async fn save_policy(&mut self, m: &mut dyn Model) -> Result<()>;
34 async fn clear_policy(&mut self) -> Result<()>;
35 fn is_filtered(&self) -> bool;
36 async fn add_policy(
37 &mut self,
38 sec: &str,
39 ptype: &str,
40 rule: Vec<String>,
41 ) -> Result<bool>;
42 async fn add_policies(
43 &mut self,
44 sec: &str,
45 ptype: &str,
46 rules: Vec<Vec<String>>,
47 ) -> Result<bool>;
48 async fn remove_policy(
49 &mut self,
50 sec: &str,
51 ptype: &str,
52 rule: Vec<String>,
53 ) -> Result<bool>;
54 async fn remove_policies(
55 &mut self,
56 sec: &str,
57 ptype: &str,
58 rules: Vec<Vec<String>>,
59 ) -> Result<bool>;
60 async fn remove_filtered_policy(
61 &mut self,
62 sec: &str,
63 ptype: &str,
64 field_index: usize,
65 field_values: Vec<String>,
66 ) -> Result<bool>;
67}