polywrap_msgpack_serde 0.0.2

An msgpack Serializer and Deserializer data format with Serde for Polywrap
Documentation
use serde::de::{SeqAccess, DeserializeSeed};

use crate::{Deserializer, error::{Result, Error}};

pub struct ArrayReadAccess<'a> {
  deserializer: &'a mut Deserializer,
  elements_in_arr: u32,
}

impl<'a> ArrayReadAccess<'a> {
  pub fn new(
      deserializer: &'a mut Deserializer,
      elements_in_arr: u32,
  ) -> Self {
      Self {
          deserializer,
          elements_in_arr,
      }
  }
}

impl<'a, 'de> SeqAccess<'de> for ArrayReadAccess<'a> {
  type Error = Error;

  fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>>
  where
      T: DeserializeSeed<'de>,
  {
      if self.elements_in_arr == 0 {
          return Ok(None);
      }

      self.elements_in_arr -= 1;
      seed.deserialize(&mut *self.deserializer).map(Some)
  }
}