#[cfg(target_arch = "wasm32")]
use wasm_bindgen::prelude::*;
#[cfg(target_arch = "wasm32")]
use web_sys::{console, window, Storage};
#[cfg(target_arch = "wasm32")]
fn get_local_storage() -> Option<Storage> {
window()?.local_storage().ok()?
}
pub fn get(key: String) -> Option<String> {
#[cfg(target_arch = "wasm32")]
{
get_local_storage()?.get_item(&key).ok()?
}
#[cfg(not(target_arch = "wasm32"))]
{
None
}
}
pub fn get_or(key: String, default: String) -> String {
get(key).unwrap_or(default)
}
pub fn set(key: String, value: String) {
#[cfg(target_arch = "wasm32")]
{
if let Some(storage) = get_local_storage() {
if let Err(_) = storage.set_item(&key, &value) {
console::warn_1(&format!("Failed to set localStorage item: {}", key).into());
}
}
}
}
pub fn remove(key: String) {
#[cfg(target_arch = "wasm32")]
{
if let Some(storage) = get_local_storage() {
if let Err(_) = storage.remove_item(&key) {
console::warn_1(&format!("Failed to remove localStorage item: {}", key).into());
}
}
}
}
pub fn current_dir() -> String {
"/".to_string()
}
pub fn vars() -> Vec<(String, String)> {
#[cfg(target_arch = "wasm32")]
{
let mut vars = Vec::new();
if let Some(storage) = get_local_storage() {
if let Ok(len) = storage.length() {
for i in 0..len {
if let Ok(Some(key)) = storage.key(i) {
if let Ok(Some(value)) = storage.get_item(&key) {
vars.push((key, value));
}
}
}
}
}
vars
}
#[cfg(not(target_arch = "wasm32"))]
{
Vec::new()
}
}
pub fn home_dir() -> Option<String> {
None
}
pub fn temp_dir() -> String {
"/tmp".to_string()
}