Skip to main content

serde_avro_fast/de/deserializer/types/
record.rs

1use super::*;
2
3pub(in super::super) struct RecordMapAccess<'r, 's, R> {
4	pub(in super::super) state: &'r mut DeserializerState<'s, R>,
5	pub(in super::super) record_fields: std::slice::Iter<'s, RecordField<'s>>,
6	pub(in super::super) allowed_depth: AllowedDepth,
7}
8impl<'de, R: ReadSlice<'de>> MapAccess<'de> for RecordMapAccess<'_, '_, R> {
9	type Error = DeError;
10
11	fn next_key_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, Self::Error>
12	where
13		T: DeserializeSeed<'de>,
14	{
15		Ok(match self.record_fields.as_slice().first() {
16			None => None,
17			Some(field) => Some(seed.deserialize(value::StrDeserializer::new(&field.name))?),
18		})
19	}
20
21	fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Self::Error>
22	where
23		V: DeserializeSeed<'de>,
24	{
25		seed.deserialize(DatumDeserializer {
26			schema_node: self
27				.record_fields
28				.next()
29				.expect("Called next_value without seed returning Some before")
30				.schema
31				.as_ref(),
32			state: self.state,
33			allowed_depth: self.allowed_depth,
34		})
35	}
36}