canic_core/access/
guard.rs

1use crate::{
2    Error, ThisError, access::AccessError, dto::state::AppModeView,
3    ops::storage::state::AppStateOps,
4};
5
6///
7/// GuardError
8///
9
10#[derive(Debug, ThisError)]
11pub enum GuardError {
12    #[error("application is disabled")]
13    AppDisabled,
14
15    #[error("application is in readonly mode")]
16    AppReadonly,
17}
18
19impl From<GuardError> for Error {
20    fn from(err: GuardError) -> Self {
21        AccessError::GuardError(err).into()
22    }
23}
24
25/// Validate access for query calls.
26///
27/// Rules:
28/// - Enabled and Readonly modes permit queries.
29/// - Disabled mode rejects queries.
30pub fn guard_app_query() -> Result<(), Error> {
31    match AppStateOps::export_view().mode {
32        AppModeView::Enabled | AppModeView::Readonly => Ok(()),
33        AppModeView::Disabled => Err(GuardError::AppDisabled.into()),
34    }
35}
36
37/// Validate access for update calls.
38///
39/// Rules:
40/// - Enabled mode permits updates.
41/// - Readonly rejects updates.
42/// - Disabled rejects updates.
43pub fn guard_app_update() -> Result<(), Error> {
44    match AppStateOps::export_view().mode {
45        AppModeView::Enabled => Ok(()),
46        AppModeView::Readonly => Err(GuardError::AppReadonly.into()),
47        AppModeView::Disabled => Err(GuardError::AppDisabled.into()),
48    }
49}