2 个不稳定版本
0.1.0 | 2022 年 1 月 3 日 |
---|---|
0.0.0 | 2021 年 3 月 9 日 |
644 在 调试 中排名 644
每月下载量 2,681,776
用于 8,460 个代码包 (直接使用 27 个)
130KB
1.5K SLoC
Valuable
Valuable 提供对象安全的值检查。用例包括将结构化数据传递到特对象和对象安全的序列化。
许可证
本项目采用 MIT 许可证。
贡献
除非你明确表示,否则你提交给 Valuable 的任何有意贡献都将按照 MIT 许可证许可,不附加任何额外的条款或条件。
lib.rs
:
Valuable 提供对象安全的值检查。用例包括将结构化数据传递到特对象和对象安全的序列化。
入门
首先,在你的类型上派生 [Valuable
][macro@crate::Valuable]。
use valuable::Valuable;
#[derive(Valuable)]
struct HelloWorld {
message: Message,
}
#[derive(Valuable)]
enum Message {
HelloWorld,
Custom(String),
}
然后,实现一个 [访问者][Visit] 来检查数据。
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);
}
}
然后,使用访问者来访问值。
let hello_world = HelloWorld { message: Message::HelloWorld };
hello_world.visit(&mut Print);
依赖项
~220KB