use crate::{build_url, Versions};
use anyhow::{Context, Result};
#[macro_export]
macro_rules! check_max_async {
() => {
async {
$crate::new_versions_async!().await.map(|versions| {
let max = versions.max_unyanked_version()?.clone();
if max > $crate::crate_version!() {
Some(max)
} else {
None
}
})
}
};
}
#[macro_export]
macro_rules! check_minor_async {
() => {
async {
$crate::new_versions_async!().await.and_then(|versions| {
let major_version = $crate::crate_major_version!().parse()?;
let max = versions.max_unyanked_minor_version(major_version);
let max = max.cloned();
let max = max.filter(|max| max > $crate::crate_version!());
Ok(max)
})
}
};
}
#[macro_export]
macro_rules! check_patch_async {
() => {
async {
$crate::new_versions_async!().await.and_then(|versions| {
let major_version = $crate::crate_major_version!().parse()?;
let minor_version = $crate::crate_minor_version!().parse()?;
let max = versions.max_unyanked_patch(major_version, minor_version);
let max = max.cloned();
let max = max.filter(|max| max > $crate::crate_version!());
Ok(max)
})
}
};
}
impl Versions {
pub async fn async_new(crate_name: &str, user_agent: &str) -> Result<Versions> {
let url = build_url(crate_name);
let response: Versions = reqwest::Client::builder()
.user_agent(user_agent)
.build()
.context("Couldn't build client")?
.get(&url)
.send()
.await
.context("Couldn't request crate info")?
.json()
.await
.context("Couldn't read as JSON")?;
Ok(response)
}
}
#[macro_export]
macro_rules! new_versions_async {
(crate_name = $crate_name:expr, user_agent = $user_agent:expr $(,)?) => {
$crate::Versions::async_new($crate_name, $user_agent)
};
(user_agent = $user_agent:expr, crate_name = $crate_name:expr $(,)?) => {
$crate::new_versions_async!(crate_name = $crate_name, user_agent = $user_agent,)
};
(crate_name = $crate_name:expr) => {
$crate::new_versions_async!(crate_name = $crate_name, user_agent = $crate::user_agent!(),)
};
(user_agent = $user_agent:expr) => {
$crate::new_versions_async!(crate_name = $crate::crate_name!(), user_agent = $user_agent,)
};
() => {
$crate::new_versions_async!(
crate_name = $crate::crate_name!(),
user_agent = $crate::user_agent!(),
)
};
}