Optimize BinstallError: Reduce size from 40B to 32B (#581)

* Optimize `BinstallError::CratesIoApi`: Extract new type `errors::CratesIoApiError` and box it
   Also improve `<CratesIoApiError as Display>::fmt` impl.
* Optimize `BinstallError::SubProcess`: Use `Box<str>` instead of `String`
* Optimize `BinstallError::CargoManifest`: Box `CargoTomlError`
* Optimize `BinstallError::VersionParse`: Extract `VersionParseError` and box it
   Also improve `<VersionParseError as Display>::fmt` impl.
* Optimize `BinstallError::CrateContext`: Extract `CrateContextError` and box it in
* Optimize `install_from_source`: Only format `cmd` on err

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
Jiahao XU 2022-12-01 18:05:00 +11:00 committed by GitHub
parent ab3e47c42b
commit 8a5577297e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 58 additions and 40 deletions

View file

@ -6,7 +6,7 @@ use semver::VersionReq;
use tracing::debug;
use crate::{
errors::BinstallError,
errors::{BinstallError, CratesIoApiError},
helpers::{
download::Download,
remote::{Client, Url},
@ -33,14 +33,12 @@ pub async fn fetch_crate_cratesio(
debug!("Looking up crate information");
// Fetch online crate information
let base_info =
crates_io_api_client
.get_crate(name)
.await
.map_err(|err| BinstallError::CratesIoApi {
crate_name: name.into(),
err: Box::new(err),
})?;
let base_info = crates_io_api_client.get_crate(name).await.map_err(|err| {
Box::new(CratesIoApiError {
crate_name: name.into(),
err,
})
})?;
// Locate matching version
let version_iter = base_info.versions.iter().filter(|v| !v.yanked);