pub const REPO_URL: &str = "https://github.com/leynos/whitaker";
pub const PKG_URL_TEMPLATE: &str = concat!(
"https://github.com/leynos/whitaker/releases/download/",
"v{version}/{name}-{target}-v{version}.{archive-format}"
);
pub const BIN_DIR_TEMPLATE: &str = "{name}-{target}-v{version}/{bin}";
pub const DEFAULT_PKG_FMT: &str = "tgz";
pub const WINDOWS_PKG_FMT: &str = "zip";
pub const WINDOWS_OVERRIDE_TARGET: &str = "x86_64-pc-windows-msvc";
#[must_use]
pub fn expand_pkg_url(version: &str, target: &str) -> String {
let archive_format = if target == WINDOWS_OVERRIDE_TARGET {
WINDOWS_PKG_FMT
} else {
DEFAULT_PKG_FMT
};
PKG_URL_TEMPLATE
.replace("{name}", "whitaker-installer")
.replace("{version}", version)
.replace("{target}", target)
.replace("{archive-format}", archive_format)
}
#[must_use]
pub fn expand_bin_dir(version: &str, target: &str) -> String {
let bin = if target == WINDOWS_OVERRIDE_TARGET {
"whitaker-installer.exe"
} else {
"whitaker-installer"
};
BIN_DIR_TEMPLATE
.replace("{name}", "whitaker-installer")
.replace("{version}", version)
.replace("{target}", target)
.replace("{bin}", bin)
}
#[cfg(any(test, feature = "test-support"))]
#[must_use]
pub fn load_cargo_toml() -> toml::Table {
let manifest_dir = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"));
let cargo_toml_path = manifest_dir.join("Cargo.toml");
let content = std::fs::read_to_string(&cargo_toml_path)
.unwrap_or_else(|err| panic!("failed to read {}: {err}", cargo_toml_path.display()));
content.parse::<toml::Table>().unwrap_or_else(|err| {
panic!(
"failed to parse {} as TOML: {err}",
cargo_toml_path.display()
)
})
}
#[cfg(any(test, feature = "test-support"))]
#[must_use]
pub fn extract_binstall_table(table: &toml::Table) -> toml::Table {
table
.get("package")
.and_then(|p| p.get("metadata"))
.and_then(|m| m.get("binstall"))
.and_then(|b| b.as_table())
.expect("[package.metadata.binstall] table not found")
.clone()
}
#[cfg(test)]
#[path = "binstall_metadata_tests.rs"]
mod tests;