grafix_toolbox/kit/policies/func/
serde.rs1#[cfg(not(feature = "adv_fs"))]
2pub mod ser {}
3#[cfg(feature = "adv_fs")]
4pub mod ser {
5 pub use serde::{Deserialize, Deserializer, Serialize, Serializer, de};
6
7 pub fn from_vec<R: de::DeserializeOwned>(v: impl Borrow<[u8]>) -> Res<R> {
8 Ok(serde_json::from_slice(v.borrow()).fail())
9 }
10
11 pub fn to_vec<T: Serialize>(v: T) -> Res<Vec<u8>> {
12 serde_json::to_vec(&v).res()
13 }
14
15 pub fn make_true() -> bool {
16 true
17 }
18
19 pub mod as_byte_slice {
20 pub fn serialize<T, S: Serializer>(v: &[T], s: S) -> Result<S::Ok, S::Error> {
21 let (_, b, _) = unsafe { v.align_to::<u8>() };
22 let b = faster_hex::hex_string(b);
23 (v.len(), b).serialize(s)
24 }
25 pub fn deserialize<'de, T: Copy + Default, D: Deserializer<'de>>(d: D) -> Result<Box<[T]>, D::Error> {
26 let (l, s) = <(usize, String)>::deserialize(d)?;
27 let s = s.as_bytes();
28
29 if s.len() != l * type_size::<T>() * 2 {
30 Err(de::Error::custom(format!("Cannot deserialize [Hex; {}] into [{}; {l}]", s.len(), type_name::<T>())))?
31 }
32
33 let mut aligned = vec![T::default(); l];
34 {
35 let a = unsafe { std::slice::from_raw_parts_mut(aligned.as_mut_ptr() as *mut u8, s.len() / 2) };
36 faster_hex::hex_decode(s, a).explain_err(|| "Hex decode failed").map_err(de::Error::custom)?;
37 }
38
39 Ok(aligned.into())
40 }
41 use super::*;
42 }
43
44 use crate::lib::*;
45}