Expand description
§int_like
A Rust macro for defining integer-backed opaque types safely.
This crate provides a convenient way to create new types that are backed by
primitive integers (typically usize
), providing type safety without
compromising performance.
The original code was inspired by Redox OS and has been adapted for general use.
§Examples
§Simple Opaque Type
use int_like::int_like;
/// Define an opaque type `Pid` backed by a `usize`.
int_like!(Pid, usize);
const ZERO: Pid = Pid::from(0);
let pid = Pid::from(42);
assert_eq!(pid.into(), 42);
§With Atomic Support
use int_like::int_like;
use std::sync::atomic::{AtomicUsize, Ordering};
/// Define opaque types `Pid` and `AtomicPid`, backed respectively by a `usize`
/// and an `AtomicUsize`.
int_like!(Pid, AtomicPid, usize, AtomicUsize);
const ZERO: Pid = Pid::from(0);
let ATOMIC_PID: AtomicPid = AtomicPid::default();
// Atomic operations
ATOMIC_PID.store(Pid::from(100), Ordering::SeqCst);
let value = ATOMIC_PID.load(Ordering::SeqCst);
assert_eq!(value, Pid::from(100));
Helpers used to define types that are backed by integers (typically usize
),
without compromising safety.
§Example
use int_like::int_like;
/// Define an opaque type `Pid` backed by a `usize`.
int_like!(Pid, usize);
const ZERO: Pid = Pid::from(0);
§Example
use int_like::int_like;
use std::sync::atomic::AtomicUsize;
/// Define opaque types `Pid` and `AtomicPid`, backed respectively by a `usize`
/// and a `AtomicUsize`.
int_like!(Pid, AtomicPid, usize, AtomicUsize);
const ZERO: Pid = Pid::from(0);
let ATOMIC_PID: AtomicPid = AtomicPid::default();