2 unstable releases
0.1.0 | Jan 3, 2022 |
---|---|
0.0.0 | Mar 9, 2021 |
#794 in Debugging
3,530,087 downloads per month
Used in 9,978 crates
(28 directly)
130KB
1.5K
SLoC
Valuable
Valuable provides object-safe value inspection. Use cases include passing structured data to trait objects and object-safe serialization.
License
This project is licensed under the MIT license.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Valuable by you, shall be licensed as MIT, without any additional terms or conditions.
lib.rs
:
Valuable provides object-safe value inspection. Use cases include passing structured data to trait objects and object-safe serialization.
Getting started
First, derive [Valuable
][macro@crate::Valuable] on your types.
use valuable::Valuable;
#[derive(Valuable)]
struct HelloWorld {
message: Message,
}
#[derive(Valuable)]
enum Message {
HelloWorld,
Custom(String),
}
Then, implement a [visitor][Visit] to inspect the data.
use valuable::{NamedValues, Value, Valuable, Visit};
struct Print;
impl Visit for Print {
fn visit_value(&mut self, value: Value<'_>) {
match value {
Value::Structable(v) => {
println!("struct {}", v.definition().name());
v.visit(self);
}
Value::Enumerable(v) => {
println!("enum {}::{}", v.definition().name(), v.variant().name());
v.visit(self);
}
Value::Listable(v) => {
println!("list");
v.visit(self);
}
Value::Mappable(v) => {
println!("map");
v.visit(self);
}
_ => {
println!("value {:?}", value);
}
}
}
fn visit_named_fields(&mut self, named_fields: &NamedValues<'_>) {
for (field, value) in named_fields.iter() {
println!("named field {}", field.name());
value.visit(self);
}
}
fn visit_unnamed_fields(&mut self, values: &[Value<'_>]) {
for value in values {
value.visit(self);
}
}
fn visit_entry(&mut self, key: Value<'_>, value: Value<'_>) {
println!("key / value");
key.visit(self);
value.visit(self);
}
}
Then, use the visitor to visit the value.
let hello_world = HelloWorld { message: Message::HelloWorld };
hello_world.visit(&mut Print);
Dependencies
~225KB