Skip to content

Commit 035f1a5

Browse files
committed
Add support for OCI Image Index
OCI Image Index (https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md) is similar to vnd.docker.distribution.manifest.list.v2 This revives #244 originally created by @luizribeiro A testing client could pull koenkk/zigbee2mqtt:latest with this change. Fixes #243
1 parent 1d779db commit 035f1a5

File tree

3 files changed

+8
-1
lines changed

3 files changed

+8
-1
lines changed

src/mediatypes.rs

+5
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ pub enum MediaTypes {
3636
#[strum(serialize = "application/vnd.oci.image.manifest.v1+json")]
3737
#[strum(props(Sub = "vnd.oci.image.manifest.v1+json"))]
3838
OciImageManifest,
39+
// OCI Image index
40+
#[strum(serialize = "application/vnd.oci.image.index.v1+json")]
41+
#[strum(props(Sub = "vnd.oci.image.index.v1+json"))]
42+
OciImageIndexV1,
3943
/// Generic JSON
4044
#[strum(serialize = "application/json")]
4145
#[strum(props(Sub = "json"))]
@@ -60,6 +64,7 @@ impl MediaTypes {
6064
("vnd.docker.image.rootfs.diff.tar.gzip", _) => Ok(MediaTypes::ImageLayerTgz),
6165
("vnd.docker.container.image.v1", "json") => Ok(MediaTypes::ContainerConfigV1),
6266
("vnd.oci.image.manifest.v1", "json") => Ok(MediaTypes::OciImageManifest),
67+
("vnd.oci.image.index.v1", "json") => Ok(MediaTypes::OciImageIndexV1),
6368
_ => Err(crate::Error::UnknownMimeType(mtype.clone())),
6469
}
6570
}

src/v2/config.rs

+2
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ impl Config {
115115
(MediaTypes::ManifestV2S1Signed, Some(0.4)),
116116
(MediaTypes::ManifestList, Some(0.5)),
117117
(MediaTypes::OciImageManifest, Some(0.5)),
118+
(MediaTypes::OciImageIndexV1, Some(0.5)),
118119
],
119120
// GCR incorrectly parses `q` parameters, so we use special Accept for it.
120121
// Bug: https://issuetracker.google.com/issues/159827510.
@@ -124,6 +125,7 @@ impl Config {
124125
(MediaTypes::ManifestV2S1Signed, None),
125126
(MediaTypes::ManifestList, None),
126127
(MediaTypes::OciImageManifest, None),
128+
(MediaTypes::OciImageIndexV1, None),
127129
],
128130
},
129131
};

src/v2/manifest/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ impl Client {
8787
content_digest,
8888
))
8989
}
90-
mediatypes::MediaTypes::ManifestList => Ok((
90+
mediatypes::MediaTypes::ManifestList | mediatypes::MediaTypes::OciImageIndexV1 => Ok((
9191
res.json::<ManifestList>().await.map(Manifest::ML)?,
9292
content_digest,
9393
)),

0 commit comments

Comments
 (0)