scsys_core/sync/atomic/
order.rs

1/*
2    Appellation: order <mod>
3    Contrib: FL03 <jo3mccain@icloud.com>
4*/
5use 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}