[](https://crates.io/crates/portable_atomic_enum)
[](https://docs.rs/atomic_enum/latest/portable_atomic_enum/)
# portable_atomic_enum
This crate is a fork of [atomic_enum](https://github.com/brain0/atomic_enum) and uses
`portable-atomic` to support more targets.
An attribute to create an atomic wrapper around a C-style enum.
Internally, the generated wrapper uses an `AtomicUsize` to store the value.
The atomic operations have the same semantics as the equivalent operations
of `AtomicUsize`.
# Example
```rust
# use atomic_enum::atomic_enum;
# use std::sync::atomic::Ordering;
#[atomic_enum]
#[derive(Clone, Copy, Debug, PartialEq)]
enum CatState {
Dead = 0,
BothDeadAndAlive,
Alive,
}
let state = AtomicCatState::new(CatState::Dead);
state.store(CatState::Alive, Ordering::Relaxed);
assert_eq!(state.load(Ordering::Relaxed), CatState::Alive);
```
This attribute does not use or generate any unsafe code.
The crate can be used in a `#[no_std]` environment.