#primitive #run-time #reflection

reflectix

Primitive run-time type reflection for Rust

1 unstable release

0.1.0 Jun 26, 2024

#64 in #reflection

GPL-3.0-or-later

30KB
279 lines

Reflectix

Crates.io Documentation License

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