summaryrefslogtreecommitdiff
path: root/crates/bot-config/src/lib.rs
blob: 06918841d178352454e4e9e07059907c68780b0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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,
		})
	}
}