diff options
Diffstat (limited to 'crates')
| -rw-r--r-- | crates/teleia/Cargo.toml | 2 | ||||
| -rw-r--r-- | crates/teleia/src/lib.rs | 28 | ||||
| -rw-r--r-- | crates/teleia/src/save.rs | 13 |
3 files changed, 25 insertions, 18 deletions
diff --git a/crates/teleia/Cargo.toml b/crates/teleia/Cargo.toml index 5382630..5784ca9 100644 --- a/crates/teleia/Cargo.toml +++ b/crates/teleia/Cargo.toml @@ -30,7 +30,7 @@ rapier3d = "*" # rigid-body physics parry3d = "*" # collision detection nalgebra = {version = "0.33.2", features = ["convert-glam029"]} # linear algebra library for rapier3d byteorder = "*" # read numbers in particular endianness -lexpr = "*" # parse s-expressions +base64 = "0.22.1" # encode/decode base64 [target.'cfg(target_arch = "wasm32")'.dependencies] winit = {version = "=0.29.15", features = ["serde"]} # windowing and events diff --git a/crates/teleia/src/lib.rs b/crates/teleia/src/lib.rs index 5e13cbb..81bc617 100644 --- a/crates/teleia/src/lib.rs +++ b/crates/teleia/src/lib.rs @@ -14,6 +14,8 @@ pub mod net; pub mod physics; pub mod save; pub mod level2d; + +#[cfg(not(target_arch = "wasm32"))] pub mod fig; pub use utils::{erm, install_error_handler, Erm}; @@ -295,19 +297,19 @@ where ctx.maximize_canvas(); st.handle_resize(&ctx); } - if let Some(f) = &mut st.request { - match std::future::Future::poll(f.as_mut(), &mut st.waker_ctx) { - std::task::Poll::Pending => {}, - std::task::Poll::Ready(res) => { - st.request = None; - match res { - Ok(r) => st.request_returned(&ctx, game, r), - Err(e) => log::warn!("error during HTTP request: {}", e), - } - }, - } - // f.poll(); - } + // if let Some(f) = &mut st.request { + // match std::future::Future::poll(f.as_mut(), &mut st.waker_ctx) { + // std::task::Poll::Pending => {}, + // std::task::Poll::Ready(res) => { + // st.request = None; + // match res { + // Ok(r) => st.request_returned(&ctx, game, r), + // Err(e) => log::warn!("error during HTTP request: {}", e), + // } + // }, + // } + // // f.poll(); + // } st.run_update(&ctx, game)?; st.run_render(&ctx, game)?; ctx.window.request_redraw(); diff --git a/crates/teleia/src/save.rs b/crates/teleia/src/save.rs index 3f244cc..dea4332 100644 --- a/crates/teleia/src/save.rs +++ b/crates/teleia/src/save.rs @@ -1,3 +1,5 @@ +use base64::prelude::*; + #[cfg(target_arch = "wasm32")] pub fn save<W>(id: &str, data: &W) where W: serde::Serialize { let window = web_sys::window().expect("failed to get window object"); @@ -5,8 +7,9 @@ pub fn save<W>(id: &str, data: &W) where W: serde::Serialize { .expect("failed to get local storage") .expect("local storage not present"); let key = format!("{}_save", id); - let val = serde_json::to_string(data).expect("failed to serialize save"); - storage.set_item(&key, &val).expect("failed to set save"); + let val = bincode::serde::encode_to_vec(data, bincode::config::standard()).expect("failed to serialize save"); + let str = BASE64_STANDARD.encode(&val); + storage.set_item(&key, &str).expect("failed to set save"); } #[cfg(target_arch = "wasm32")] @@ -17,8 +20,10 @@ pub fn load<W>(id: &str) -> Option<W> where W: serde::de::DeserializeOwned { .expect("local storage not present"); let key = format!("{}_save", id); let s = storage.get_item(&key).expect("failed to get save").expect("save not present"); - let mut cur = std::io::Cursor::new(s); - serde_json::from_reader(&mut cur).ok() + let bytes = BASE64_STANDARD.decode(&s).expect("failed to decode base64 for save"); + let (ret, _) = bincode::serde::decode_from_slice(&bytes, bincode::config::standard()) + .expect("failed to deserialize save"); + Some(ret) } #[cfg(not(target_arch = "wasm32"))] |
