aboutsummaryrefslogtreecommitdiff
path: root/crates/whirl_config/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/whirl_config/src/lib.rs')
-rw-r--r--crates/whirl_config/src/lib.rs90
1 files changed, 90 insertions, 0 deletions
diff --git a/crates/whirl_config/src/lib.rs b/crates/whirl_config/src/lib.rs
new file mode 100644
index 0000000..8f312cd
--- /dev/null
+++ b/crates/whirl_config/src/lib.rs
@@ -0,0 +1,90 @@
+// Copyleft (ɔ) 2021-2021 The Whirlsplash Collective
+// SPDX-License-Identifier: GPL-3.0-only
+
+#![feature(
+ type_ascription,
+ hash_set_entry,
+ type_name_of_val,
+ decl_macro,
+ proc_macro_hygiene
+)]
+#![warn(rust_2018_idioms)]
+#![recursion_limit = "128"]
+
+#[macro_use]
+extern crate serde_derive;
+#[macro_use]
+extern crate log;
+
+mod structures;
+
+use config::{ConfigError, File};
+
+use crate::structures::{
+ DistributorConfig,
+ HubConfig,
+ WhirlsplashApiConfig,
+ WhirlsplashConfig,
+ WhirlsplashLogConfig,
+ WhirlsplashPromptConfig,
+};
+
+#[derive(Serialize, Deserialize, Debug)]
+pub struct Config {
+ pub whirlsplash: WhirlsplashConfig,
+ pub distributor: DistributorConfig,
+ pub hub: HubConfig,
+}
+impl Config {
+ pub fn refresh() { let _ = config::Config::new().refresh(); }
+
+ fn load() -> Result<Self, ConfigError> {
+ let mut s = config::Config::new();
+
+ s.merge(File::with_name("./Whirl.toml").required(false))?;
+ s.try_into()
+ }
+
+ pub fn get() -> Config {
+ return if let Err(why) = Self::load() {
+ error!(
+ "unable to load configuration file, reverting to default value: {}",
+ why
+ );
+ Self::default()
+ } else {
+ Self::load().unwrap()
+ };
+ }
+}
+impl Default for Config {
+ fn default() -> Self {
+ Config {
+ whirlsplash: WhirlsplashConfig {
+ worldsmaster_username: "WORLDSMASTER".to_string(),
+ ip: "0.0.0.0".to_string(),
+ api: WhirlsplashApiConfig {
+ port: 80
+ },
+ prompt: WhirlsplashPromptConfig {
+ enable: false,
+ ps1: "[WORLDSMASTER@Whirlsplash ~]$".to_string(),
+ },
+ log: WhirlsplashLogConfig {
+ enable: true,
+ level: 1,
+ everything: false,
+ test: false,
+ file: true,
+ },
+ },
+ distributor: DistributorConfig {
+ worldsmaster_greeting: "Welcome to Whirlsplash!".to_string(),
+ port: 6650,
+ },
+ hub: HubConfig {
+ port: 5673
+ },
+ }
+ }
+}