#value #generic #rusty #primitive #derive #primitive-integer #enums

rusty-value

从任何 Rust 类型创建一个可检查的泛型值

10 个版本 (5 个重大变更)

0.6.0 2022年10月18日
0.5.1 2022年10月12日
0.4.2 2022年10月5日
0.3.0 2022年10月5日
0.1.0 2022年10月3日

#2638Rust 模式


用于 4 个 crate (3 个直接)

Apache-2.0

25KB
573

Rusty Value

此 crate 为所有类型(除联合外)添加了一个可派生的 RustyValue trait,以创建一个表示 Rust 值的泛型值。这可以用于实现类型的序列化,而无需依赖 serde。

用法

RustyValue trait 允许为任何实现它的类型创建一个 rusty_value::Value。如果启用了 derive 功能,则可以派生此 trait。

use rusty_value::*;

#[derive(RustyValue)]
struct MyStruct {
  foo: String,
  bar: u8,
}

fn main() {
  let value = MyStruct {
    foo: "Hello World".to_string(),
    bar: 12,
  }.into_rusty_value();

  match value {
      Value::Primitive(p) => match p {
          rusty_value::Primitive::Integer(_) => println!("is an integer"),
          rusty_value::Primitive::Float(_) => println!("is a float"),
          rusty_value::Primitive::String(_) => println!("is a string"),
          rusty_value::Primitive::OsString(_) => println!("is a os string"),
          rusty_value::Primitive::Char(_) => println!("is a char"),
          rusty_value::Primitive::Bool(_) => println!("is a boolean"),
      },
      Value::Struct(s) => println!("is a struct with name {}", s.name),
      Value::Enum(e) => println!("is an enum with name {} of variant {}", e.name, e.variant),
      Value::Map(_) => println!("is a map"),
      Value::List(_) => println!("is a list"),
      Value::None => println!("is none"),
  }
}

将类型转换为 rusty 值不会失败,因为 rusty_value::RustyValue 能够表示任何安全的 Rust 数据类型。由于 RustyValue trait 已经为大多数 std 类型实现,因此可以轻松派生。

依赖关系

~0–275KB