| Crates.io | enum-toggles |
| lib.rs | enum-toggles |
| version | 1.2.1 |
| created_at | 2025-05-29 20:33:53.529019+00 |
| updated_at | 2025-11-01 17:48:22.925705+00 |
| description | A generic Rust library for managing toggles/flags using enums and bitvec. |
| homepage | |
| repository | https://github.com/Jxtopher/enum-toggles-rs |
| max_upload_size | |
| id | 1694299 |
| size | 235,940 |
A generic Rust library for managing toggles/flags using enums and bitvec.
This crate provides a toggle manager that can load from a file. Toggle states are read-only and accessed in O(1) time. There's a direct relationship where each string name corresponds to a unique name in the enum.
Cargo.toml:cargo add enum-toggles strum strum_macros
toggles.yaml conains:FeatureA: 0
FeatureB: 1
use enum_toggles::EnumToggles;
use strum_macros::{AsRefStr, EnumIter};
#[derive(AsRefStr, EnumIter, PartialEq)]
enum MyToggle {
FeatureA,
FeatureB,
}
let mut toggles: EnumToggles::<MyToggle> = EnumToggles::new();
toggles.set(MyToggle::FeatureA as usize, true);
toggles.set_by_name("FeatureB", true); // Mapped to MyToggle::FeatureB
// toggles.load_from_file("toggles.yaml"); // Load toggles state from file
println!("{:?}", toggles);
use enum_toggles::EnumToggles;
use log::warn;
use std::env;
use std::ops::Deref;
use std::sync::LazyLock;
use strum_macros::{AsRefStr, EnumIter};
#[derive(AsRefStr, EnumIter, PartialEq)]
enum MyToggle {
FeatureA,
FeatureB,
}
pub static TOGGLES: LazyLock<EnumToggles<MyToggle>> = LazyLock::new(|| {
let mut toggle:EnumToggles<MyToggle> = EnumToggles::new();
let filepath = env::var("TOGGLES_FILE");
match filepath {
Ok(path) => {
if !path.is_empty() {
toggle.load_from_file(&path)
}
}
Err(_) => warn!("Environment variable TOGGLES_FILE not set"),
}
toggle
});
println!("{:?}", TOGGLES.deref());