wasm-msgpack 0.6.2

MessagePack serialization implementation for Rust optimized for WebAssembly environments
Documentation
use serde::de;

use super::{print_debug, Deserializer, Error};

pub struct MapAccess<'a, 'b> {
    de: &'a mut Deserializer<'b>,
    count: usize,
}

impl<'a, 'b> MapAccess<'a, 'b> {
    pub(crate) fn new(de: &'a mut Deserializer<'b>, count: usize) -> Self {
        MapAccess { de, count: count * 2 }
    }
}

impl<'a, 'de> de::MapAccess<'de> for MapAccess<'a, 'de> {
    type Error = Error;

    fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Error>
    where
        K: de::DeserializeSeed<'de>,
    {
        print_debug::<K>("MapAccess::", "next_key_seed", self.de);
        if self.count > 0 {
            self.count -= 1;
            Ok(Some(seed.deserialize(&mut *self.de)?))
        } else {
            Ok(None)
        }
    }

    fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Error>
    where
        V: de::DeserializeSeed<'de>,
    {
        print_debug::<V>("MapAccess::", "next_value_seed", self.de);
        if self.count > 0 {
            self.count -= 1;
            Ok(seed.deserialize(&mut *self.de)?)
        } else {
            Err(Error::EndOfBuffer(crate::marker::Marker::Reserved))
        }
    }
}