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
use crate::{de::deserialize_some, devrc_log::LogLevel, interpreter::Interpreter};
use std::{env, fmt::Debug, path::PathBuf};
use serde::Deserialize;
#[derive(Debug, Deserialize, Clone)]
#[serde(untagged)]
pub enum DefaultOption {
Empty,
String(String),
List(Vec<String>),
}
impl Default for DefaultOption {
fn default() -> Self {
DefaultOption::Empty
}
}
#[derive(Debug, Deserialize, Clone, Default)]
pub struct RawConfig {
#[serde(default, deserialize_with = "deserialize_some")]
pub default: Option<DefaultOption>,
#[serde(default, deserialize_with = "deserialize_some", rename = "shell")]
pub interpreter: Option<Option<Interpreter>>,
#[serde(default, deserialize_with = "deserialize_some")]
pub log_level: Option<Option<LogLevel>>,
pub global: Option<bool>,
#[serde(default, deserialize_with = "deserialize_some")]
pub dry_run: Option<Option<bool>>,
}
#[derive(Debug, Clone)]
pub struct Config {
pub current_dir: Option<PathBuf>,
pub interpreter: Interpreter,
pub log_level: LogLevel,
pub dry_run: bool,
pub default: Vec<String>,
}
impl Default for Config {
fn default() -> Self {
Config {
current_dir: env::current_dir().ok(),
dry_run: false,
interpreter: Interpreter::default(),
log_level: LogLevel::Info,
default: vec![],
}
}
}
#[derive(Debug, Clone)]
pub struct ExecOptions {
pub current_dir: Option<PathBuf>,
pub dry_run: bool,
pub interpreter: Option<Interpreter>,
pub log_level: Option<LogLevel>,
}
impl Default for ExecOptions {
fn default() -> Self {
ExecOptions {
current_dir: env::current_dir().ok(),
dry_run: false,
interpreter: Some(Interpreter::default()),
log_level: Some(LogLevel::Info),
}
}
}