pub mod error;
use error::Error;
use url::Url;
use std::env;
#[derive(Clone)]
pub struct Config {
pub forge_type: String,
pub forge_url: Url,
pub certs_dir: String,
}
pub fn config() -> Result<Config, Error> {
let forge_type_key: &str = "PLATFORM_TYPE";
let forge_url_key: &str = "FORGE_URL";
let certs_dir_key: &str = "CERTS_DIR";
let default_type: &str = "forgejo";
let forge_type: String = env::var(forge_type_key)
.unwrap_or(default_type.to_string())
.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("".to_string());
if forge_url_string.len() == 0 {
return Err(Error::MissingUrl);
}
let certs_dir: String = env::var(certs_dir_key)
.unwrap_or(".certs".to_string());
match Url::parse(forge_url_string.as_str()) {
Ok(forge_url) => Ok(Config { forge_type, forge_url, certs_dir }),
Err(parse_error) => Err(Error::BadUrl(parse_error))
}
}