1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use super::*;

pub(in super::super) struct RecordMapAccess<'r, 's, R> {
	pub(in super::super) state: &'r mut DeserializerState<'s, R>,
	pub(in super::super) record_fields: std::slice::Iter<'s, RecordField<'s>>,
}
impl<'de, R: ReadSlice<'de>> MapAccess<'de> for RecordMapAccess<'_, '_, R> {
	type Error = DeError;

	fn next_key_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, Self::Error>
	where
		T: DeserializeSeed<'de>,
	{
		Ok(match self.record_fields.as_slice().first() {
			None => None,
			Some(field) => Some(seed.deserialize(value::StrDeserializer::new(&field.name))?),
		})
	}

	fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Self::Error>
	where
		V: DeserializeSeed<'de>,
	{
		seed.deserialize(DatumDeserializer {
			schema_node: self
				.record_fields
				.next()
				.expect("Called next_value without seed returning Some before")
				.schema,
			state: self.state,
		})
	}
}