dbf_dextractor 0.1.2

Extract and deserialize dbf files
use serde::de::IntoDeserializer;
use serde::de::{DeserializeSeed, MapAccess};

use crate::deserialize::DbfDeserializer;
use crate::error::DeserializeError;

impl<'de> MapAccess<'de> for DbfDeserializer {
    type Error = DeserializeError;

    fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Self::Error>
    where
        K: DeserializeSeed<'de>,
    {
        match self.peek_value() {
            Some((field, _)) => seed
                .deserialize(field.name.clone().into_deserializer())
                .map(Some),
            None => Ok(None),
        }
    }

    fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Self::Error>
    where
        V: DeserializeSeed<'de>,
    {
        seed.deserialize(self)
    }
}