siderite_config/
settings.rs1use crate::secret::Secret;
4use serde::Deserialize;
5use std::collections::BTreeMap;
6
7pub const DEFAULT_SERVER_ADDR: &str = "127.0.0.1:8000";
9
10pub const DEFAULT_APP_NAME: &str = "siderite";
12
13pub const DEFAULT_LOG_LEVEL: &str = "info";
15
16pub const DEFAULT_CACHE_MAX_ENTRIES: usize = 1024;
18
19#[derive(Debug, Clone, Default, PartialEq, Deserialize)]
22pub struct Settings {
23 #[serde(default)]
25 pub app: AppSettings,
26 #[serde(default)]
28 pub server: ServerSettings,
29 #[serde(default)]
32 pub databases: BTreeMap<String, DatabaseSettings>,
33 #[serde(default)]
35 pub cache: CacheSettings,
36 #[serde(default)]
38 pub log: LogSettings,
39 #[serde(default)]
41 pub secret_key: Option<Secret<String>>,
42}
43
44#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
46pub struct AppSettings {
47 #[serde(default = "default_app_name")]
49 pub name: String,
50 #[serde(default)]
53 pub debug: bool,
54}
55
56impl Default for AppSettings {
57 fn default() -> Self {
58 Self {
59 name: default_app_name(),
60 debug: false,
61 }
62 }
63}
64
65fn default_app_name() -> String {
66 DEFAULT_APP_NAME.to_owned()
67}
68
69#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
71pub struct ServerSettings {
72 #[serde(default = "default_server_addr")]
74 pub addr: String,
75}
76
77impl Default for ServerSettings {
78 fn default() -> Self {
79 Self {
80 addr: default_server_addr(),
81 }
82 }
83}
84
85fn default_server_addr() -> String {
86 DEFAULT_SERVER_ADDR.to_owned()
87}
88
89#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
91pub struct DatabaseSettings {
92 pub url: Secret<String>,
94 #[serde(default)]
96 pub max_connections: Option<u32>,
97}
98
99#[derive(Debug, Clone, PartialEq, Deserialize)]
101pub struct CacheSettings {
102 #[serde(default)]
104 pub url: Option<Secret<String>>,
105 #[serde(default = "default_cache_max_entries")]
107 pub max_entries: usize,
108}
109
110impl Default for CacheSettings {
111 fn default() -> Self {
112 Self {
113 url: None,
114 max_entries: DEFAULT_CACHE_MAX_ENTRIES,
115 }
116 }
117}
118
119fn default_cache_max_entries() -> usize {
120 DEFAULT_CACHE_MAX_ENTRIES
121}
122
123#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
125pub struct LogSettings {
126 #[serde(default = "default_log_level")]
129 pub level: String,
130 #[serde(default)]
132 pub json: bool,
133}
134
135impl Default for LogSettings {
136 fn default() -> Self {
137 Self {
138 level: default_log_level(),
139 json: false,
140 }
141 }
142}
143
144fn default_log_level() -> String {
145 DEFAULT_LOG_LEVEL.to_owned()
146}
147
148pub(crate) fn default_values() -> serde_json::Value {
150 serde_json::json!({
151 "app": {
152 "name": DEFAULT_APP_NAME,
153 "debug": false,
154 },
155 "server": {
156 "addr": DEFAULT_SERVER_ADDR,
157 },
158 "databases": {},
159 "cache": {
160 "max_entries": DEFAULT_CACHE_MAX_ENTRIES,
161 },
162 "log": {
163 "level": DEFAULT_LOG_LEVEL,
164 "json": false,
165 },
166 })
167}