use crate::{SerdeMap, SerdeMapStrategy};
use scylla::{
deserialize::{
value::{DeserializeValue, MapIterator},
FrameSlice,
},
errors::{DeserializationError, TypeCheckError},
frame::response::result::ColumnType,
};
impl<'frame, 'metadata, K, V, KS> DeserializeValue<'frame, 'metadata> for SerdeMap<K, V, KS>
where
V: DeserializeValue<'frame, 'metadata>,
KS: SerdeMapStrategy<K>,
KS::Des: DeserializeValue<'frame, 'metadata>,
{
#[inline]
fn type_check(typ: &ColumnType) -> Result<(), TypeCheckError> {
MapIterator::<'frame, 'metadata, KS::Des, V>::type_check(typ)
}
#[inline]
fn deserialize(
typ: &'metadata ColumnType<'metadata>,
v: Option<FrameSlice<'frame>>,
) -> Result<Self, DeserializationError> {
MapIterator::<'frame, 'metadata, KS::Des, V>::deserialize(typ, v)
.and_then(|it| it.collect::<Result<_, DeserializationError>>())
}
}