use super::*;
use crate::Result;
use semver::Version;
pub async fn get_max_version(
crate_name: &str,
current_crate_version: &str,
user_agent: &str,
) -> Result<Option<Version>> {
let current_version = Version::parse(current_crate_version)
.map_err(|_| "Couldn't parse current version")?;
let max_version = get_versions(crate_name, user_agent).await?.max_version;
let max_version = if current_version < max_version {
Some(max_version)
} else {
None
};
Ok(max_version)
}
pub async fn get_max_minor_version(
crate_name: &str,
version: &str,
user_agent: &str,
) -> Result<Option<Version>> {
let versions = get_version_list(crate_name, user_agent).await?;
let current_version = Version::parse(version).map_err(|_| "Couldn't parse `version`")?;
let max_minor_version = versions
.into_iter()
.filter(|v| v.major == current_version.major)
.max();
Ok(max_minor_version)
}
pub async fn get_max_patch(
crate_name: &str,
version: &str,
user_agent: &str,
) -> Result<Option<Version>> {
let versions = get_version_list(crate_name, user_agent).await?;
let current_version = Version::parse(version).map_err(|_| "Couldn't parse `version`")?;
let max_patch = versions
.into_iter()
.filter(|v| v.major == current_version.major)
.filter(|v| v.minor == current_version.minor)
.max();
Ok(max_patch)
}
#[macro_export]
macro_rules! max_version_async {
() => {
$crate::max_version_async!(
crate_name = $crate::crate_name!(),
version = $crate::crate_version!(),
user_agent = $crate::user_agent!(),
)
};
(crate_name = $crate_name:expr, version = $version:expr, user_agent = $user_agent:expr $(,)?) => {
$crate::r#async::get_max_version($crate_name, $version, $user_agent)
};
(crate_name = $crate_name:expr, user_agent = $user_agent:expr, version = $version:expr $(,)?) => {
$crate::max_version_async!(
crate_name = $crate_name,
version = $version,
user_agent = $user_agent,
)
};
(version = $version:expr, crate_name = $crate_name:expr, user_agent = $user_agent:expr $(,)?) => {
$crate::max_version_async!(
crate_name = $crate_name,
version = $version,
user_agent = $user_agent,
)
};
(version = $version:expr, user_agent = $user_agent:expr, crate_name = $crate_name:expr $(,)?) => {
$crate::max_version_async!(
crate_name = $crate_name,
version = $version,
user_agent = $user_agent,
)
};
(user_agent = $user_agent:expr, crate_name = $crate_name:expr, version = $version:expr $(,)?) => {
$crate::max_version_async!(
crate_name = $crate_name,
version = $version,
user_agent = $user_agent,
)
};
(user_agent = $user_agent:expr, version = $version:expr, crate_name = $crate_name:expr $(,)?) => {
$crate::max_version_async!(
crate_name = $crate_name,
version = $version,
user_agent = $user_agent,
)
};
(version = $version:expr, user_agent = $user_agent:expr $(,)?) => {
$crate::max_version_async!(
crate_name = $crate::crate_name!(),
version = $version,
user_agent = $user_agent,
)
};
(user_agent = $user_agent:expr, version = $version:expr $(,)?) => {
$crate::max_version_async!(
crate_name = $crate::crate_name!(),
version = $version,
user_agent = $user_agent,
)
};
(crate_name = $crate_name:expr, user_agent = $user_agent:expr $(,)?) => {
$crate::max_version_async!(
crate_name = $crate_name,
version = $crate::crate_version!(),
user_agent = $user_agent,
)
};
(user_agent = $user_agent:expr, crate_name = $crate_name:expr $(,)?) => {
$crate::max_version_async!(
crate_name = $crate_name,
version = $crate::crate_version!(),
user_agent = $user_agent,
)
};
(crate_name = $crate_name:expr, version = $version:expr $(,)?) => {
$crate::max_version_async!(
crate_name = $crate_name,
version = $version,
user_agent = $crate::user_agent!(),
)
};
(version = $version:expr, crate_name = $crate_name:expr $(,)?) => {
$crate::max_version_async!(
crate_name = $crate_name,
version = $version,
user_agent = $crate::user_agent!(),
)
};
(crate_name = $crate_name:expr $(,)?) => {
$crate::max_version_async!(
crate_name = $crate_name,
version = $crate::crate_version!(),
user_agent = $crate::user_agent!(),
)
};
(version = $version:expr $(,)?) => {
$crate::max_version_async!(
crate_name = $crate::crate_name!(),
version = $version,
user_agent = $crate::user_agent!(),
)
};
(user_agent = $user_agent:expr $(,)?) => {
$crate::max_version_async!(
crate_name = $crate::crate_name!(),
version = $crate::crate_version!(),
user_agent = $user_agent,
)
};
}
#[macro_export]
macro_rules! max_minor_version_async {
() => {
$crate::max_minor_version_async!(
crate_name = $crate::crate_name!(),
version = $crate::crate_version!(),
user_agent = $crate::user_agent!(),
)
};
(crate_name = $crate_name:expr, version = $version:expr, user_agent = $user_agent:expr $(,)?) => {
$crate::r#async::get_max_minor_version($crate_name, $version, $user_agent)
};
(crate_name = $crate_name:expr, user_agent = $user_agent:expr, version = $version:expr $(,)?) => {
$crate::max_minor_version_async!(
crate_name = $crate_name,
version = $version,
user_agent = $user_agent,
)
};
(version = $version:expr, crate_name = $crate_name:expr, user_agent = $user_agent:expr $(,)?) => {
$crate::max_minor_version_async!(
crate_name = $crate_name,
version = $version,
user_agent = $user_agent,
)
};
(version = $version:expr, user_agent = $user_agent:expr, crate_name = $crate_name:expr $(,)?) => {
$crate::max_minor_version_async!(
crate_name = $crate_name,
version = $version,
user_agent = $user_agent,
)
};
(user_agent = $user_agent:expr, crate_name = $crate_name:expr, version = $version:expr $(,)?) => {
$crate::max_minor_version_async!(
crate_name = $crate_name,
version = $version,
user_agent = $user_agent,
)
};
(user_agent = $user_agent:expr, version = $version:expr, crate_name = $crate_name:expr $(,)?) => {
$crate::max_minor_version_async!(
crate_name = $crate_name,
version = $version,
user_agent = $user_agent,
)
};
(version = $version:expr, user_agent = $user_agent:expr $(,)?) => {
$crate::max_minor_version_async!(
crate_name = $crate::crate_name!(),
version = $version,
user_agent = $user_agent,
)
};
(user_agent = $user_agent:expr, version = $version:expr $(,)?) => {
$crate::max_minor_version_async!(
crate_name = $crate::crate_name!(),
version = $version,
user_agent = $user_agent,
)
};
(crate_name = $crate_name:expr, user_agent = $user_agent:expr $(,)?) => {
$crate::max_minor_version_async!(
crate_name = $crate_name,
version = $crate::crate_version!(),
user_agent = $user_agent,
)
};
(user_agent = $user_agent:expr, crate_name = $crate_name:expr $(,)?) => {
$crate::max_minor_version_async!(
crate_name = $crate_name,
version = $crate::crate_version!(),
user_agent = $user_agent,
)
};
(crate_name = $crate_name:expr, version = $version:expr $(,)?) => {
$crate::max_minor_version_async!(
crate_name = $crate_name,
version = $version,
user_agent = $crate::user_agent!(),
)
};
(version = $version:expr, crate_name = $crate_name:expr $(,)?) => {
$crate::max_minor_version_async!(
crate_name = $crate_name,
version = $version,
user_agent = $crate::user_agent!(),
)
};
(crate_name = $crate_name:expr $(,)?) => {
$crate::max_minor_version_async!(
crate_name = $crate_name,
version = $crate::crate_version!(),
user_agent = $crate::user_agent!(),
)
};
(version = $version:expr $(,)?) => {
$crate::max_minor_version_async!(
crate_name = $crate::crate_name!(),
version = $version,
user_agent = $crate::user_agent!(),
)
};
(user_agent = $user_agent:expr $(,)?) => {
$crate::max_minor_version_async!(
crate_name = $crate::crate_name!(),
version = $crate::crate_version!(),
user_agent = $user_agent,
)
};
}
#[macro_export]
macro_rules! max_patch_async {
() => {
$crate::max_patch_async!(
crate_name = $crate::crate_name!(),
version = $crate::crate_version!(),
user_agent = $crate::user_agent!(),
)
};
(crate_name = $crate_name:expr, version = $version:expr, user_agent = $user_agent:expr $(,)?) => {
$crate::r#async::get_max_patch($crate_name, $version, $user_agent)
};
(crate_name = $crate_name:expr, user_agent = $user_agent:expr, version = $version:expr $(,)?) => {
$crate::max_patch_async!(
crate_name = $crate_name,
version = $version,
user_agent = $user_agent,
)
};
(version = $version:expr, crate_name = $crate_name:expr, user_agent = $user_agent:expr $(,)?) => {
$crate::max_patch_async!(
crate_name = $crate_name,
version = $version,
user_agent = $user_agent,
)
};
(version = $version:expr, user_agent = $user_agent:expr, crate_name = $crate_name:expr $(,)?) => {
$crate::max_patch_async!(
crate_name = $crate_name,
version = $version,
user_agent = $user_agent,
)
};
(user_agent = $user_agent:expr, crate_name = $crate_name:expr, version = $version:expr $(,)?) => {
$crate::max_patch_async!(
crate_name = $crate_name,
version = $version,
user_agent = $user_agent,
)
};
(user_agent = $user_agent:expr, version = $version:expr, crate_name = $crate_name:expr $(,)?) => {
$crate::max_patch_async!(
crate_name = $crate_name,
version = $version,
user_agent = $user_agent,
)
};
(version = $version:expr, user_agent = $user_agent:expr $(,)?) => {
$crate::max_patch_async!(
crate_name = $crate::crate_name!(),
version = $version,
user_agent = $user_agent,
)
};
(user_agent = $user_agent:expr, version = $version:expr $(,)?) => {
$crate::max_patch_async!(
crate_name = $crate::crate_name!(),
version = $version,
user_agent = $user_agent,
)
};
(crate_name = $crate_name:expr, user_agent = $user_agent:expr $(,)?) => {
$crate::max_patch_async!(
crate_name = $crate_name,
version = $crate::crate_version!(),
user_agent = $user_agent,
)
};
(user_agent = $user_agent:expr, crate_name = $crate_name:expr $(,)?) => {
$crate::max_patch_async!(
crate_name = $crate_name,
version = $crate::crate_version!(),
user_agent = $user_agent,
)
};
(crate_name = $crate_name:expr, version = $version:expr $(,)?) => {
$crate::max_patch_async!(
crate_name = $crate_name,
version = $version,
user_agent = $crate::user_agent!(),
)
};
(version = $version:expr, crate_name = $crate_name:expr $(,)?) => {
$crate::max_patch_async!(
crate_name = $crate_name,
version = $version,
user_agent = $crate::user_agent!(),
)
};
(crate_name = $crate_name:expr $(,)?) => {
$crate::max_patch_async!(
crate_name = $crate_name,
version = $crate::crate_version!(),
user_agent = $crate::user_agent!(),
)
};
(version = $version:expr $(,)?) => {
$crate::max_patch_async!(
crate_name = $crate::crate_name!(),
version = $version,
user_agent = $crate::user_agent!(),
)
};
(user_agent = $user_agent:expr $(,)?) => {
$crate::max_patch_async!(
crate_name = $crate::crate_name!(),
version = $crate::crate_version!(),
user_agent = $user_agent,
)
};
}