v_authorization_impl/
lib.rs

1#[macro_use]
2extern crate log;
3
4pub mod az_lmdb;
5pub mod az_mdbx;
6mod stat_manager;
7mod common;
8
9pub use az_lmdb::LmdbAzContext;
10pub use az_mdbx::MdbxAzContext;
11pub use v_authorization;
12
13use v_authorization::common::AuthorizationContext;
14
15// Database backend type selection
16#[derive(Debug, Clone, Copy, PartialEq, Eq)]
17pub enum AzDbType {
18    Lmdb,
19    Mdbx,
20}
21
22// Unified authorization context that wraps either implementation
23pub enum AzContext {
24    Lmdb(LmdbAzContext),
25    Mdbx(MdbxAzContext),
26}
27
28impl AzContext {
29    pub fn new(db_type: AzDbType, max_read_counter: u64) -> Self {
30        match db_type {
31            AzDbType::Lmdb => AzContext::Lmdb(LmdbAzContext::new(max_read_counter)),
32            AzDbType::Mdbx => AzContext::Mdbx(MdbxAzContext::new(max_read_counter)),
33        }
34    }
35
36    pub fn new_with_config(
37        db_type: AzDbType,
38        max_read_counter: u64,
39        stat_collector_url: Option<String>,
40        stat_mode_str: Option<String>,
41        use_cache: Option<bool>,
42    ) -> Self {
43        match db_type {
44            AzDbType::Lmdb => AzContext::Lmdb(LmdbAzContext::new_with_config(
45                max_read_counter,
46                stat_collector_url,
47                stat_mode_str,
48                use_cache,
49            )),
50            AzDbType::Mdbx => AzContext::Mdbx(MdbxAzContext::new_with_config(
51                max_read_counter,
52                stat_collector_url,
53                stat_mode_str,
54                use_cache,
55            )),
56        }
57    }
58}
59
60impl AuthorizationContext for AzContext {
61    fn authorize(
62        &mut self,
63        uri: &str,
64        user_uri: &str,
65        request_access: u8,
66        is_check_for_reload: bool,
67    ) -> Result<u8, std::io::Error> {
68        match self {
69            AzContext::Lmdb(ctx) => ctx.authorize(uri, user_uri, request_access, is_check_for_reload),
70            AzContext::Mdbx(ctx) => ctx.authorize(uri, user_uri, request_access, is_check_for_reload),
71        }
72    }
73
74    fn authorize_and_trace(
75        &mut self,
76        uri: &str,
77        user_uri: &str,
78        request_access: u8,
79        is_check_for_reload: bool,
80        trace: &mut v_authorization::common::Trace,
81    ) -> Result<u8, std::io::Error> {
82        match self {
83            AzContext::Lmdb(ctx) => ctx.authorize_and_trace(uri, user_uri, request_access, is_check_for_reload, trace),
84            AzContext::Mdbx(ctx) => ctx.authorize_and_trace(uri, user_uri, request_access, is_check_for_reload, trace),
85        }
86    }
87}
88