prealloc 0.1.0

Build time heap-like memory preallocation.
Documentation
use prealloc::prealloc_from_config;

prealloc_from_config!("prealloc/examples/basic/config.json");

#[derive(Debug, PartialEq)]
#[allow(dead_code)]
pub struct MyItem {
    a: u32,
    b: u32,
}

#[derive(Debug)]
#[allow(dead_code)]
pub enum OtherItem {
    L(u32),
    R,
}

impl Drop for OtherItem {
    fn drop(&mut self) {
        println!("Dropping OtherItem at {self:p}");
    }
}

fn main() {
    const ITEM1_INITIALIZER: MyItem = MyItem { a: 1, b: 2 };
    assert_eq!(
        dispatch_static!(Item1, ITEM1_INITIALIZER),
        Some(&mut MyItem { a: 1, b: 2 })
    );
    assert_eq!(
        dispatch_static!(Item1, ITEM1_INITIALIZER),
        Some(&mut MyItem { a: 1, b: 2 })
    );
    assert_eq!(
        dispatch_static!(Item1, ITEM1_INITIALIZER),
        Some(&mut MyItem { a: 1, b: 2 })
    );
    assert_eq!(dispatch_static!(Item1, ITEM1_INITIALIZER), None);

    for idx in 0..11 {
        if let Some(item) = dispatch_static!(Item2, OtherItem::L(33)) {
            println!("Retrieved {idx}: {item:p}");
        } else {
            println!("Item2 already dispatched");
        }
    }
}