1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
use std::collections::HashMap;
use crate::config::raw::theme::AppThemeRaw;
use crate::config::{ConfigType, TomlConfigFile};
use crate::error::AppResult;
use super::style::AppStyle;
use super::tab::TabTheme;
use super::DEFAULT_CONFIG_FILE_PATH;
#[derive(Clone, Debug)]
pub struct AppTheme {
pub tabs: TabTheme,
pub regular: AppStyle,
pub selection: AppStyle,
pub visual_mode_selection: AppStyle,
pub directory: AppStyle,
pub executable: AppStyle,
pub link: AppStyle,
pub link_invalid: AppStyle,
pub socket: AppStyle,
pub ext: HashMap<String, AppStyle>,
}
impl AppTheme {
pub fn default_res() -> AppResult<Self> {
let raw: AppThemeRaw = toml::from_str(DEFAULT_CONFIG_FILE_PATH)?;
Ok(Self::from(raw))
}
}
impl TomlConfigFile for AppTheme {
type Raw = AppThemeRaw;
fn get_type() -> ConfigType {
ConfigType::Theme
}
}
impl std::default::Default for AppTheme {
fn default() -> Self {
// This should not fail.
// If it fails then there is a (syntax) error in the default config file
Self::default_res().unwrap()
}
}
impl From<AppThemeRaw> for AppTheme {
fn from(raw: AppThemeRaw) -> Self {
let tabs = raw.tabs;
let selection = raw.selection.to_style_theme();
let visual_mode_selection = raw.visual_mode_selection.to_style_theme();
let executable = raw.executable.to_style_theme();
let regular = raw.regular.to_style_theme();
let directory = raw.directory.to_style_theme();
let link = raw.link.to_style_theme();
let link_invalid = raw.link_invalid.to_style_theme();
let socket = raw.socket.to_style_theme();
let ext: HashMap<String, AppStyle> = raw
.ext
.iter()
.map(|(k, v)| {
let style = v.to_style_theme();
(k.clone(), style)
})
.collect();
Self {
selection,
visual_mode_selection,
executable,
regular,
directory,
link,
link_invalid,
socket,
ext,
tabs: TabTheme::from(tabs),
}
}
}
|