diff --git a/src/fetchers.rs b/src/fetchers.rs index c2c4b052..afa06c9e 100644 --- a/src/fetchers.rs +++ b/src/fetchers.rs @@ -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; + + /// Return the package format + fn pkg_fmt(&self) -> PkgFmt; } /// Data required to fetch a package diff --git a/src/fetchers/gh_release.rs b/src/fetchers/gh_release.rs index 386f0ab4..154a2450 100644 --- a/src/fetchers/gh_release.rs +++ b/src/fetchers/gh_release.rs @@ -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 diff --git a/src/fetchers/quickinstall.rs b/src/fetchers/quickinstall.rs index fed27fa3..6ab9a812 100644 --- a/src/fetchers/quickinstall.rs +++ b/src/fetchers/quickinstall.rs @@ -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 + } } diff --git a/src/main.rs b/src/main.rs index 2eab84a0..c1f0de98 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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 {