mirror of
https://github.com/cargo-bins/cargo-binstall.git
synced 2025-05-22 11:50:02 +00:00
Use leon for template in binstalk & detect malformed pkg-url/pkg-fmt early (#933)
Fixed #851 * Add new dep leon to crate binstalk * Add new variant `BinstallError::Template{Parse, Render}Error` * Use `leon::Template` in mod `bins` * Use `leon::Template` in mod `fetchers::gh_crate_meta` * Refactor mod `bins`: Rm unused associated fn & fields from `Context` * Simplify unit testing in mod `fetchers::gh_crate_meta` * Rm soft-deprecated field `fetchers::gh_crate_meta::Context::format` and change the `match` to resolve `archive` => `self.archive_format`. * Make macro_rules `leon::template!` far easier to use * Construct `leon::Template<'_>` as constant in `gh_crate_meta::hosting` * Simplify `leon::Values` trait Change its method `get_value` signature to ```rust fn get_value(&self, key: &str) -> Option<Cow<'_, str>>; ``` Now, `ValuesFn` also accepts non-`'static` function, but now `leon::Values` is only implemented for `&ValuesFn<F>` now. This makes it a little bit more cumbersome to use but I think it's a reasonable drawback. * Rm `Send` bound req from `ValuesFn` * Impl new fn `leon::Template::cast` for casting `Template<'s>` to `Template<'t>` where `'s: 't` * Rename `leon::Template::has_keys` => `has_any_of_keys` * Make checking whether format related keys are present more robust * Optimize `GhCrateMeta::launch_baseline_find_tasks`: Skip checking all fmt ext if none of the format related keys ("format", "archive-format", "archive-suffix") are present. * Only ret `.exe` in `PkgFmt::extensions` on windows by adding a new param `is_windows: bool` * Improve debug msg in `GhCrateMeta::fetch_and_extract` * Add warnings to `GhCrateMeta::find` * Rm dep tinytemplate * `impl<'s, 'rhs: 's> ops::AddAssign<&Template<'rhs>> for Template<'s>` * `impl<'s, 'rhs: 's> ops::AddAssign<Template<'rhs>> for Template<'s>` * `impl<'s, 'item: 's> ops::AddAssign<Item<'item>> for Template<'s>` * `impl<'s, 'item: 's> ops::AddAssign<&Item<'item>> for Template<'s>` * `impl<'s, 'rhs: 's> ops::Add<Template<'rhs>> for Template<'s>` (improved existing `Add` impl) * `impl<'s, 'rhs: 's> ops::Add<&Template<'rhs>> for Template<'s>` * `impl<'s, 'item: 's> ops::Add<Item<'item>> for Template<'s>` * `impl<'s, 'item: 's> ops::Add<&Item<'item>> for Template<'s>` Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com> Co-authored-by: Félix Saparelli <felix@passcod.name>
This commit is contained in:
parent
47d4aeaa96
commit
a27d5aebf6
13 changed files with 512 additions and 312 deletions
|
@ -11,7 +11,6 @@ use cargo_toml::Error as CargoTomlError;
|
|||
use compact_str::CompactString;
|
||||
use miette::{Diagnostic, Report};
|
||||
use thiserror::Error;
|
||||
use tinytemplate::error::Error as TinyTemplateError;
|
||||
use tokio::task;
|
||||
use tracing::{error, warn};
|
||||
|
||||
|
@ -82,13 +81,33 @@ pub enum BinstallError {
|
|||
#[diagnostic(severity(error), code(binstall::url_parse))]
|
||||
UrlParse(#[from] url::ParseError),
|
||||
|
||||
/// A rendering error in a template.
|
||||
/// Failed to parse template.
|
||||
///
|
||||
/// - Code: `binstall::template`
|
||||
/// - Exit: 67
|
||||
#[error(transparent)]
|
||||
#[diagnostic(severity(error), code(binstall::template))]
|
||||
#[source_code(transparent)]
|
||||
#[label(transparent)]
|
||||
TemplateParseError(
|
||||
#[from]
|
||||
#[diagnostic_source]
|
||||
leon::ParseError,
|
||||
),
|
||||
|
||||
/// Failed to render template.
|
||||
///
|
||||
/// - Code: `binstall::template`
|
||||
/// - Exit: 69
|
||||
#[error("Failed to render template: {0}")]
|
||||
#[diagnostic(severity(error), code(binstall::template))]
|
||||
Template(Box<TinyTemplateError>),
|
||||
#[source_code(transparent)]
|
||||
#[label(transparent)]
|
||||
TemplateRenderError(
|
||||
#[from]
|
||||
#[diagnostic_source]
|
||||
leon::RenderError,
|
||||
),
|
||||
|
||||
/// Failed to download or failed to decode the body.
|
||||
///
|
||||
|
@ -308,7 +327,8 @@ impl BinstallError {
|
|||
TaskJoinError(_) => 17,
|
||||
UserAbort => 32,
|
||||
UrlParse(_) => 65,
|
||||
Template(_) => 67,
|
||||
TemplateParseError(..) => 67,
|
||||
TemplateRenderError(..) => 69,
|
||||
Download(_) => 68,
|
||||
SubProcess { .. } => 70,
|
||||
Io(_) => 74,
|
||||
|
@ -404,12 +424,6 @@ impl From<RemoteError> for BinstallError {
|
|||
}
|
||||
}
|
||||
|
||||
impl From<TinyTemplateError> for BinstallError {
|
||||
fn from(e: TinyTemplateError) -> Self {
|
||||
BinstallError::Template(Box::new(e))
|
||||
}
|
||||
}
|
||||
|
||||
impl From<CargoTomlError> for BinstallError {
|
||||
fn from(e: CargoTomlError) -> Self {
|
||||
BinstallError::CargoManifest(Box::new(e))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue