Better return type for download_index (#5086)

This commit is contained in:
Laurenz 2024-10-01 15:35:02 +02:00 committed by GitHub
parent 3ec5d442d7
commit ae7787c820
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -128,19 +128,21 @@ impl PackageStorage {
} }
/// Download the package index. The result of this is cached for efficiency. /// Download the package index. The result of this is cached for efficiency.
pub fn download_index(&self) -> StrResult<&Vec<PackageInfo>> { pub fn download_index(&self) -> StrResult<&[PackageInfo]> {
self.index.get_or_try_init(|| { self.index
let url = format!("{DEFAULT_REGISTRY}/preview/index.json"); .get_or_try_init(|| {
match self.downloader.download(&url) { let url = format!("{DEFAULT_REGISTRY}/preview/index.json");
Ok(response) => response match self.downloader.download(&url) {
.into_json() Ok(response) => response.into_json().map_err(|err| {
.map_err(|err| eco_format!("failed to parse package index: {err}")), eco_format!("failed to parse package index: {err}")
Err(ureq::Error::Status(404, _)) => { }),
bail!("failed to fetch package index (not found)") Err(ureq::Error::Status(404, _)) => {
bail!("failed to fetch package index (not found)")
}
Err(err) => bail!("failed to fetch package index ({err})"),
} }
Err(err) => bail!("failed to fetch package index ({err})"), })
} .map(AsRef::as_ref)
})
} }
/// Download a package over the network. /// Download a package over the network.