Use pkg_fmt from fetcher

This commit is contained in:
Félix Saparelli 2022-02-16 00:19:59 +13:00
parent a12e934940
commit 99e5de0025
4 changed files with 17 additions and 4 deletions

View file

@ -3,7 +3,7 @@ use std::path::Path;
pub use gh_release::*;
pub use quickinstall::*;
use crate::PkgMeta;
use crate::{PkgFmt, PkgMeta};
mod gh_release;
mod quickinstall;
@ -20,6 +20,9 @@ pub trait Fetcher {
/// Check if a package is available for download
async fn check(&self) -> Result<bool, anyhow::Error>;
/// Return the package format
fn pkg_fmt(&self) -> PkgFmt;
}
/// Data required to fetch a package

View file

@ -5,10 +5,11 @@ use reqwest::Method;
use serde::Serialize;
use super::Data;
use crate::{download, remote_exists, Template};
use crate::{download, remote_exists, PkgFmt, Template};
pub struct GhRelease {
url: String,
pkg_fmt: PkgFmt,
}
#[async_trait::async_trait]
@ -26,6 +27,7 @@ impl super::Fetcher for GhRelease {
Ok(Box::new(Self {
url: ctx.render(&data.meta.pkg_url)?,
pkg_fmt: data.meta.pkg_fmt,
}))
}
@ -38,6 +40,10 @@ impl super::Fetcher for GhRelease {
info!("Downloading package from: '{}'", self.url);
download(&self.url, dst).await
}
fn pkg_fmt(&self) -> PkgFmt {
self.pkg_fmt
}
}
/// Template for constructing download paths

View file

@ -4,7 +4,7 @@ use log::info;
use reqwest::Method;
use super::Data;
use crate::{download, remote_exists};
use crate::{download, remote_exists, PkgFmt};
pub struct QuickInstall {
url: String,
@ -28,4 +28,8 @@ impl super::Fetcher for QuickInstall {
info!("Downloading package from: '{}'", self.url);
download(&self.url, dst).await
}
fn pkg_fmt(&self) -> PkgFmt {
PkgFmt::Tgz
}
}

View file

@ -180,7 +180,7 @@ async fn main() -> Result<(), anyhow::Error> {
// Extract files
let bin_path = temp_dir.path().join(format!("bin-{}", opts.name));
extract(&pkg_path, meta.pkg_fmt, &bin_path)?;
extract(&pkg_path, fetcher.pkg_fmt(), &bin_path)?;
// Bypass cleanup if disabled
if opts.no_cleanup {