#enums #map #structure #no-std

no-std const-assoc

A const-capable Map type backed by a static array

1 unstable release

0.1.0 Feb 1, 2025

#384 in Embedded development

Download history 57/week @ 2025-01-26 75/week @ 2025-02-02

132 downloads per month

MIT/Apache

19KB
324 lines

const-assoc

A no_std-compatible, const-capable associative array with minimal or no runtime overhead.

Currently, keys are limited to enums with a primitive representation. In the future, it might be possible to support other types, possibly at the expense of not exposing const-qualified methods for these key types or some runtime overhead.

Example

use const_assoc::{assoc, PrimitiveEnum};

#[repr(u8)]
#[derive(Copy, Clone, PrimitiveEnum)]
enum Letter {
   A,
   B,
   C,
}

fn main() {
   let letters = assoc! {
       Letter::A => 'a',
       Letter::B => 'b',
       Letter::C => 'c',
   };

   assert_eq!(letters[Letter::A], 'a');
   assert_eq!(letters[Letter::C], 'c');
}

lib.rs:

A no_std-compatible, const-capable associative array with minimal or no runtime overhead.

Currently, keys are limited to enums with a primitive representation. In the future, it might be possible to support other types, possibly at the expense of not exposing const-qualified methods for these key types or some runtime overhead.

Example

use const_assoc::{assoc, PrimitiveEnum};

#[repr(u8)]
#[derive(Copy, Clone, PrimitiveEnum)]
enum Letter {
    A,
    B,
    C,
}

let letters = assoc! {
    Letter::A => 'a',
    Letter::B => 'b',
    Letter::C => 'c',
};

assert_eq!(letters[Letter::A], 'a');
assert_eq!(letters[Letter::C], 'c');

Dependencies

~0.6–1MB
~22K SLoC