1use serde::{Deserialize, Serialize};
2#[cfg(feature = "cli")]
3use structopt::clap::arg_enum;
4
5#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
6pub enum NoiseLevel {
7 Polite,
8 LoudAndProud,
9 FranklyQuitePedantic,
10}
11
12impl Default for NoiseLevel {
13 fn default() -> Self {
14 Self::Polite
15 }
16}
17
18impl NoiseLevel {
19 pub fn from_occurrences(occurrences: u64) -> Self {
20 match occurrences {
21 0 => Self::Polite,
22 1 => Self::LoudAndProud,
23 _ => Self::FranklyQuitePedantic,
24 }
25 }
26
27 pub fn polite(self) -> bool {
28 matches!(self, Self::Polite)
29 }
30
31 pub fn loud(self) -> bool {
32 matches!(self, Self::LoudAndProud)
33 }
34
35 pub fn pedantic(self) -> bool {
36 matches!(self, Self::FranklyQuitePedantic)
37 }
38}
39
40#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
41pub enum Profile {
42 Debug,
43 Release,
44}
45
46impl Profile {
47 pub fn from_flag(flag: bool) -> Self {
48 if flag {
49 Self::Release
50 } else {
51 Self::Debug
52 }
53 }
54
55 pub fn debug(self) -> bool {
56 matches!(self, Self::Debug)
57 }
58
59 pub fn release(self) -> bool {
60 matches!(self, Self::Release)
61 }
62
63 pub fn as_str(&self) -> &'static str {
64 match self {
65 Self::Debug => "debug",
66 Self::Release => "release",
67 }
68 }
69
70 pub fn as_str_pascal_case(&self) -> &'static str {
71 match self {
72 Self::Debug => "Debug",
73 Self::Release => "Release",
74 }
75 }
76
77 pub fn suffixes(&self) -> &[&str] {
78 match self {
79 Profile::Debug => &["debug"],
80 Profile::Release => &["release", "release-unsigned"],
81 }
82 }
83}
84
85#[cfg(not(feature = "cli"))]
87#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
88pub enum FilterLevel {
89 Error,
90 Warn,
91 Info,
92 Debug,
93 Verbose,
94}
95
96#[cfg(feature = "cli")]
97arg_enum! {
98 #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
100 pub enum FilterLevel {
101 Error,
102 Warn,
103 Info,
104 Debug,
105 Verbose,
106 }
107}
108
109impl FilterLevel {
110 pub fn logcat(&self) -> &'static str {
112 match self {
113 Self::Error => "E",
114 Self::Warn => "W",
115 Self::Info => "I",
116 Self::Debug => "D",
117 Self::Verbose => "V",
118 }
119 }
120}