Expand description
§enum_dict
A Rust library for efficient enum-indexed dictionaries.
§Installation
Add to your Cargo.toml:
[dependencies]
enum_dict = { version = "0.1", features = ["full"] }§Quick Start
use enum_dict::{DictKey, FromStr, required_dict, optional_dict};
#[derive(DictKey, FromStr)]
enum Color {
Red,
Green,
Blue,
}
fn main() {
// `RequiredDict` - all keys must have values
let mut colors = required_dict! {
Color::Red => "#FF0000",
Color::Green => "#00FF00",
Color::Blue => "#0000FF",
};
// Direct indexing - no `.get()` needed!
println!("Red hex: {}", colors[Color::Red]);
// Mutable access
colors[Color::Red] = "#FF0001";
// `OptionalDict` - keys may or may not have values
let favorite_colors = optional_dict! {
Color::Blue => "Sky Blue",
};
// Returns `Option<&str>`
if let Some(favorite) = favorite_colors[Color::Blue] {
println!("Favorite blue: {}", favorite);
}
}§Serde Support
With the serde feature enabled, RequiredDict and OptionalDict can be serialized and deserialized using serde:
use enum_dict::{DictKey, RequiredDict};
use serde::{Serialize, Deserialize};
#[derive(DictKey)]
enum Locale {
EN,
FR,
JP,
ZH,
}
#[derive(Serialize, Deserialize)]
struct I18nMessage {
translations: RequiredDict<Locale, String>,
}Extra keys in the serialized data are ignored during deserialization.
§Why enum_dict?
Compared to traditional HashMap approach, enum_dict uses Vec under the hood, allowing for:
- Direct Indexing: Access values with
dict[key]instead ofdict.get(&key). - Performance: Faster access times due to contiguous memory layout.
- Type Safety: Compile-time checks ensure all enum variants are handled.
- Simplicity: Less boilerplate code for common use cases.
Macros§
Structs§
- Optional
Dict - A dictionary where keys may or may not have values
- Required
Dict - A dictionary that requires all keys to have values