mirror of
https://github.com/cargo-bins/cargo-binstall.git
synced 2025-04-21 13:08:42 +00:00
Add initial data structure for dist-manifest.json
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
parent
ce5b3dbb9a
commit
3b8b4b940f
4 changed files with 59 additions and 1 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -303,6 +303,7 @@ dependencies = [
|
||||||
"miette",
|
"miette",
|
||||||
"minisign-verify",
|
"minisign-verify",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
|
"serde",
|
||||||
"strum",
|
"strum",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
|
|
@ -24,6 +24,7 @@ leon-macros = { version = "1.0.0", path = "../leon-macros" }
|
||||||
miette = "5.9.0"
|
miette = "5.9.0"
|
||||||
minisign-verify = "0.2.1"
|
minisign-verify = "0.2.1"
|
||||||
once_cell = "1.18.0"
|
once_cell = "1.18.0"
|
||||||
|
serde = { version = "1.0.163", optional = true }
|
||||||
strum = "0.25.0"
|
strum = "0.25.0"
|
||||||
thiserror = "1.0.52"
|
thiserror = "1.0.52"
|
||||||
tokio = { version = "1.35.0", features = ["rt", "sync"], default-features = false }
|
tokio = { version = "1.35.0", features = ["rt", "sync"], default-features = false }
|
||||||
|
@ -35,7 +36,7 @@ binstalk-downloader = { version = "0.9.6", path = "../binstalk-downloader" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
quickinstall = []
|
quickinstall = []
|
||||||
dist-manifest = ["dep:cargo-dist-schema"]
|
dist-manifest = ["dep:cargo-dist-schema", "dep:serde"]
|
||||||
|
|
||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
rustdoc-args = ["--cfg", "docsrs"]
|
rustdoc-args = ["--cfg", "docsrs"]
|
||||||
|
|
51
crates/binstalk-fetchers/src/dist_manifest_fetcher.rs
Normal file
51
crates/binstalk-fetchers/src/dist_manifest_fetcher.rs
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
|
use binstalk_downloader::remote::{Client, Response};
|
||||||
|
use cargo_dist_schema::Format;
|
||||||
|
use compact_str::CompactString;
|
||||||
|
|
||||||
|
use crate::FetchError;
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
struct Binary {
|
||||||
|
/// Key: target, value: artifact
|
||||||
|
artifacts: BTreeMap<CompactString, Artifact>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// An tarball/zip artifact.
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
struct Artifact {
|
||||||
|
/// Filename of artifact on release artifacts,
|
||||||
|
/// need to infer the format.
|
||||||
|
filename: CompactString,
|
||||||
|
/// Path to the executable within the tarbal/zip.
|
||||||
|
path_to_exe: CompactString,
|
||||||
|
|
||||||
|
/// Filename of the checksum file.
|
||||||
|
checksum_filename: Option<CompactString>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub(super) enum DistManifest {
|
||||||
|
NotSupported(Format),
|
||||||
|
/// Key: name of the binary
|
||||||
|
Binaries(BTreeMap<CompactString, Binary>),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DistManifest {
|
||||||
|
async fn parse(response: Response) -> Result<Self, FetchError> {
|
||||||
|
let manifest: cargo_dist_schema::DistManifest = response.json().await?;
|
||||||
|
let format = manifest.format();
|
||||||
|
|
||||||
|
if format.unsupported() {
|
||||||
|
return Ok(Self::NotSupported(format));
|
||||||
|
}
|
||||||
|
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Cache `DistManifest` in a new global http cacher for the fetchers
|
||||||
|
// Also cache the artifacts downloaded and extracted
|
||||||
|
|
||||||
|
pub struct GhDistManifest {}
|
|
@ -18,6 +18,11 @@ mod quickinstall;
|
||||||
#[cfg(feature = "quickinstall")]
|
#[cfg(feature = "quickinstall")]
|
||||||
pub use quickinstall::*;
|
pub use quickinstall::*;
|
||||||
|
|
||||||
|
#[cfg(feature = "dist-manifest")]
|
||||||
|
mod dist_manifest_fetcher;
|
||||||
|
#[cfg(feature = "dist-manifest")]
|
||||||
|
pub use dist_manifest_fetcher::GhDistManifest;
|
||||||
|
|
||||||
mod common;
|
mod common;
|
||||||
use common::*;
|
use common::*;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue