Add initial data structure for dist-manifest.json

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
Jiahao XU 2023-10-01 23:26:01 +11:00
parent ce5b3dbb9a
commit 3b8b4b940f
4 changed files with 59 additions and 1 deletions

1
Cargo.lock generated
View file

@ -303,6 +303,7 @@ dependencies = [
"miette",
"minisign-verify",
"once_cell",
"serde",
"strum",
"thiserror",
"tokio",

View file

@ -24,6 +24,7 @@ leon-macros = { version = "1.0.0", path = "../leon-macros" }
miette = "5.9.0"
minisign-verify = "0.2.1"
once_cell = "1.18.0"
serde = { version = "1.0.163", optional = true }
strum = "0.25.0"
thiserror = "1.0.52"
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]
quickinstall = []
dist-manifest = ["dep:cargo-dist-schema"]
dist-manifest = ["dep:cargo-dist-schema", "dep:serde"]
[package.metadata.docs.rs]
rustdoc-args = ["--cfg", "docsrs"]

View 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 {}

View file

@ -18,6 +18,11 @@ mod quickinstall;
#[cfg(feature = "quickinstall")]
pub use quickinstall::*;
#[cfg(feature = "dist-manifest")]
mod dist_manifest_fetcher;
#[cfg(feature = "dist-manifest")]
pub use dist_manifest_fetcher::GhDistManifest;
mod common;
use common::*;