Crate rusty_value
source · [−]Expand description
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.
Structs
Represents an enum with a given variant
And fields depending on that variant
Represents a struct with fields
Enums
Fields of a struct or an enum that are either named, unnamed or not defined (Unit enums/structs)
A primitive float value
A primitive that can be used as a hash map key
A value that can be used as a key inside a hash map
A primitive integer value
A rust primitive value
Represents a generic rust value