matchmaker/utils/
types.rs1use 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}