Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_reflect/src/serde/de/structs.rs
6600 views
1
use crate::{
2
serde::de::struct_utils::{visit_struct, visit_struct_seq},
3
DynamicStruct, StructInfo, TypeRegistration, TypeRegistry,
4
};
5
use core::{fmt, fmt::Formatter};
6
use serde::de::{MapAccess, SeqAccess, Visitor};
7
8
use super::ReflectDeserializerProcessor;
9
10
/// A [`Visitor`] for deserializing [`Struct`] values.
11
///
12
/// [`Struct`]: crate::Struct
13
pub(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
20
impl<'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
}
53
54