diff options
Diffstat (limited to 'crates/bot-config')
| -rw-r--r-- | crates/bot-config/Cargo.toml | 23 | ||||
| -rw-r--r-- | crates/bot-config/src/lib.rs | 36 |
2 files changed, 59 insertions, 0 deletions
diff --git a/crates/bot-config/Cargo.toml b/crates/bot-config/Cargo.toml new file mode 100644 index 0000000..57b9a67 --- /dev/null +++ b/crates/bot-config/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "bot-config" +version = "0.2.0" +edition = "2021" + +authors = ["seth <getchoo at tuta dot io>"] +description = "Configuration for nixpkgs-tracker-bot" +repository = "https://github.com/getchoo/nixpkgs-tracker-bot" + +publish = false + +[dependencies] + +[lints.rust] +unsafe_code = "forbid" + +[lints.clippy] +complexity = "warn" +correctness = "deny" +pedantic = "warn" +perf = "warn" +style = "warn" +suspicious = "deny" diff --git a/crates/bot-config/src/lib.rs b/crates/bot-config/src/lib.rs new file mode 100644 index 0000000..0691884 --- /dev/null +++ b/crates/bot-config/src/lib.rs @@ -0,0 +1,36 @@ +use std::env; + +/// The Discord client's configuration +#[derive(Clone, Debug)] +pub struct Config { + /// Path to clone a new or use an existing nixpkgs repository + pub nixpkgs_path: String, + // A comma separated list of nixpkgs branch to track commits for + pub nixpkgs_branches: Vec<String>, +} + +impl Config { + /// Take in a comma separated list and split it into a [`Vec<String>`] + fn split_string_list(branches: &str) -> Vec<String> { + branches + .split(',') + .map(|branch| branch.trim().to_string()) + .collect() + } + + /// Create a new instance of [`Config`] based on variables from the environment + /// + /// # Errors + /// + /// Will return [`Err`] if a variable is not found + pub fn from_env() -> Result<Self, env::VarError> { + let nixpkgs_path = env::var("BOT_NIXPKGS_PATH")?; + let nixpkgs_branches_raw = env::var("BOT_NIXPKGS_BRANCHES")?; + let nixpkgs_branches = Self::split_string_list(&nixpkgs_branches_raw); + + Ok(Self { + nixpkgs_path, + nixpkgs_branches, + }) + } +} |
