#[cfg(not(target_family = "wasm"))]
pub mod fs;
#[cfg(target_family = "wasm")]
pub(crate) mod gloo;
use crate::serializable_map::{PreferencesSerializableMap, PreferencesSerializableMapSeed};
use crate::Result;
use bevy::prelude::*;
use std::ops::Deref;
use std::sync::Arc;
pub trait PreferencesStorage: Send + Sync + 'static {
fn load_preferences(
&self,
deserialize_seed: PreferencesSerializableMapSeed,
) -> Result<PreferencesSerializableMap>;
fn save_preferences(&self, map: &PreferencesSerializableMap) -> Result<()>;
}
#[derive(Resource)]
pub struct PreferencesStorageResource(Arc<dyn PreferencesStorage>);
impl PreferencesStorageResource {
pub(crate) fn new(storage: impl PreferencesStorage) -> Self {
Self(Arc::new(storage))
}
pub(crate) fn from_arc(storage: Arc<dyn PreferencesStorage>) -> Self {
Self(storage)
}
}
impl Deref for PreferencesStorageResource {
type Target = dyn PreferencesStorage;
fn deref(&self) -> &Self::Target {
&*self.0
}
}