Struct bevy_reflect::serde::SerializationData
source · pub struct SerializationData { /* private fields */ }
Expand description
Contains data relevant to the automatic reflect powered (de)serialization of a type.
Implementations§
source§impl SerializationData
impl SerializationData
sourcepub fn new<I: Iterator<Item = (usize, SkippedField)>>(skipped_iter: I) -> Self
pub fn new<I: Iterator<Item = (usize, SkippedField)>>(skipped_iter: I) -> Self
Creates a new SerializationData
instance with the given skipped fields.
Arguments
skipped_iter
: The iterator of field indices to be skipped during (de)serialization. Indices are assigned only to reflected fields. Ignored fields (i.e. those marked#[reflect(ignore)]
) are implicitly skipped and do not need to be included in this iterator.
sourcepub fn is_field_skipped(&self, index: usize) -> bool
pub fn is_field_skipped(&self, index: usize) -> bool
Returns true if the given index corresponds to a field meant to be skipped during (de)serialization.
Example
#[derive(Reflect)]
struct MyStruct {
serialize_me: i32,
#[reflect(skip_serializing)]
skip_me: i32
}
let mut registry = TypeRegistry::new();
registry.register::<MyStruct>();
let my_struct = MyStruct {
serialize_me: 123,
skip_me: 321,
};
let serialization_data = registry.get_type_data::<SerializationData>(TypeId::of::<MyStruct>()).unwrap();
for (idx, field) in my_struct.iter_fields().enumerate(){
if serialization_data.is_field_skipped(idx) {
// Skipped!
assert_eq!(1, idx);
} else {
// Not Skipped!
assert_eq!(0, idx);
}
}
sourcepub fn generate_default(&self, index: usize) -> Option<Box<dyn Reflect>>
pub fn generate_default(&self, index: usize) -> Option<Box<dyn Reflect>>
Generates a default instance of the skipped field at the given index.
Returns None
if the field is not skipped.
Example
#[derive(Reflect)]
struct MyStruct {
serialize_me: i32,
#[reflect(skip_serializing)]
#[reflect(default = "skip_me_default")]
skip_me: i32
}
fn skip_me_default() -> i32 {
789
}
let mut registry = TypeRegistry::new();
registry.register::<MyStruct>();
let serialization_data = registry.get_type_data::<SerializationData>(TypeId::of::<MyStruct>()).unwrap();
assert_eq!(789, serialization_data.generate_default(1).unwrap().take::<i32>().unwrap());
sourcepub fn iter_skipped(&self) -> Iter<'_, usize, SkippedField>
pub fn iter_skipped(&self) -> Iter<'_, usize, SkippedField>
Returns an iterator over the skipped fields.
Each item in the iterator is a tuple containing:
- The reflected index of the field
- The (de)serialization metadata of the field
Trait Implementations§
source§impl Clone for SerializationData
impl Clone for SerializationData
source§fn clone(&self) -> SerializationData
fn clone(&self) -> SerializationData
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreAuto Trait Implementations§
impl RefUnwindSafe for SerializationData
impl Send for SerializationData
impl Sync for SerializationData
impl Unpin for SerializationData
impl UnwindSafe for SerializationData
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.