aboutsummaryrefslogtreecommitdiff
path: root/crates/whirl_config/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2021-05-20 17:05:59 -0700
committerFuwn <[email protected]>2021-05-20 17:05:59 -0700
commit9e2121baf98b6fdc15cde6c387a7845a0b3f95d6 (patch)
tree15460f59799a9f655ac5b213e4b8a8903d1e57e4 /crates/whirl_config/src
parentfeat(readme): add sqlfluff as a dev dep (diff)
downloadwhirl-9e2121baf98b6fdc15cde6c387a7845a0b3f95d6.tar.xz
whirl-9e2121baf98b6fdc15cde6c387a7845a0b3f95d6.zip
refactor(global): move crates around, stricter module isolation
Diffstat (limited to 'crates/whirl_config/src')
-rw-r--r--crates/whirl_config/src/lib.rs90
-rw-r--r--crates/whirl_config/src/structures.rs37
2 files changed, 127 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
+ },
+ }
+ }
+}
diff --git a/crates/whirl_config/src/structures.rs b/crates/whirl_config/src/structures.rs
new file mode 100644
index 0000000..4f1d62e
--- /dev/null
+++ b/crates/whirl_config/src/structures.rs
@@ -0,0 +1,37 @@
+// Copyleft (ɔ) 2021-2021 The Whirlsplash Collective
+// SPDX-License-Identifier: GPL-3.0-only
+
+#[derive(Serialize, Deserialize, Debug)]
+pub struct WhirlsplashConfig {
+ pub worldsmaster_username: String,
+ pub ip: String,
+ pub api: WhirlsplashApiConfig,
+ pub prompt: WhirlsplashPromptConfig,
+ pub log: WhirlsplashLogConfig,
+}
+#[derive(Serialize, Deserialize, Debug)]
+pub struct WhirlsplashApiConfig {
+ pub port: i64,
+}
+#[derive(Serialize, Deserialize, Debug)]
+pub struct WhirlsplashPromptConfig {
+ pub enable: bool,
+ pub ps1: String,
+}
+#[derive(Serialize, Deserialize, Debug)]
+pub struct WhirlsplashLogConfig {
+ pub enable: bool,
+ pub level: i64,
+ pub everything: bool,
+ pub test: bool,
+ pub file: bool,
+}
+#[derive(Serialize, Deserialize, Debug)]
+pub struct DistributorConfig {
+ pub worldsmaster_greeting: String,
+ pub port: i64,
+}
+#[derive(Serialize, Deserialize, Debug)]
+pub struct HubConfig {
+ pub port: i64,
+}