Serde-based in-memory key serialization.
This allows any serde-serializable type to be converted into a Value
which
implements PartialEq
, Eq
, ParialOrd
, Ord
, and Hash
. The only
limitation is that the type can't serialize floating point values. This
might be lifted in the future by specifying policies for dealing with
non-finite values.
Key
is useful because it allows for a form of type-erasure. Let's say you
want to build a generic in-memory key-value store where you want to store
arbitrary serde-serializable keys. This is typical for things like caches or
dependency injection frameworks.
You can run this example with
cargo run --example book
```rust use serdederive::{Deserialize, Serialize}; use serdehashkey::{fromkey, tokey, Error, Key}; use std::{collections::HashMap, error};
struct Author { name: String, age: u32, }
struct Book { title: String, author: Author, }
fn main() -> Result<(), Box
let key = to_key(&book)?;
let mut ratings = HashMap::new();
ratings.insert(key.clone(), 5);
println!("ratings: {:?}", ratings);
println!(
"book as json (through key): {}",
serde_json::to_string_pretty(&key)?
);
println!(
"book as json (through original object): {}",
serde_json::to_string_pretty(&book)?
);
Ok(())
} ```
License: MIT/Apache-2.0