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
9395 views
1
use crate::{
2
serde::de::struct_utils::{visit_struct, visit_struct_seq},
3
structs::{DynamicStruct, StructInfo},
4
TypeRegistration, TypeRegistry,
5
};
6
use core::{fmt, fmt::Formatter};
7
use serde::de::{MapAccess, SeqAccess, Visitor};
8
9
use super::ReflectDeserializerProcessor;
10
11
/// A [`Visitor`] for deserializing [`Struct`] values.
12
///
13
/// [`Struct`]: crate::structs::Struct
14
pub(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
21
impl<'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
}
54
55