# atomic-primitive
[](https://crates.io/crates/atomic-primitive)
[](https://docs.rs/atomic-primitive)
[](https://rust-lang.github.io/rfcs/2495-min-rust-version.html)
[](https://github.com/vigna/atomic-primitive-rs/actions)
Traits for primitive atomic types in Rust.
These traits provide a simple hierarchy for generic programming with Rust's
primitive atomic types:
- [`PrimitiveAtomic`]: [`AtomicBool`] and all atomic integer types;
- [`PrimitiveAtomicInteger`]: all atomic integer types;
- [`PrimitiveAtomicSigned`]: [`AtomicI8`], [`AtomicI16`], [`AtomicI32`],
[`AtomicIsize`], and on targets with 64-bit atomics, [`AtomicI64`];
- [`PrimitiveAtomicUnsigned`]: [`AtomicU8`], [`AtomicU16`], [`AtomicU32`],
[`AtomicUsize`], and on targets with 64-bit atomics, [`AtomicU64`].
Additionally, [`AtomicPrimitive`] maps non-atomic primitive types to their
atomic counterparts, mirroring the unstable
[`core::sync::atomic::AtomicPrimitive`] trait.
The goal of this crate is to provide the same functionality as the [`num-primitive`]
crate for atomic types.
It is not a goal of this crate to _add_ any functionality to the atomic types,
only to expose what is already available in the standard library in a more
generic way, and make a few experimental traits and types available on stable.
The only addition is an [`AtomicPrimitive`] bound on [`PrimitiveAtomic::Value`],
which enables bidirectional navigation between atomic and non-atomic types.
The traits are also [sealed] against downstream implementations to allow
expansion in a non-breaking way.
## Compatibility
This crate is currently tested for Rust 1.85 and greater.
[`PrimitiveAtomic`]: https://docs.rs/atomic-primitive/latest/atomic_primitive/trait.PrimitiveAtomic.html
[`PrimitiveAtomic::Value`]: https://docs.rs/atomic-primitive/latest/atomic_primitive/trait.PrimitiveAtomic.html#associatedtype.Value
[`PrimitiveAtomicInteger`]: https://docs.rs/atomic-primitive/latest/atomic_primitive/trait.PrimitiveAtomicInteger.html
[`PrimitiveAtomicSigned`]: https://docs.rs/atomic-primitive/latest/atomic_primitive/trait.PrimitiveAtomicSigned.html
[`PrimitiveAtomicUnsigned`]: https://docs.rs/atomic-primitive/latest/atomic_primitive/trait.PrimitiveAtomicUnsigned.html
[`AtomicPrimitive`]: https://docs.rs/atomic-primitive/latest/atomic_primitive/trait.AtomicPrimitive.html
[`AtomicBool`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicBool.html
[`AtomicU8`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU8.html
[`AtomicU16`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU16.html
[`AtomicU32`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU32.html
[`AtomicU64`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU64.html
[`AtomicUsize`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicUsize.html
[`AtomicI8`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicI8.html
[`AtomicI16`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicI16.html
[`AtomicI32`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicI32.html
[`AtomicI64`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicI64.html
[`AtomicIsize`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicIsize.html
[sealed]: https://rust-lang.github.io/api-guidelines/future-proofing.html#sealed-traits-protect-against-downstream-implementations-c-sealed
[`core::sync::atomic::AtomicPrimitive`]: https://doc.rust-lang.org/core/sync/atomic/trait.AtomicPrimitive.html
[`num-primitive`]: https://crates.io/crates/num-primitive