pub mod error;
use error::Error;
use url::Url;
use std::env;
const CERTS_DIR_KEY: &'static str = "CERTS_DIR";
const FORGE_TYPE_KEY: &'static str = "PLATFORM_TYPE";
const FORGE_URL_KEY: &'static str = "FORGE_URL";
const CRATE_VERSION: &'static str = env!("CARGO_PKG_VERSION", "Package version unknown");
#[derive(Clone)]
pub struct Config {
pub crate_version: &'static str,
pub forge_type: String,
pub forge_url: Url,
pub certs_dir: String,
}
pub fn config() -> Result<Config, Error> {
let default_certs_dir: &str = ".certs";
let certs_dir: String = env::var(CERTS_DIR_KEY)
.unwrap_or(String::from(default_certs_dir));
let default_type: &str = "forgejo";
let forge_type: String = env::var(FORGE_TYPE_KEY)
.unwrap_or(String::from(default_type))
.to_lowercase();
if forge_type != default_type {
return Err(Error::BadPlatformType(forge_type));
}
let forge_url_string: String = env::var(FORGE_URL_KEY)
.unwrap_or(String::from(""));
if forge_url_string.len() == 0 {
return Err(Error::MissingUrl);
}
match Url::parse(forge_url_string.as_str()) {
Err(parse_error) => Err(Error::BadUrl(parse_error)),
Ok(forge_url) => Ok(Config {
crate_version: CRATE_VERSION,
forge_type,
forge_url,
certs_dir
}),
}
}