From 50f6b404a64c1c1cd52bd0d6617912d26e45a4ad Mon Sep 17 00:00:00 2001 From: Colin Walters <walters@verbum.org> Date: Mon, 3 Apr 2023 15:57:13 -0400 Subject: [PATCH 1/2] Add `release` to `Platform` This was missing, but is very useful to know the version number of things. --- src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib.rs b/src/lib.rs index d5df007..db56a35 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -51,6 +51,7 @@ pub struct Arch { /// A specific platform (e.g. `aws`, `gcp`) #[derive(Debug, Deserialize)] pub struct Platform { + /// The release version number. /// Specific formats. pub formats: HashMap<String, HashMap<String, Artifact>>, } From f167a94c30e9bba0c096c07609791b7918b8d0f1 Mon Sep 17 00:00:00 2001 From: Colin Walters <walters@verbum.org> Date: Mon, 3 Apr 2023 15:57:31 -0400 Subject: [PATCH 2/2] Add API to query disk with version This is useful for e.g. downloader tools, which want to know the version. --- src/lib.rs | 15 +++++++++++++++ tests/it/main.rs | 11 +++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index db56a35..d8cd57e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -52,6 +52,7 @@ pub struct Arch { #[derive(Debug, Deserialize)] pub struct Platform { /// The release version number. + pub release: String, /// Specific formats. pub formats: HashMap<String, HashMap<String, Artifact>>, } @@ -177,6 +178,20 @@ impl Stream { .and_then(|p| p.get("disk")) } + /// Find a `disk` artifact with its version. + pub fn query_disk_and_version( + &self, + arch: &str, + artifact: &str, + format_name: &str, + ) -> Option<(&Artifact, &str)> { + let arch = self.architectures.get(arch)?; + let artifact = arch.artifacts.get(artifact)?; + let fmt = artifact.formats.get(format_name)?; + let disk = fmt.get("disk")?; + Some((disk, artifact.release.as_str())) + } + /// Find the single `disk` image for this architecture of the given type. Only use this /// for images which don't have multiple format.s pub fn query_thisarch_single(&self, artifact: &str) -> Option<&Artifact> { diff --git a/tests/it/main.rs b/tests/it/main.rs index 454e05b..d148bea 100644 --- a/tests/it/main.rs +++ b/tests/it/main.rs @@ -41,6 +41,17 @@ fn test_basic() { "2848b111a6917455686f38a3ce64d2321c33809b9cf796c5f6804b1c02d79d9d" ); + assert_eq!( + st.query_disk_and_version("x86_64", "metal", "raw.xz") + .as_ref() + .map(|(d, v)| (d.sha256.as_str(), *v)) + .unwrap(), + ( + "2848b111a6917455686f38a3ce64d2321c33809b9cf796c5f6804b1c02d79d9d", + "33.20201201.3.0" + ) + ); + assert_eq!( a.images .as_ref()