use super::*;
pub fn use_storage(key: &'static str, kind: UseStorageKind, initial: &str) -> UseStorage {
HookContext::use_hook(|| UseStorage::new(key, kind, initial))
}
pub(crate) fn read_storage(kind: UseStorageKind, key: &str) -> Option<String> {
#[cfg(target_arch = "wasm32")]
{
let window: Window = browser_window()?;
let storage: Storage = match kind {
UseStorageKind::Local => window.local_storage().ok()??,
UseStorageKind::Session => window.session_storage().ok()??,
};
storage.get_item(key).ok()?
}
#[cfg(not(target_arch = "wasm32"))]
{
let _: (UseStorageKind, &str) = (kind, key);
None
}
}
pub(crate) fn write_storage(kind: UseStorageKind, key: &str, value: &str) {
#[cfg(target_arch = "wasm32")]
{
let Some(window) = browser_window() else {
return;
};
let storage: Storage = match kind {
UseStorageKind::Local => match window.local_storage() {
Ok(Some(storage)) => storage,
_ => return,
},
UseStorageKind::Session => match window.session_storage() {
Ok(Some(storage)) => storage,
_ => return,
},
};
let _: Result<(), JsValue> = storage.set_item(key, value);
}
#[cfg(not(target_arch = "wasm32"))]
{
let _: (UseStorageKind, &str, &str) = (kind, key, value);
}
}
pub(crate) fn remove_storage(kind: UseStorageKind, key: &str) {
#[cfg(target_arch = "wasm32")]
{
let Some(window) = browser_window() else {
return;
};
let storage: Storage = match kind {
UseStorageKind::Local => match window.local_storage() {
Ok(Some(storage)) => storage,
_ => return,
},
UseStorageKind::Session => match window.session_storage() {
Ok(Some(storage)) => storage,
_ => return,
},
};
let _: Result<(), JsValue> = storage.remove_item(key);
}
#[cfg(not(target_arch = "wasm32"))]
{
let _: (UseStorageKind, &str) = (kind, key);
}
}