|  | use core::fmt; | 
|  | use core::marker::PhantomData; | 
|  |  | 
|  | use serde::de::{Deserialize, Deserializer, MapAccess, Visitor}; | 
|  | use serde::ser::{Serialize, SerializeMap, Serializer}; | 
|  |  | 
|  | use super::{builder::Builder, Slab}; | 
|  |  | 
|  | impl<T> Serialize for Slab<T> | 
|  | where | 
|  | T: Serialize, | 
|  | { | 
|  | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> | 
|  | where | 
|  | S: Serializer, | 
|  | { | 
|  | let mut map_serializer = serializer.serialize_map(Some(self.len()))?; | 
|  | for (key, value) in self { | 
|  | map_serializer.serialize_key(&key)?; | 
|  | map_serializer.serialize_value(value)?; | 
|  | } | 
|  | map_serializer.end() | 
|  | } | 
|  | } | 
|  |  | 
|  | struct SlabVisitor<T>(PhantomData<T>); | 
|  |  | 
|  | impl<'de, T> Visitor<'de> for SlabVisitor<T> | 
|  | where | 
|  | T: Deserialize<'de>, | 
|  | { | 
|  | type Value = Slab<T>; | 
|  |  | 
|  | fn expecting(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { | 
|  | write!(fmt, "a map") | 
|  | } | 
|  |  | 
|  | fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> | 
|  | where | 
|  | A: MapAccess<'de>, | 
|  | { | 
|  | let mut builder = Builder::with_capacity(map.size_hint().unwrap_or(0)); | 
|  |  | 
|  | while let Some((key, value)) = map.next_entry()? { | 
|  | builder.pair(key, value) | 
|  | } | 
|  |  | 
|  | Ok(builder.build()) | 
|  | } | 
|  | } | 
|  |  | 
|  | impl<'de, T> Deserialize<'de> for Slab<T> | 
|  | where | 
|  | T: Deserialize<'de>, | 
|  | { | 
|  | fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> | 
|  | where | 
|  | D: Deserializer<'de>, | 
|  | { | 
|  | deserializer.deserialize_map(SlabVisitor(PhantomData)) | 
|  | } | 
|  | } |