bevy_reflect/serde/de/
structs.rs1use crate::{
2 serde::de::struct_utils::{visit_struct, visit_struct_seq},
3 DynamicStruct, StructInfo, TypeRegistration, TypeRegistry,
4};
5use core::{fmt, fmt::Formatter};
6use serde::de::{MapAccess, SeqAccess, Visitor};
7
8use super::ReflectDeserializerProcessor;
9
10pub(super) struct StructVisitor<'a, P> {
14 pub struct_info: &'static StructInfo,
15 pub registration: &'a TypeRegistration,
16 pub registry: &'a TypeRegistry,
17 pub processor: Option<&'a mut P>,
18}
19
20impl<'de, P: ReflectDeserializerProcessor> Visitor<'de> for StructVisitor<'_, P> {
21 type Value = DynamicStruct;
22
23 fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
24 formatter.write_str("reflected struct value")
25 }
26
27 fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
28 where
29 A: SeqAccess<'de>,
30 {
31 visit_struct_seq(
32 &mut seq,
33 self.struct_info,
34 self.registration,
35 self.registry,
36 self.processor,
37 )
38 }
39
40 fn visit_map<V>(self, mut map: V) -> Result<Self::Value, V::Error>
41 where
42 V: MapAccess<'de>,
43 {
44 visit_struct(
45 &mut map,
46 self.struct_info,
47 self.registration,
48 self.registry,
49 self.processor,
50 )
51 }
52}