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 Freeze for SerializationData
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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.