use std::{env, fs, path::PathBuf};
const H3_DNS_SERVER_ENV: &str = "DHTTP_H3_DNS_SERVER";
const BOOTSTRAP_URL_ENV: &str = "DHTTP_BOOTSTRAP_URL";
const MDNS_SERVICE_ENV: &str = "DHTTP_MDNS_SERVICE";
const DEFAULT_H3_DNS_SERVER: &str = "https://ddns.genmeta.net:4433";
const DEFAULT_BOOTSTRAP_URL: &str = "https://bootstrap.genmeta.net:20002";
const DEFAULT_MDNS_SERVICE: &str = "_dhttp.local";
fn main() {
let out_dir = PathBuf::from(env::var("OUT_DIR").expect("OUT_DIR is set by cargo"));
let h3_dns_server = env_or_default(H3_DNS_SERVER_ENV, DEFAULT_H3_DNS_SERVER);
let bootstrap_url = env_or_default(BOOTSTRAP_URL_ENV, DEFAULT_BOOTSTRAP_URL);
let mdns_service = env_or_default(MDNS_SERVICE_ENV, DEFAULT_MDNS_SERVICE);
let bootstrap = format!(
"// @generated by build.rs; do not edit.\n\
pub const DHTTP_H3_DNS_SERVER: &str = {h3_dns_server:?};\n\
pub const DHTTP_BOOTSTRAP_URL: &str = {bootstrap_url:?};\n\
pub const DHTTP_MDNS_SERVICE: &str = {mdns_service:?};\n"
);
fs::write(out_dir.join("bootstrap.rs"), bootstrap)
.expect("failed to write generated DHTTP DNS bootstrap constants");
println!("cargo::rerun-if-env-changed={H3_DNS_SERVER_ENV}");
println!("cargo::rerun-if-env-changed={BOOTSTRAP_URL_ENV}");
println!("cargo::rerun-if-env-changed={MDNS_SERVICE_ENV}");
}
fn env_or_default(name: &str, default: &str) -> String {
env::var(name).unwrap_or_else(|_| default.to_owned())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn missing_env_uses_genmeta_production_defaults() {
let name = format!("__DDNS_MISSING_BOOTSTRAP_{}", std::process::id());
assert_eq!(
env_or_default(&name, DEFAULT_H3_DNS_SERVER),
"https://ddns.genmeta.net:4433"
);
assert_eq!(
env_or_default(&name, DEFAULT_BOOTSTRAP_URL),
"https://bootstrap.genmeta.net:20002"
);
assert_eq!(env_or_default(&name, DEFAULT_MDNS_SERVICE), "_dhttp.local");
}
#[test]
fn default_urls_use_expected_authorities() {
assert_eq!(
DEFAULT_H3_DNS_SERVER.strip_prefix("https://"),
Some("ddns.genmeta.net:4433")
);
assert_eq!(
DEFAULT_BOOTSTRAP_URL.strip_prefix("https://"),
Some("bootstrap.genmeta.net:20002")
);
}
}