KeyArray
KeyArray is like a row of buttons—exactly one button (the current key) is “pressed” at any time. Use it to model mutually exclusive states, mode selectors, toggles, or feature flags in your Rust projects.
Features
- Fixed-length list of keys where only one key is active
- O(1) switching of the active key by index
- Inspect current index, current key, or all keys
- Dynamically push, insert, or remove keys at runtime
Installation
Add KeyArray to your project with Cargo:
[dependencies]
keyarray = "0.1.0"
API Review
| Method | Example | Description |
|---|---|---|
KeyArray::new(keys: [K; N]) |
let arr = KeyArray::new(["On", "Off", "Auto"]); |
Create a new key array, defaulting to index 0 |
KeyArray::new_with(keys, i) |
let arr = KeyArray::new_with(["Low", "Med", "High"], 2); |
Create with an explicit starting index |
change(i) |
arr.change(1); |
Switch the active key by index (panics if out of bounds) |
current_index() |
let idx = arr.current_index(); |
Get the currently active key’s index |
current() |
let key = arr.current(); |
Get a reference to the currently active key |
keys() |
let all = arr.keys(); |
Borrow the slice of all keys |
push(key) |
arr.push("Turbo"); |
Append a key to the end |
insert(i, key) |
arr.insert(1, "Inserted"); |
Insert a key at a specific index |
remove(i) |
let removed = arr.remove(0); |
Remove and return the key at the given index |
Example
use keyarray::KeyArray;
fn main() {
// Create with a default active key (index 0)
let mut mykeys = KeyArray::new(["On", "Off", "Auto"]);
// Create with an explicit starting index
let mut other = KeyArray::new_with(["Low", "Medium", "High"], 2);
// Change the active key by index (panics if out of bounds)
mykeys.change(1);
// Inspect the current state
let idx = mykeys.current_index(); // 1
let key = mykeys.current(); // "Off"
let all = mykeys.keys(); // &["On", "Off", "Auto"]
// Dynamically edit the key list
mykeys.push("Turbo"); // ["On", "Off", "Auto", "Turbo"]
mykeys.insert(1, "Inserted"); // ["On", "Inserted", "Off", ...]
let removed = mykeys.remove(0); // removes and returns "On"
}