use ascii64 encoding
This commit is contained in:
1 parent
64c7fda201
commit
35dcacb956
4 files changed
+7
-50
No files matched your search
@@ -47,6 +47,7 @@ tokio-stream = { version = "0.1.12", features = ["sync"], optional = true }
|
|||||||
futures-util = { version = "0.3.28", optional = true }
|
futures-util = { version = "0.3.28", optional = true }
|
||||||
postcard = { version = "1.0.4", features = ["use-std"] }
|
postcard = { version = "1.0.4", features = ["use-std"] }
|
||||||
yazi = "0.1.5"
|
yazi = "0.1.5"
|
||||||
|
base64 = "0.21.0"
|
||||||
|
|
||||||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
||||||
dioxus-hot-reload = { path = "../hot-reload" }
|
dioxus-hot-reload = { path = "../hot-reload" }
|
||||||
|
|||||||
@@ -1,18 +1,11 @@
|
|||||||
use serde::de::DeserializeOwned;
|
use serde::de::DeserializeOwned;
|
||||||
|
|
||||||
use super::u16_from_char;
|
use base64::engine::general_purpose::STANDARD;
|
||||||
|
use base64::Engine;
|
||||||
|
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
pub(crate) fn serde_from_string<T: DeserializeOwned>(string: &str) -> Option<T> {
|
pub(crate) fn serde_from_string<T: DeserializeOwned>(string: &str) -> Option<T> {
|
||||||
let decompressed = string
|
let decompressed = STANDARD.decode(string.as_bytes()).ok()?;
|
||||||
.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::<Vec<u8>>();
|
|
||||||
let (decompressed, _) = yazi::decompress(&decompressed, yazi::Format::Zlib).unwrap();
|
let (decompressed, _) = yazi::decompress(&decompressed, yazi::Format::Zlib).unwrap();
|
||||||
|
|
||||||
postcard::from_bytes(&decompressed).ok()
|
postcard::from_bytes(&decompressed).ok()
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::u16_to_char;
|
use base64::engine::general_purpose::STANDARD;
|
||||||
|
use base64::Engine;
|
||||||
|
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
pub(crate) fn serde_to_writable<T: Serialize>(
|
pub(crate) fn serde_to_writable<T: Serialize>(
|
||||||
@@ -14,14 +15,7 @@ pub(crate) fn serde_to_writable<T: Serialize>(
|
|||||||
yazi::CompressionLevel::BestSize,
|
yazi::CompressionLevel::BestSize,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
for array in compressed.chunks(2) {
|
write_to.write_str(&STANDARD.encode(compressed));
|
||||||
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)))?;
|
|
||||||
}
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user