68 lines
1.8 KiB
Rust
68 lines
1.8 KiB
Rust
use std::env;
|
|
|
|
use config::{builder::DefaultState, ConfigBuilder};
|
|
use serde::Deserialize;
|
|
use url::Url;
|
|
|
|
#[derive(Debug, Clone, Deserialize, Eq, PartialEq)]
|
|
pub struct Forgejo {
|
|
pub url: Url,
|
|
pub client_id: String,
|
|
pub client_secret: String,
|
|
}
|
|
|
|
impl Forgejo {
|
|
pub fn env_override(mut s: ConfigBuilder<DefaultState>) -> ConfigBuilder<DefaultState> {
|
|
for (parameter, env_var_name) in [
|
|
("forges.forgejo.url", "FORGEFLUX_forges_FORGEJO_url"),
|
|
(
|
|
"forges.forgejo.client_id",
|
|
"FORGEFLUX_forges_FORGEJO_client_id",
|
|
),
|
|
(
|
|
"forges.forgejo.client_secret",
|
|
"FORGEFLUX_forges_FORGEJO_client_secret",
|
|
),
|
|
]
|
|
.iter()
|
|
{
|
|
if let Ok(val) = env::var(env_var_name) {
|
|
log::debug!("Overriding [{parameter}] with environment variable {env_var_name}");
|
|
s = s.set_override(parameter, val).unwrap();
|
|
}
|
|
}
|
|
|
|
s
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use crate::env_helper;
|
|
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_forges_forgejo_env_override() {
|
|
let init_settings = crate::settings::Settings::new().unwrap();
|
|
env_helper!(
|
|
init_settings,
|
|
"FORGEFLUX_forges_FORGEJO_url",
|
|
Url::parse("postgres://test_forges_forgejo_env_override").unwrap(),
|
|
forges.forgejo.url
|
|
);
|
|
env_helper!(
|
|
init_settings,
|
|
"FORGEFLUX_forges_FORGEJO_client_id",
|
|
"test_forges_forgejo_env_override_client_id",
|
|
forges.forgejo.client_id
|
|
);
|
|
env_helper!(
|
|
init_settings,
|
|
"FORGEFLUX_forges_FORGEJO_client_secret",
|
|
"test_forges_forgejo_env_override_client_secret",
|
|
forges.forgejo.client_secret
|
|
);
|
|
}
|
|
}
|