openshift_openapi/v4_5/api/image/v1/
image_stream_status.rs

1// Generated from definition com.github.openshift.api.image.v1.ImageStreamStatus
2
3/// ImageStreamStatus contains information about the state of this image stream.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct ImageStreamStatus {
6    /// DockerImageRepository represents the effective location this stream may be accessed at. May be empty until the server determines where the repository is located
7    pub docker_image_repository: String,
8
9    /// PublicDockerImageRepository represents the public location from where the image can be pulled outside the cluster. This field may be empty if the administrator has not exposed the integrated registry externally.
10    pub public_docker_image_repository: Option<String>,
11
12    /// Tags are a historical record of images associated with each tag. The first entry in the TagEvent array is the currently tagged image.
13    pub tags: Option<Vec<crate::api::image::v1::NamedTagEventList>>,
14}
15
16impl<'de> serde::Deserialize<'de> for ImageStreamStatus {
17    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: serde::Deserializer<'de> {
18        #[allow(non_camel_case_types)]
19        enum Field {
20            Key_docker_image_repository,
21            Key_public_docker_image_repository,
22            Key_tags,
23            Other,
24        }
25
26        impl<'de> serde::Deserialize<'de> for Field {
27            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: serde::Deserializer<'de> {
28                struct Visitor;
29
30                impl<'de> serde::de::Visitor<'de> for Visitor {
31                    type Value = Field;
32
33                    fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34                        f.write_str("field identifier")
35                    }
36
37                    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: serde::de::Error {
38                        Ok(match v {
39                            "dockerImageRepository" => Field::Key_docker_image_repository,
40                            "publicDockerImageRepository" => Field::Key_public_docker_image_repository,
41                            "tags" => Field::Key_tags,
42                            _ => Field::Other,
43                        })
44                    }
45                }
46
47                deserializer.deserialize_identifier(Visitor)
48            }
49        }
50
51        struct Visitor;
52
53        impl<'de> serde::de::Visitor<'de> for Visitor {
54            type Value = ImageStreamStatus;
55
56            fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
57                f.write_str("ImageStreamStatus")
58            }
59
60            fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: serde::de::MapAccess<'de> {
61                let mut value_docker_image_repository: Option<String> = None;
62                let mut value_public_docker_image_repository: Option<String> = None;
63                let mut value_tags: Option<Vec<crate::api::image::v1::NamedTagEventList>> = None;
64
65                while let Some(key) = serde::de::MapAccess::next_key::<Field>(&mut map)? {
66                    match key {
67                        Field::Key_docker_image_repository => value_docker_image_repository = Some(serde::de::MapAccess::next_value(&mut map)?),
68                        Field::Key_public_docker_image_repository => value_public_docker_image_repository = serde::de::MapAccess::next_value(&mut map)?,
69                        Field::Key_tags => value_tags = serde::de::MapAccess::next_value(&mut map)?,
70                        Field::Other => { let _: serde::de::IgnoredAny = serde::de::MapAccess::next_value(&mut map)?; },
71                    }
72                }
73
74                Ok(ImageStreamStatus {
75                    docker_image_repository: value_docker_image_repository.ok_or_else(|| serde::de::Error::missing_field("dockerImageRepository"))?,
76                    public_docker_image_repository: value_public_docker_image_repository,
77                    tags: value_tags,
78                })
79            }
80        }
81
82        deserializer.deserialize_struct(
83            "ImageStreamStatus",
84            &[
85                "dockerImageRepository",
86                "publicDockerImageRepository",
87                "tags",
88            ],
89            Visitor,
90        )
91    }
92}
93
94impl serde::Serialize for ImageStreamStatus {
95    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: serde::Serializer {
96        let mut state = serializer.serialize_struct(
97            "ImageStreamStatus",
98            1 +
99            self.public_docker_image_repository.as_ref().map_or(0, |_| 1) +
100            self.tags.as_ref().map_or(0, |_| 1),
101        )?;
102        serde::ser::SerializeStruct::serialize_field(&mut state, "dockerImageRepository", &self.docker_image_repository)?;
103        if let Some(value) = &self.public_docker_image_repository {
104            serde::ser::SerializeStruct::serialize_field(&mut state, "publicDockerImageRepository", value)?;
105        }
106        if let Some(value) = &self.tags {
107            serde::ser::SerializeStruct::serialize_field(&mut state, "tags", value)?;
108        }
109        serde::ser::SerializeStruct::end(state)
110    }
111}