///|
pub(all) suberror RegistryIndexError {
InvalidJson
MissingVersion
} derive(Eq, Show)
///|
pub(all) suberror VersionSelectError {
InvalidLatest(String)
InvalidRequested(String)
} derive(Eq, Show)
///|
pub fn parse_registry_latest_version(
content : String,
) -> Result[String, RegistryIndexError] {
let json = @json.parse(content) catch {
_ => return Err(RegistryIndexError::InvalidJson)
}
match json {
Json::Object(obj) =>
match obj.get("version") {
Some(Json::String(value)) => Ok(value)
_ => Err(RegistryIndexError::MissingVersion)
}
_ => Err(RegistryIndexError::InvalidJson)
}
}
///|
pub fn select_version(
requested : String?,
latest : String,
) -> Result[String, VersionSelectError] {
match @semver.try_parse(latest) {
Ok(_) => ()
Err(_) => return Err(VersionSelectError::InvalidLatest(latest))
}
match requested {
Some(value) =>
match @semver.try_parse(value) {
Ok(_) => Ok(value)
Err(_) => Err(VersionSelectError::InvalidRequested(value))
}
None => Ok(latest)
}
}