texcraft_stdext/
serde_tools.rs1use serde::{Deserialize, Serialize};
3
4pub mod array {
9 use super::*;
10
11 pub fn serialize<T, S, const N: usize>(input: &[T; N], serializer: S) -> Result<S::Ok, S::Error>
13 where
14 T: serde::Serialize,
15 S: serde::Serializer,
16 {
17 let v: Vec<&T> = input.iter().collect();
19 v.serialize(serializer)
20 }
21
22 pub fn deserialize<'de, T, D, const N: usize>(deserializer: D) -> Result<[T; N], D::Error>
24 where
25 T: Deserialize<'de> + std::fmt::Debug,
26 D: serde::Deserializer<'de>,
27 {
28 let v = Vec::<T>::deserialize(deserializer)?;
30 let a: [T; N] = v.try_into().unwrap();
32 Ok(a)
33 }
34}
35
36pub mod iter {
41 use super::*;
42
43 pub fn serialize<T, I, S>(input: I, serializer: S) -> Result<S::Ok, S::Error>
45 where
46 T: serde::Serialize,
47 I: IntoIterator<Item = T>,
48 S: serde::Serializer,
49 {
50 serializer.collect_seq(input)
51 }
52
53 pub fn deserialize<'de, T, C, D>(deserializer: D) -> Result<C, D::Error>
55 where
56 T: Deserialize<'de> + std::fmt::Debug,
57 C: FromIterator<T>,
58 D: serde::Deserializer<'de>,
59 {
60 let v = Vec::<T>::deserialize(deserializer)?;
62 Ok(C::from_iter(v))
63 }
64}
65
66pub fn serialize_str<T, S>(input: T, serializer: S) -> Result<S::Ok, S::Error>
71where
72 T: AsRef<str>,
73 S: serde::Serializer,
74{
75 let s: &str = input.as_ref();
76 s.serialize(serializer)
77}
78
79pub fn deserialize_rc_str<'de, D>(deserializer: D) -> Result<std::rc::Rc<str>, D::Error>
84where
85 D: serde::Deserializer<'de>,
86{
87 let s = String::deserialize(deserializer)?;
89 Ok(s.into())
90}