ForgeFlux/src/settings/forges/forgejo.rs

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
);
}
}