Skip to main content

matchmaker/utils/
types.rs

1use std::borrow::Cow;
2
3use cli_boilerplate_automation::{define_either, define_when};
4use ratatui::text::Text;
5
6use crate::utils::text::text_to_string;
7
8define_either! {
9    #[derive(serde::Serialize, serde::Deserialize)]
10    #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
11    pub enum Either<L, R = L> {
12        Left,
13        Right
14    }
15}
16
17define_when! {
18    #[derive(serde::Serialize, serde::Deserialize)]
19    #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Default)]
20    pub enum When {
21        #[serde(alias = "false", alias = "never")]
22        Never,
23        #[default]
24        #[serde(alias = "auto")]
25        Auto,
26        #[serde(alias = "true", alias = "always")]
27        Always
28    }
29}
30
31impl Either<String, Text<'static>> {
32    pub fn to_cow(&self) -> Cow<'_, str> {
33        match self {
34            Either::Left(s) => Cow::Borrowed(s),
35            Either::Right(t) => Cow::Owned(text_to_string(t)),
36        }
37    }
38
39    pub fn to_text(self) -> Text<'static> {
40        match self {
41            Either::Left(s) => Text::from(s),
42            Either::Right(t) => t,
43        }
44    }
45}