2 releases

0.1.1 Oct 12, 2022
0.1.0 Oct 3, 2022

#467 in #generic

Download history 2/week @ 2024-02-07 10/week @ 2024-02-14 18/week @ 2024-02-21 49/week @ 2024-02-28 41/week @ 2024-03-06 15/week @ 2024-03-13 16/week @ 2024-03-20 13/week @ 2024-03-27

87 downloads per month
Used in 4 crates (via rusty-value)

Apache-2.0

9KB
171 lines

Rusty Value

This crate adds a RustyValue trait that can be derived for all types (except unions) to create a generic value that represents a rust value. This can be used to implement serialization of types without having to rely on serde.

Usage

The trait RustyValue allows one to create a rusty_value::Value for any type that implements it. This trait can be derived if the derive feature is enabled.

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"),
  }
}

Converting a type into a rusty value cannot fail as rusty_value::RustyValue is able to represent any safe rust data type. The trait RustyValue is already implemented for most std types and can therefore be easily derived.

Dependencies

~1.5MB
~34K SLoC