canic_core/access/
guard.rs1use crate::{
2 Error, ThisError,
3 access::AccessError,
4 ops::storage::state::app::{AppMode, AppStateOps},
5};
6
7#[derive(Debug, ThisError)]
13pub enum GuardAccessError {
14 #[error("application is disabled")]
15 AppDisabled,
16
17 #[error("application is in readonly mode")]
18 AppReadonly,
19}
20
21impl From<GuardAccessError> for Error {
22 fn from(err: GuardAccessError) -> Self {
23 AccessError::Guard(err).into()
24 }
25}
26
27pub fn guard_app_query() -> Result<(), AccessError> {
33 let mode = AppStateOps::snapshot().mode.unwrap_or(AppMode::Disabled);
34
35 match mode {
36 AppMode::Enabled | AppMode::Readonly => Ok(()),
37 AppMode::Disabled => Err(GuardAccessError::AppDisabled.into()),
38 }
39}
40
41pub fn guard_app_update() -> Result<(), AccessError> {
48 let mode = AppStateOps::snapshot().mode.unwrap_or(AppMode::Disabled);
49
50 match mode {
51 AppMode::Enabled => Ok(()),
52 AppMode::Readonly => Err(GuardAccessError::AppReadonly.into()),
53 AppMode::Disabled => Err(GuardAccessError::AppDisabled.into()),
54 }
55}