casbin/adapter/
mod.rs

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}