use crate::value::{self, to_value, IOValue, UnwrappedIOValue}; use std::iter::IntoIterator; use serde::{Serialize, Serializer, Deserialize, Deserializer}; pub fn serialize(s: T, serializer: S) -> Result where S: Serializer, T: IntoIterator, Item: Serialize, { let s = s.into_iter().map(to_value).collect::>(); UnwrappedIOValue::from(s).wrap().serialize(serializer) } pub fn deserialize<'de, D, T>(deserializer: D) -> Result where D: Deserializer<'de>, T: Deserialize<'de>, { // Relies on the way we hack around serde's data model in de.rs and value/de.rs. T::deserialize(deserializer) }