canic_core/access/
guard.rs

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