]>
git.proxmox.com Git - cargo.git/blob - vendor/concolor/src/color/choice.rs
1 use std
::sync
::atomic
::{AtomicUsize, Ordering}
;
4 pub(crate) struct AtomicChoice(AtomicUsize
);
7 pub(crate) const fn new() -> Self {
8 Self(AtomicUsize
::new(Self::from_choice(
9 crate::ColorChoice
::Auto
,
13 pub(crate) fn get(&self) -> crate::ColorChoice
{
14 let choice
= self.0.load(Ordering
::SeqCst
);
15 Self::to_choice(choice
).unwrap()
18 #[cfg(feature = "api_unstable")]
19 pub(crate) fn set(&self, choice
: crate::ColorChoice
) {
20 let choice
= Self::from_choice(choice
);
21 self.0.store(choice
, Ordering
::SeqCst
);
24 const fn from_choice(choice
: crate::ColorChoice
) -> usize {
26 crate::ColorChoice
::Auto
=> 0,
27 crate::ColorChoice
::AlwaysAnsi
=> 1,
28 crate::ColorChoice
::Always
=> 2,
29 crate::ColorChoice
::Never
=> 3,
33 const fn to_choice(choice
: usize) -> Option
<crate::ColorChoice
> {
35 0 => Some(crate::ColorChoice
::Auto
),
36 1 => Some(crate::ColorChoice
::AlwaysAnsi
),
37 2 => Some(crate::ColorChoice
::Always
),
38 3 => Some(crate::ColorChoice
::Never
),
44 impl Default
for AtomicChoice
{
45 fn default() -> Self {
55 fn choice_serialization() {
57 crate::ColorChoice
::Auto
,
58 crate::ColorChoice
::AlwaysAnsi
,
59 crate::ColorChoice
::Always
,
60 crate::ColorChoice
::Never
,
62 let values
: Vec
<_
> = expected
65 .map(AtomicChoice
::from_choice
)
67 let actual
: Vec
<_
> = values
70 .map(AtomicChoice
::to_choice
)
73 assert_eq
!(expected
, actual
);