1 unstable release
0.1.0 | Jun 26, 2024 |
---|
#64 in #reflection
30KB
279 lines
Reflectix
Overview
Reflectix is a Rust crate that provides primitive runtime type reflection. It allows you to inspect and manipulate types at runtime, enabling dynamic behavior in your Rust programs.
Example
#[derive(reflectix::TypeInfo, Default)]
pub struct Foo {
pub x: i32,
pub y: i32,
}
pub fn modify_field_of_erased(obj: &mut dyn reflectix::TypeInfoDynamic) {
let field = obj.field_mut("x".into()).unwrap();
let ref_field = field.downcast_mut::<i32>().unwrap();
*ref_field = 42;
}
pub fn main() {
let mut foo = Foo::default();
let erased = &mut foo;
modify_field_of_erased(erased);
assert_eq!(foo.x, 42);
}
Features
-
Type Reflection: Reflectix allows you to reflect on types at runtime, providing information about their structure, fields, and more.
-
Type Manipulation: Reflectix provides utilities for manipulating types at runtime, such as creating new instances, modifying existing objects, and inspecting type hierarchies.
Installation
To use Reflectix in your Rust project, add the following line to your Cargo.toml
file:
[dependencies]
Reflectix = "0.1"
Dependencies
~245–710KB
~17K SLoC