commit e6f1b4a2eae401cd319f50e4bd35cb060d834a16
parent 26566ff74fe5781873eeb062421d63813743e036
Author: triesap <triesap@radroots.dev>
Date: Wed, 21 Jan 2026 14:56:57 +0000
app: add typed notifications permission helpers
- parse stored notifications permission as enum
- add typed setter for stored permission value
- export permission helpers from bootstrap module
- add unit tests for permission helpers
Diffstat:
2 files changed, 46 insertions(+), 0 deletions(-)
diff --git a/app/src/bootstrap.rs b/app/src/bootstrap.rs
@@ -1,6 +1,7 @@
#![forbid(unsafe_code)]
use radroots_app_core::datastore::{RadrootsClientDatastore, RadrootsClientDatastoreError};
+use radroots_app_core::notifications::RadrootsClientNotificationsPermission;
use crate::{
app_datastore_obj_key_settings,
@@ -110,6 +111,22 @@ pub async fn app_state_set_notifications_permission<T: RadrootsClientDatastore>(
Ok(value)
}
+pub fn app_state_notifications_permission_value(
+ data: &RadrootsAppState,
+) -> Option<RadrootsClientNotificationsPermission> {
+ data.notifications_permission
+ .as_deref()
+ .and_then(RadrootsClientNotificationsPermission::parse)
+}
+
+pub async fn app_state_set_notifications_permission_value<T: RadrootsClientDatastore>(
+ datastore: &T,
+ key_maps: &RadrootsAppKeyMapConfig,
+ permission: RadrootsClientNotificationsPermission,
+) -> RadrootsAppInitResult<RadrootsAppState> {
+ app_state_set_notifications_permission(datastore, key_maps, permission.as_str()).await
+}
+
#[cfg(test)]
mod tests {
use super::{
@@ -118,11 +135,14 @@ mod tests {
app_datastore_has_settings,
app_datastore_read_state,
app_state_set_notifications_permission,
+ app_state_set_notifications_permission_value,
+ app_state_notifications_permission_value,
app_datastore_write_state,
app_datastore_write_settings,
};
use crate::{app_key_maps_default, RadrootsAppState, RadrootsAppSettings, RadrootsAppInitError};
use radroots_app_core::datastore::{RadrootsClientDatastoreError, RadrootsClientWebDatastore};
+ use radroots_app_core::notifications::RadrootsClientNotificationsPermission;
#[test]
fn settings_write_maps_idb_errors() {
@@ -206,4 +226,28 @@ mod tests {
.expect_err("idb undefined");
assert_eq!(err, RadrootsAppInitError::Datastore(RadrootsClientDatastoreError::IdbUndefined));
}
+
+ #[test]
+ fn notifications_permission_value_parses_state() {
+ let mut state = RadrootsAppState::default();
+ assert!(app_state_notifications_permission_value(&state).is_none());
+ state.notifications_permission = Some(String::from("granted"));
+ assert_eq!(
+ app_state_notifications_permission_value(&state),
+ Some(RadrootsClientNotificationsPermission::Granted)
+ );
+ }
+
+ #[test]
+ fn notifications_permission_value_maps_idb_errors() {
+ let datastore = RadrootsClientWebDatastore::new(None);
+ let key_maps = app_key_maps_default();
+ let err = futures::executor::block_on(app_state_set_notifications_permission_value(
+ &datastore,
+ &key_maps,
+ RadrootsClientNotificationsPermission::Granted,
+ ))
+ .expect_err("idb undefined");
+ assert_eq!(err, RadrootsAppInitError::Datastore(RadrootsClientDatastoreError::IdbUndefined));
+ }
}
diff --git a/app/src/lib.rs b/app/src/lib.rs
@@ -21,6 +21,8 @@ pub use bootstrap::{
app_datastore_has_settings,
app_datastore_read_state,
app_state_set_notifications_permission,
+ app_state_set_notifications_permission_value,
+ app_state_notifications_permission_value,
app_datastore_write_state,
app_datastore_write_settings,
};