use serde::{Deserialize, Serialize};
pub fn serialize_array<T: serde::Serialize, S, const N: usize>(
input: &[T; N],
serializer: S,
) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let v: Vec<&T> = input.iter().collect();
v.serialize(serializer)
}
pub fn deserialize_array<'de, T: Deserialize<'de> + std::fmt::Debug, D, const N: usize>(
deserializer: D,
) -> Result<[T; N], D::Error>
where
D: serde::Deserializer<'de>,
{
let v = Vec::<T>::deserialize(deserializer)?;
let a: [T; N] = v.try_into().unwrap();
Ok(a)
}
pub fn serialize_str<T: AsRef<str>, S>(input: T, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let s: &str = input.as_ref();
s.serialize(serializer)
}
pub fn deserialize_rc_str<'de, D>(deserializer: D) -> Result<std::rc::Rc<str>, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(s.into())
}