autopulse_service/settings/
mod.rs1use app::App;
2use auth::Auth;
3use config::Config;
4use opts::Opts;
5use serde::{Deserialize, Serialize};
6use std::{collections::HashMap, path::PathBuf};
7use targets::Target;
8use triggers::manual::Manual;
9use triggers::Trigger;
10use webhooks::Webhook;
11
12pub mod app;
24
25pub mod auth;
35
36pub mod opts;
48
49pub use autopulse_utils::rewrite;
61
62pub mod timer;
74
75pub mod triggers;
79
80pub mod targets;
84
85pub mod webhooks;
89
90#[doc(hidden)]
91pub fn default_triggers() -> HashMap<String, Trigger> {
92 let mut triggers = HashMap::new();
93
94 triggers.insert(
95 "manual".to_string(),
96 Trigger::Manual(Manual {
97 rewrite: None,
98 timer: None,
99 excludes: vec![],
100 }),
101 );
102
103 triggers
104}
105
106#[derive(Serialize, Deserialize, Clone)]
107pub struct Settings {
108 #[serde(default)]
109 pub app: App,
110
111 #[serde(default)]
112 pub auth: Auth,
113
114 #[serde(default)]
115 pub opts: Opts,
116
117 #[serde(default = "default_triggers")]
118 pub triggers: HashMap<String, Trigger>,
119 #[serde(default)]
120 pub targets: HashMap<String, Target>,
121
122 #[serde(default)]
123 pub webhooks: HashMap<String, Webhook>,
124
125 #[serde(default)]
137 pub anchors: Vec<PathBuf>,
138}
139
140impl Default for Settings {
141 fn default() -> Self {
142 Self {
143 app: App::default(),
144 auth: Auth::default(),
145 opts: Opts::default(),
146 triggers: default_triggers(),
147 targets: HashMap::new(),
148 webhooks: HashMap::new(),
149 anchors: vec![],
150 }
151 }
152}
153
154impl Settings {
155 pub fn get_settings(optional_config_file: Option<String>) -> anyhow::Result<Self> {
156 let mut settings = Config::builder()
157 .add_source(config::File::with_name("config").required(false))
158 .add_source(config::Environment::with_prefix("AUTOPULSE").separator("__"));
159
160 if let Some(file_loc) = optional_config_file {
161 settings = settings.add_source(config::File::with_name(&file_loc));
162 }
163
164 let settings = settings.build()?;
165
166 let mut settings = settings
167 .try_deserialize::<Self>()
168 .map_err(|e| anyhow::anyhow!(e))?;
169
170 settings.add_default_manual_trigger()?;
171
172 Ok(settings)
173 }
174
175 pub fn add_default_manual_trigger(&mut self) -> anyhow::Result<()> {
176 if !self.triggers.contains_key("manual") {
177 self.triggers.insert(
178 "manual".to_string(),
179 Trigger::Manual(Manual {
180 rewrite: None,
181 timer: None,
182 excludes: vec![],
183 }),
184 );
185 }
186
187 Ok(())
188 }
189}