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