diff options
author | 2020-02-06 05:56:23 +0100 | |
---|---|---|
committer | 2020-02-06 05:56:23 +0100 | |
commit | 36e617ae70cc7a86ce998cbd61f6aa702bb42933 (patch) | |
tree | c3a4ec76931c8153c932c364fa393e25d39d74f0 /examples/todos/src | |
parent | 679d758627f6500de4b2220c0dba3460871b83b4 (diff) | |
download | iced-36e617ae70cc7a86ce998cbd61f6aa702bb42933.tar.gz iced-36e617ae70cc7a86ce998cbd61f6aa702bb42933.tar.bz2 iced-36e617ae70cc7a86ce998cbd61f6aa702bb42933.zip |
Implement local storage for `todos` example in Wasm
Diffstat (limited to 'examples/todos/src')
-rw-r--r-- | examples/todos/src/main.rs | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/examples/todos/src/main.rs b/examples/todos/src/main.rs index a4009874..7e866b19 100644 --- a/examples/todos/src/main.rs +++ b/examples/todos/src/main.rs @@ -557,15 +557,38 @@ impl SavedState { } } -// TODO #[cfg(target_arch = "wasm32")] impl SavedState { + fn storage() -> Option<web_sys::Storage> { + let window = web_sys::window()?; + + window.local_storage().ok()? + } + async fn load() -> Result<SavedState, LoadError> { - Err(LoadError::FileError) + let storage = Self::storage().ok_or(LoadError::FileError)?; + + let contents = storage + .get_item("state") + .map_err(|_| LoadError::FileError)? + .ok_or(LoadError::FileError)?; + + serde_json::from_str(&contents).map_err(|_| LoadError::FormatError) } async fn save(self) -> Result<(), SaveError> { - Err(SaveError::FileError) + let storage = Self::storage().ok_or(SaveError::FileError)?; + + let json = serde_json::to_string_pretty(&self) + .map_err(|_| SaveError::FormatError)?; + + storage + .set_item("state", &json) + .map_err(|_| SaveError::WriteError)?; + + let _ = wasm_timer::Delay::new(std::time::Duration::from_secs(2)).await; + + Ok(()) } } |