From 35dcacb9562569434cc5e6f95cefbb95904d26da Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Sun, 30 Apr 2023 16:35:11 -0500 Subject: [PATCH] use ascii64 encoding --- packages/server/Cargo.toml | 1 + .../src/props_html/deserialize_props.rs | 13 ++------ packages/server/src/props_html/mod.rs | 31 ------------------- .../server/src/props_html/serialize_props.rs | 12 ++----- 4 files changed, 7 insertions(+), 50 deletions(-) diff --git a/packages/server/Cargo.toml b/packages/server/Cargo.toml index b6293993c..753d4c2cb 100644 --- a/packages/server/Cargo.toml +++ b/packages/server/Cargo.toml @@ -47,6 +47,7 @@ tokio-stream = { version = "0.1.12", features = ["sync"], optional = true } futures-util = { version = "0.3.28", optional = true } postcard = { version = "1.0.4", features = ["use-std"] } yazi = "0.1.5" +base64 = "0.21.0" [target.'cfg(not(target_arch = "wasm32"))'.dependencies] dioxus-hot-reload = { path = "../hot-reload" } diff --git a/packages/server/src/props_html/deserialize_props.rs b/packages/server/src/props_html/deserialize_props.rs index 64f2181ab..dcaa19905 100644 --- a/packages/server/src/props_html/deserialize_props.rs +++ b/packages/server/src/props_html/deserialize_props.rs @@ -1,18 +1,11 @@ use serde::de::DeserializeOwned; -use super::u16_from_char; +use base64::engine::general_purpose::STANDARD; +use base64::Engine; #[allow(unused)] pub(crate) fn serde_from_string(string: &str) -> Option { - let decompressed = string - .chars() - .flat_map(|c| { - let u = u16_from_char(c); - let u1 = (u >> 8) as u8; - let u2 = (u & 0xFF) as u8; - [u1, u2].into_iter() - }) - .collect::>(); + let decompressed = STANDARD.decode(string.as_bytes()).ok()?; let (decompressed, _) = yazi::decompress(&decompressed, yazi::Format::Zlib).unwrap(); postcard::from_bytes(&decompressed).ok() diff --git a/packages/server/src/props_html/mod.rs b/packages/server/src/props_html/mod.rs index 9e9b8721e..048e2aa90 100644 --- a/packages/server/src/props_html/mod.rs +++ b/packages/server/src/props_html/mod.rs @@ -52,34 +52,3 @@ fn serialized_and_deserializes() { } } } - -#[test] -fn encodes_and_decodes_bytes() { - for i in 0..(u16::MAX) { - let c = u16_to_char(i); - let i2 = u16_from_char(c); - assert_eq!(i, i2); - } -} - -#[allow(unused)] -pub(crate) fn u16_to_char(u: u16) -> char { - let u = u as u32; - let mapped = if u <= 0xD7FF { - u - } else { - 0xE000 + (u - 0xD7FF) - }; - char::from_u32(mapped).unwrap() -} - -#[allow(unused)] -pub(crate) fn u16_from_char(c: char) -> u16 { - let c = c as u32; - let mapped = if c <= 0xD7FF { - c - } else { - 0xD7FF + (c - 0xE000) - }; - mapped as u16 -} diff --git a/packages/server/src/props_html/serialize_props.rs b/packages/server/src/props_html/serialize_props.rs index f1282f07f..0012afb9c 100644 --- a/packages/server/src/props_html/serialize_props.rs +++ b/packages/server/src/props_html/serialize_props.rs @@ -1,6 +1,7 @@ use serde::Serialize; -use super::u16_to_char; +use base64::engine::general_purpose::STANDARD; +use base64::Engine; #[allow(unused)] pub(crate) fn serde_to_writable( @@ -14,14 +15,7 @@ pub(crate) fn serde_to_writable( yazi::CompressionLevel::BestSize, ) .unwrap(); - for array in compressed.chunks(2) { - let w = if array.len() == 2 { - [array[0], array[1]] - } else { - [array[0], 0] - }; - write_to.write_char(u16_to_char((w[0] as u16) << 8 | (w[1] as u16)))?; - } + write_to.write_str(&STANDARD.encode(compressed)); Ok(()) }