Skip to main content

libaki_mcycle/conf/
mod.rs

1pub use self::parse::parse_cmdopts;
2use crate::util::OptUcXParam;
3pub use parse::CmdOptConf;
4
5mod parse;
6
7impl CmdOptConf {
8    pub fn is_opt_uc_x_help(&self) -> bool {
9        for o in self.opt_uc_x.iter() {
10            if let OptUcXParam::Help = o {
11                return true;
12            }
13        }
14        false
15    }
16    pub fn is_opt_uc_x_package_version_info(&self) -> bool {
17        for o in self.opt_uc_x.iter() {
18            if let OptUcXParam::RustVersionInfo = o {
19                return true;
20            }
21        }
22        false
23    }
24}
25
26use std::env;
27
28#[allow(dead_code)]
29#[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
30pub enum Color {
31    #[default]
32    None,
33    Red,
34    Green,
35    Blue,
36    Cyan,
37    Magenta,
38    Yellow,
39}
40
41#[cfg(test)]
42mod debug {
43    #[test]
44    fn size_of() {
45        assert_eq!(std::mem::size_of::<super::Color>(), 1);
46    }
47}
48
49//
50// ref.) 3-bit and 4-bit color sequence
51//   https://en.wikipedia.org/wiki/ANSI_escape_code
52// * black letters on white background use: ESC[30;47m
53// * red use: ESC[31m
54// * bright red use: ESC[1;31m
55// * reset colors to their defaults: ESC[39;49m (not supported on some terminals)
56// * reset all attributes: ESC[0m
57//
58static COLOR_RED_START: &str = "\u{1B}[31m";
59static COLOR_GREEN_START: &str = "\u{1B}[32m";
60static COLOR_BLUE_START: &str = "\u{1B}[34m";
61static COLOR_CYAN_START: &str = "\u{1B}[36m";
62static COLOR_MAGENTA_START: &str = "\u{1B}[35m";
63static COLOR_YELLOW_START: &str = "\u{1B}[33m";
64static COLOR_END: &str = "\u{1B}[0m";
65
66#[derive(Debug)]
67pub struct EnvConf {
68    pub color_seq_red_start: String,
69    pub color_seq_green_start: String,
70    pub color_seq_blue_start: String,
71    pub color_seq_cyan_start: String,
72    pub color_seq_magenta_start: String,
73    pub color_seq_yellow_start: String,
74    pub color_seq_end: String,
75}
76impl EnvConf {
77    pub fn new() -> Self {
78        //
79        let a_color_red_start = match env::var("AKI_MCYCLE_COLOR_SEQ_RED_ST") {
80            Ok(v) => v,
81            Err(_) => String::from(COLOR_RED_START),
82        };
83        let a_color_green_start = match env::var("AKI_MCYCLE_COLOR_SEQ_GREEN_ST") {
84            Ok(v) => v,
85            Err(_) => String::from(COLOR_GREEN_START),
86        };
87        let a_color_blue_start = match env::var("AKI_MCYCLE_COLOR_SEQ_BLUE_ST") {
88            Ok(v) => v,
89            Err(_) => String::from(COLOR_BLUE_START),
90        };
91        let a_color_cyan_start = match env::var("AKI_MCYCLE_COLOR_SEQ_CYAN_ST") {
92            Ok(v) => v,
93            Err(_) => String::from(COLOR_CYAN_START),
94        };
95        let a_color_magenta_start = match env::var("AKI_MCYCLE_COLOR_SEQ_MAGENTA_ST") {
96            Ok(v) => v,
97            Err(_) => String::from(COLOR_MAGENTA_START),
98        };
99        let a_color_yellow_start = match env::var("AKI_MCYCLE_COLOR_SEQ_YELLOW_ST") {
100            Ok(v) => v,
101            Err(_) => String::from(COLOR_YELLOW_START),
102        };
103        let a_color_end = match env::var("AKI_MCYCLE_COLOR_SEQ_ED") {
104            Ok(v) => v,
105            Err(_) => String::from(COLOR_END),
106        };
107        //
108        Self {
109            color_seq_red_start: a_color_red_start,
110            color_seq_green_start: a_color_green_start,
111            color_seq_blue_start: a_color_blue_start,
112            color_seq_cyan_start: a_color_cyan_start,
113            color_seq_magenta_start: a_color_magenta_start,
114            color_seq_yellow_start: a_color_yellow_start,
115            color_seq_end: a_color_end,
116        }
117    }
118}
119impl std::default::Default for EnvConf {
120    fn default() -> EnvConf {
121        EnvConf::new()
122    }
123}
124
125impl<IKV, K, V> From<IKV> for EnvConf
126where
127    IKV: IntoIterator<Item = (K, V)>,
128    K: AsRef<std::ffi::OsStr>,
129    V: AsRef<std::ffi::OsStr>,
130{
131    fn from(ary: IKV) -> Self {
132        let mut r = Self::new();
133        for a in ary {
134            match a.0.as_ref().to_string_lossy().to_string().as_str() {
135                "AKI_MCYCLE_COLOR_SEQ_RED_ST" => {
136                    r.color_seq_red_start = a.1.as_ref().to_string_lossy().to_string();
137                }
138                "AKI_MCYCLE_COLOR_SEQ_GREEN_ST" => {
139                    r.color_seq_green_start = a.1.as_ref().to_string_lossy().to_string();
140                }
141                "AKI_MCYCLE_COLOR_SEQ_BLUE_ST" => {
142                    r.color_seq_blue_start = a.1.as_ref().to_string_lossy().to_string();
143                }
144                "AKI_MCYCLE_COLOR_SEQ_CYAN_ST" => {
145                    r.color_seq_cyan_start = a.1.as_ref().to_string_lossy().to_string();
146                }
147                "AKI_MCYCLE_COLOR_SEQ_MAGENTA_ST" => {
148                    r.color_seq_magenta_start = a.1.as_ref().to_string_lossy().to_string();
149                }
150                "AKI_MCYCLE_COLOR_SEQ_YELLOW_ST" => {
151                    r.color_seq_yellow_start = a.1.as_ref().to_string_lossy().to_string();
152                }
153                "AKI_MCYCLE_COLOR_SEQ_ED" => {
154                    r.color_seq_end = a.1.as_ref().to_string_lossy().to_string();
155                }
156                _ => (),
157            }
158        }
159        r
160    }
161}