init-hook 2.0.0

Guaranteed one-time initialization
Documentation

License License Cargo Documentation

Init Hook

This crate allows registering functions for guaranteed initialization during main

Example

use std::sync::atomic::{AtomicUsize, Ordering};
static COUNTER: AtomicUsize = AtomicUsize::new(0);

// Register function to be called exactly once during init
#[init_hook::call_on_init]
fn init_once() {
    COUNTER.fetch_add(1, Ordering::Release);
}

// Registered functions can also be unsafe
#[init_hook::call_on_init]
unsafe fn init_once_unchecked() {
    COUNTER.fetch_add(1, Ordering::Release);
}

fn main() {
    // This is enforced by a pre-main assertion to always be included exactly once
    init_hook::init!();
    assert_eq!(COUNTER.load(Ordering::Acquire), 2);
}

Platform support

Linux macOS Windows FreeBSD OpenBSD illumos Other
💚 💚 💚 💚 💚 💚

License