use anyhow::Result;
use reqwest::blocking::Client;
pub fn is_pkg_available(client: &Client, pkg_name: &str, channel: &str) -> Result<bool> {
let url = format!("https://api.anaconda.org/package/{channel}/{pkg_name}");
match client.get(url).send() {
Ok(response) => Ok(response.status() == 200),
Err(e) => Err(e.into()),
}
}
pub fn normalize_pkg_name(client: &Client, pkg_name: &str, channel: &str) -> String {
if let Ok(true) = is_pkg_available(client, pkg_name, channel) {
return pkg_name.to_string();
}
if pkg_name.contains('-') {
let snake_case = pkg_name.replace('-', "_");
if let Ok(true) = is_pkg_available(client, &snake_case, channel) {
return snake_case;
}
}
if pkg_name.contains('_') {
let kebab_case = pkg_name.replace('_', "-");
if let Ok(true) = is_pkg_available(client, &kebab_case, channel) {
return kebab_case;
}
}
pkg_name.to_string()
}
pub fn check_dependency(client: &Client, dep_name: &str, channel: &str) -> Result<Option<String>> {
let normalized = normalize_pkg_name(client, dep_name, channel);
let avail = is_pkg_available(client, &normalized, channel)?;
log::debug!("dependency: {dep_name} normalized: {normalized} available: {avail}");
if avail { Ok(Some(normalized)) } else { Ok(None) }
}