pub trait Reflect: ReflectBase {
Show 25 methods
// Required methods
fn source_path() -> &'static str
where Self: Sized;
fn type_name(&self) -> &'static str;
fn doc(&self) -> &'static str;
fn fields_info(&self, func: &mut dyn FnMut(&[FieldInfo<'_, '_>]));
fn into_any(self: Box<Self>) -> Box<dyn Any>;
fn as_any(&self, func: &mut dyn FnMut(&(dyn Any + 'static)));
fn as_any_mut(&mut self, func: &mut dyn FnMut(&mut (dyn Any + 'static)));
fn as_reflect(&self, func: &mut dyn FnMut(&(dyn Reflect + 'static)));
fn as_reflect_mut(
&mut self,
func: &mut dyn FnMut(&mut (dyn Reflect + 'static)),
);
fn set(
&mut self,
value: Box<dyn Reflect>,
) -> Result<Box<dyn Reflect>, Box<dyn Reflect>>;
fn assembly_name(&self) -> &'static str;
fn type_assembly_name() -> &'static str
where Self: Sized;
// Provided methods
fn set_field(
&mut self,
field: &str,
value: Box<dyn Reflect>,
func: &mut dyn FnMut(Result<Box<dyn Reflect>, Box<dyn Reflect>>),
) { ... }
fn fields(&self, func: &mut dyn FnMut(&[&(dyn Reflect + 'static)])) { ... }
fn fields_mut(
&mut self,
func: &mut dyn FnMut(&mut [&mut (dyn Reflect + 'static)]),
) { ... }
fn field(
&self,
name: &str,
func: &mut dyn FnMut(Option<&(dyn Reflect + 'static)>),
) { ... }
fn field_mut(
&mut self,
name: &str,
func: &mut dyn FnMut(Option<&mut (dyn Reflect + 'static)>),
) { ... }
fn as_array(
&self,
func: &mut dyn FnMut(Option<&(dyn ReflectArray + 'static)>),
) { ... }
fn as_array_mut(
&mut self,
func: &mut dyn FnMut(Option<&mut (dyn ReflectArray + 'static)>),
) { ... }
fn as_list(
&self,
func: &mut dyn FnMut(Option<&(dyn ReflectList + 'static)>),
) { ... }
fn as_list_mut(
&mut self,
func: &mut dyn FnMut(Option<&mut (dyn ReflectList + 'static)>),
) { ... }
fn as_inheritable_variable(
&self,
func: &mut dyn FnMut(Option<&(dyn ReflectInheritableVariable + 'static)>),
) { ... }
fn as_inheritable_variable_mut(
&mut self,
func: &mut dyn FnMut(Option<&mut (dyn ReflectInheritableVariable + 'static)>),
) { ... }
fn as_hash_map(
&self,
func: &mut dyn FnMut(Option<&(dyn ReflectHashMap + 'static)>),
) { ... }
fn as_hash_map_mut(
&mut self,
func: &mut dyn FnMut(Option<&mut (dyn ReflectHashMap + 'static)>),
) { ... }
}
Expand description
Trait for runtime reflection
Derive macro is available.
§Type attributes
#[reflect(hide_all)]
: Hide all fields, just likeAny
#[reflect(bounds)]
: Add type boundary forReflect
impl
§Field attributes
#[reflect(deref)]
: Delegate the field access with deref#[reflect(field = <method call>)]
#[reflect(field_mut = <method call>)]
§Additional Trait Bounds
Reflect
restricted to types that implement Debug
trait, this is needed to convert the actual value
to string. Display
isn’t used here, because it can’t be derived and it is very tedious to implement it
for every type that should support Reflect
trait. It is a good compromise between development speed
and the quality of the string output.
Required Methods§
fn source_path() -> &'static strwhere
Self: Sized,
fn type_name(&self) -> &'static str
fn doc(&self) -> &'static str
fn fields_info(&self, func: &mut dyn FnMut(&[FieldInfo<'_, '_>]))
fn into_any(self: Box<Self>) -> Box<dyn Any>
fn as_any(&self, func: &mut dyn FnMut(&(dyn Any + 'static)))
fn as_any_mut(&mut self, func: &mut dyn FnMut(&mut (dyn Any + 'static)))
fn as_reflect(&self, func: &mut dyn FnMut(&(dyn Reflect + 'static)))
fn as_reflect_mut(&mut self, func: &mut dyn FnMut(&mut (dyn Reflect + 'static)))
fn set( &mut self, value: Box<dyn Reflect>, ) -> Result<Box<dyn Reflect>, Box<dyn Reflect>>
Sourcefn assembly_name(&self) -> &'static str
fn assembly_name(&self) -> &'static str
Returns a parent assembly name of the type that implements this trait. WARNING: You should use
proc-macro (#[derive(Reflect)]
) to ensure that this method will return correct assembly
name. In other words - there’s no guarantee, that any implementation other than proc-macro
will return a correct name of the assembly. Alternatively, you can use env!("CARGO_PKG_NAME")
as an implementation.
Sourcefn type_assembly_name() -> &'static strwhere
Self: Sized,
fn type_assembly_name() -> &'static strwhere
Self: Sized,
Returns a parent assembly name of the type that implements this trait. WARNING: You should use
proc-macro (#[derive(Reflect)]
) to ensure that this method will return correct assembly
name. In other words - there’s no guarantee, that any implementation other than proc-macro
will return a correct name of the assembly. Alternatively, you can use env!("CARGO_PKG_NAME")
as an implementation.
Provided Methods§
Sourcefn set_field(
&mut self,
field: &str,
value: Box<dyn Reflect>,
func: &mut dyn FnMut(Result<Box<dyn Reflect>, Box<dyn Reflect>>),
)
fn set_field( &mut self, field: &str, value: Box<dyn Reflect>, func: &mut dyn FnMut(Result<Box<dyn Reflect>, Box<dyn Reflect>>), )
Calls user method specified with #[reflect(setter = ..)]
or falls back to
Reflect::field_mut
fn fields(&self, func: &mut dyn FnMut(&[&(dyn Reflect + 'static)]))
fn fields_mut( &mut self, func: &mut dyn FnMut(&mut [&mut (dyn Reflect + 'static)]), )
fn field( &self, name: &str, func: &mut dyn FnMut(Option<&(dyn Reflect + 'static)>), )
fn field_mut( &mut self, name: &str, func: &mut dyn FnMut(Option<&mut (dyn Reflect + 'static)>), )
fn as_array(&self, func: &mut dyn FnMut(Option<&(dyn ReflectArray + 'static)>))
fn as_array_mut( &mut self, func: &mut dyn FnMut(Option<&mut (dyn ReflectArray + 'static)>), )
fn as_list(&self, func: &mut dyn FnMut(Option<&(dyn ReflectList + 'static)>))
fn as_list_mut( &mut self, func: &mut dyn FnMut(Option<&mut (dyn ReflectList + 'static)>), )
fn as_inheritable_variable( &self, func: &mut dyn FnMut(Option<&(dyn ReflectInheritableVariable + 'static)>), )
fn as_inheritable_variable_mut( &mut self, func: &mut dyn FnMut(Option<&mut (dyn ReflectInheritableVariable + 'static)>), )
fn as_hash_map( &self, func: &mut dyn FnMut(Option<&(dyn ReflectHashMap + 'static)>), )
fn as_hash_map_mut( &mut self, func: &mut dyn FnMut(Option<&mut (dyn ReflectHashMap + 'static)>), )
Implementations§
Source§impl dyn Reflect
Type-erased API
impl dyn Reflect
Type-erased API
pub fn downcast<T>(self: Box<dyn Reflect>) -> Result<Box<T>, Box<dyn Reflect>>where
T: Reflect,
pub fn take<T>(self: Box<dyn Reflect>) -> Result<T, Box<dyn Reflect>>where
T: Reflect,
pub fn is<T>(&self) -> boolwhere
T: Reflect,
pub fn downcast_ref<T>(&self, func: &mut dyn FnMut(Option<&T>))where
T: Reflect,
pub fn downcast_mut<T>(&mut self, func: &mut dyn FnMut(Option<&mut T>))where
T: Reflect,
Sourcepub fn set_field_by_path<'p>(
&mut self,
path: &'p str,
value: Box<dyn Reflect>,
func: &mut dyn FnMut(Result<Box<dyn Reflect>, SetFieldByPathError<'p>>),
)
pub fn set_field_by_path<'p>( &mut self, path: &'p str, value: Box<dyn Reflect>, func: &mut dyn FnMut(Result<Box<dyn Reflect>, SetFieldByPathError<'p>>), )
Sets a field by its path in the given entity. This method always uses Reflect::set_field
which means,
that it will always call custom property setters.