Skip to content

Instantly share code, notes, and snippets.

@therustmonk
Created March 12, 2021 13:09
Show Gist options
  • Save therustmonk/7991f49ed655cb611b5c11a27d3c0d26 to your computer and use it in GitHub Desktop.
Save therustmonk/7991f49ed655cb611b5c11a27d3c0d26 to your computer and use it in GitHub Desktop.
Rust Vectorize: (hashmap, btreemap, complex tuple struct key serialization)
pub mod vectorize {
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use std::iter::FromIterator;
pub fn serialize<'a, T, K, V, S>(target: T, ser: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
T: IntoIterator<Item = (&'a K, &'a V)>,
K: Serialize + 'a,
V: Serialize + 'a,
{
let container: Vec<_> = target.into_iter().collect();
serde::Serialize::serialize(&container, ser)
}
pub fn deserialize<'de, T, K, V, D>(des: D) -> Result<T, D::Error>
where
D: Deserializer<'de>,
T: FromIterator<(K, V)>,
K: Deserialize<'de>,
V: Deserialize<'de>,
{
let container: Vec<_> = serde::Deserialize::deserialize(des)?;
Ok(T::from_iter(container.into_iter()))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment