diff options
| author | LLLL Colonq <llll@colonq> | 2025-12-15 21:14:51 -0500 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2025-12-15 21:14:51 -0500 |
| commit | 02e1491d0a0ad2ca73dc2cc36a33c3aed50a801e (patch) | |
| tree | bd1730b4d356527a64dd2a7bac858d7b59ebf825 | |
| parent | 1736fec8c78cc30c62f78410f0ad3f187c072d59 (diff) | |
Fix saving
| -rw-r--r-- | Cargo.lock | 31 | ||||
| -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 |
4 files changed, 33 insertions, 41 deletions
@@ -196,6 +196,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] name = "bimap" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -916,7 +922,7 @@ name = "gltf" version = "1.4.1" source = "git+https://github.com/lcolonq/gltf#9763a5abe8c168eb1282a037ff16668542fe2a6d" dependencies = [ - "base64", + "base64 0.13.1", "byteorder", "gltf-json", "image", @@ -1126,27 +1132,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] -name = "lexpr" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a84de6a9df442363b08f5dbf0cd5b92edc70097b89c4ce4bfea4679fe48bc67" -dependencies = [ - "itoa", - "lexpr-macros", - "ryu", -] - -[[package]] -name = "lexpr-macros" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36b5cb8bb985c81a8ac1a0f8b5c4865214f574ddd64397ef7a99c236e21f35bb" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] name = "libc" version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2268,6 +2253,7 @@ dependencies = [ name = "teleia" version = "0.1.0" dependencies = [ + "base64 0.22.1", "bimap", "bincode", "bitflags 2.6.0", @@ -2287,7 +2273,6 @@ dependencies = [ "image", "js-sys", "kira", - "lexpr", "log", "nalgebra", "parry3d", 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"))] |
