#reflection #looking #derive #instance #enums #type-erasure #looking-glass

macro looking-glass-derive

looking-glass is a reflection & type-erasure library for Rust

2 releases

0.1.1 Jan 7, 2022
0.1.0 Jan 7, 2022

#33 in #looking

Download history 14/week @ 2024-02-18 29/week @ 2024-02-25 8/week @ 2024-03-03 15/week @ 2024-03-10

66 downloads per month
Used in 3 crates

MIT license

17KB
350 lines

Looking Glass

Looking Glass provides reflection for virtually any Rust type. It does this through a set of traits and type-erasing enums.

This project was recently open-sourced and will have better documentation written up later. For now, the best way to check out the project is to clone it and look at the Rust docs. While this project was only recently open-sourced, it has been iterated on to a point of relative stability. We can't promise that the API won't change, especially for a good reason. But it currently suits all of M10's needs, and so is unlikely to change drastically.

Example

use looking_glass::Typed;
use looking_glass_derive::Instance;

#[derive(Instance, Clone, PartialEq)]
struct Foo {
 text: String,
 int: i32,
}

let test = Foo { text: "Test".to_string(), int: -2 };
let val = test.as_value();
let inst = val.as_reflected_struct().unwrap();
let value  = inst.get_value("text").expect("field not found");
let text = value.as_ref().borrow::<&String>().expect("borrow failed");
assert_eq!(text, &test.text);

Dependencies

~1.5MB
~41K SLoC