scsys_core/sync/atomic/
order.rs1use core::sync::atomic::Ordering;
6use strum::{AsRefStr, Display, EnumCount, EnumIs, EnumIter, EnumString, VariantNames};
7
8#[derive(
9 AsRefStr,
10 Clone,
11 Copy,
12 Debug,
13 Default,
14 Display,
15 EnumCount,
16 EnumIs,
17 EnumIter,
18 EnumString,
19 Eq,
20 Hash,
21 Ord,
22 PartialEq,
23 PartialOrd,
24 VariantNames,
25)]
26#[cfg_attr(
27 feature = "serde",
28 derive(serde::Deserialize, serde::Serialize),
29 serde(rename_all = "snake_case", untagged)
30)]
31#[strum(serialize_all = "snake_case")]
32pub enum AtomicOrder {
33 Acquire,
34 AcqRel,
35 #[default]
36 Relaxed,
37 Release,
38 SeqCst,
39}
40
41impl From<AtomicOrder> for Ordering {
42 fn from(order: AtomicOrder) -> Self {
43 match order {
44 AtomicOrder::Acquire => Ordering::Acquire,
45 AtomicOrder::AcqRel => Ordering::AcqRel,
46 AtomicOrder::Relaxed => Ordering::Relaxed,
47 AtomicOrder::Release => Ordering::Release,
48 AtomicOrder::SeqCst => Ordering::SeqCst,
49 }
50 }
51}
52
53impl From<Ordering> for AtomicOrder {
54 fn from(order: Ordering) -> Self {
55 match order {
56 Ordering::Acquire => AtomicOrder::Acquire,
57 Ordering::AcqRel => AtomicOrder::AcqRel,
58 Ordering::Release => AtomicOrder::Release,
59 Ordering::SeqCst => AtomicOrder::SeqCst,
60 _ => AtomicOrder::Relaxed,
61 }
62 }
63}