openshift_openapi/v4_5/api/build/v1/
build_status.rs

1// Generated from definition com.github.openshift.api.build.v1.BuildStatus
2
3/// BuildStatus contains the status of a build
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct BuildStatus {
6    /// cancelled describes if a cancel event was triggered for the build.
7    pub cancelled: Option<bool>,
8
9    /// completionTimestamp is a timestamp representing the server time when this Build was finished, whether that build failed or succeeded.  It reflects the time at which the Pod running the Build terminated. It is represented in RFC3339 form and is in UTC.
10    pub completion_timestamp: Option<k8s_openapi::apimachinery::pkg::apis::meta::v1::Time>,
11
12    /// config is an ObjectReference to the BuildConfig this Build is based on.
13    pub config: Option<k8s_openapi::api::core::v1::ObjectReference>,
14
15    /// duration contains time.Duration object describing build time.
16    pub duration: Option<i64>,
17
18    /// logSnippet is the last few lines of the build log.  This value is only set for builds that failed.
19    pub log_snippet: Option<String>,
20
21    /// message is a human-readable message indicating details about why the build has this status.
22    pub message: Option<String>,
23
24    /// output describes the container image the build has produced.
25    pub output: Option<crate::api::build::v1::BuildStatusOutput>,
26
27    /// outputDockerImageReference contains a reference to the container image that will be built by this build. Its value is computed from Build.Spec.Output.To, and should include the registry address, so that it can be used to push and pull the image.
28    pub output_docker_image_reference: Option<String>,
29
30    /// phase is the point in the build lifecycle. Possible values are "New", "Pending", "Running", "Complete", "Failed", "Error", and "Cancelled".
31    pub phase: String,
32
33    /// reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.
34    pub reason: Option<String>,
35
36    /// stages contains details about each stage that occurs during the build including start time, duration (in milliseconds), and the steps that occured within each stage.
37    pub stages: Option<Vec<crate::api::build::v1::StageInfo>>,
38
39    /// startTimestamp is a timestamp representing the server time when this Build started running in a Pod. It is represented in RFC3339 form and is in UTC.
40    pub start_timestamp: Option<k8s_openapi::apimachinery::pkg::apis::meta::v1::Time>,
41}
42
43impl<'de> serde::Deserialize<'de> for BuildStatus {
44    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: serde::Deserializer<'de> {
45        #[allow(non_camel_case_types)]
46        enum Field {
47            Key_cancelled,
48            Key_completion_timestamp,
49            Key_config,
50            Key_duration,
51            Key_log_snippet,
52            Key_message,
53            Key_output,
54            Key_output_docker_image_reference,
55            Key_phase,
56            Key_reason,
57            Key_stages,
58            Key_start_timestamp,
59            Other,
60        }
61
62        impl<'de> serde::Deserialize<'de> for Field {
63            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: serde::Deserializer<'de> {
64                struct Visitor;
65
66                impl<'de> serde::de::Visitor<'de> for Visitor {
67                    type Value = Field;
68
69                    fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
70                        f.write_str("field identifier")
71                    }
72
73                    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: serde::de::Error {
74                        Ok(match v {
75                            "cancelled" => Field::Key_cancelled,
76                            "completionTimestamp" => Field::Key_completion_timestamp,
77                            "config" => Field::Key_config,
78                            "duration" => Field::Key_duration,
79                            "logSnippet" => Field::Key_log_snippet,
80                            "message" => Field::Key_message,
81                            "output" => Field::Key_output,
82                            "outputDockerImageReference" => Field::Key_output_docker_image_reference,
83                            "phase" => Field::Key_phase,
84                            "reason" => Field::Key_reason,
85                            "stages" => Field::Key_stages,
86                            "startTimestamp" => Field::Key_start_timestamp,
87                            _ => Field::Other,
88                        })
89                    }
90                }
91
92                deserializer.deserialize_identifier(Visitor)
93            }
94        }
95
96        struct Visitor;
97
98        impl<'de> serde::de::Visitor<'de> for Visitor {
99            type Value = BuildStatus;
100
101            fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
102                f.write_str("BuildStatus")
103            }
104
105            fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: serde::de::MapAccess<'de> {
106                let mut value_cancelled: Option<bool> = None;
107                let mut value_completion_timestamp: Option<k8s_openapi::apimachinery::pkg::apis::meta::v1::Time> = None;
108                let mut value_config: Option<k8s_openapi::api::core::v1::ObjectReference> = None;
109                let mut value_duration: Option<i64> = None;
110                let mut value_log_snippet: Option<String> = None;
111                let mut value_message: Option<String> = None;
112                let mut value_output: Option<crate::api::build::v1::BuildStatusOutput> = None;
113                let mut value_output_docker_image_reference: Option<String> = None;
114                let mut value_phase: Option<String> = None;
115                let mut value_reason: Option<String> = None;
116                let mut value_stages: Option<Vec<crate::api::build::v1::StageInfo>> = None;
117                let mut value_start_timestamp: Option<k8s_openapi::apimachinery::pkg::apis::meta::v1::Time> = None;
118
119                while let Some(key) = serde::de::MapAccess::next_key::<Field>(&mut map)? {
120                    match key {
121                        Field::Key_cancelled => value_cancelled = serde::de::MapAccess::next_value(&mut map)?,
122                        Field::Key_completion_timestamp => value_completion_timestamp = serde::de::MapAccess::next_value(&mut map)?,
123                        Field::Key_config => value_config = serde::de::MapAccess::next_value(&mut map)?,
124                        Field::Key_duration => value_duration = serde::de::MapAccess::next_value(&mut map)?,
125                        Field::Key_log_snippet => value_log_snippet = serde::de::MapAccess::next_value(&mut map)?,
126                        Field::Key_message => value_message = serde::de::MapAccess::next_value(&mut map)?,
127                        Field::Key_output => value_output = serde::de::MapAccess::next_value(&mut map)?,
128                        Field::Key_output_docker_image_reference => value_output_docker_image_reference = serde::de::MapAccess::next_value(&mut map)?,
129                        Field::Key_phase => value_phase = Some(serde::de::MapAccess::next_value(&mut map)?),
130                        Field::Key_reason => value_reason = serde::de::MapAccess::next_value(&mut map)?,
131                        Field::Key_stages => value_stages = serde::de::MapAccess::next_value(&mut map)?,
132                        Field::Key_start_timestamp => value_start_timestamp = serde::de::MapAccess::next_value(&mut map)?,
133                        Field::Other => { let _: serde::de::IgnoredAny = serde::de::MapAccess::next_value(&mut map)?; },
134                    }
135                }
136
137                Ok(BuildStatus {
138                    cancelled: value_cancelled,
139                    completion_timestamp: value_completion_timestamp,
140                    config: value_config,
141                    duration: value_duration,
142                    log_snippet: value_log_snippet,
143                    message: value_message,
144                    output: value_output,
145                    output_docker_image_reference: value_output_docker_image_reference,
146                    phase: value_phase.ok_or_else(|| serde::de::Error::missing_field("phase"))?,
147                    reason: value_reason,
148                    stages: value_stages,
149                    start_timestamp: value_start_timestamp,
150                })
151            }
152        }
153
154        deserializer.deserialize_struct(
155            "BuildStatus",
156            &[
157                "cancelled",
158                "completionTimestamp",
159                "config",
160                "duration",
161                "logSnippet",
162                "message",
163                "output",
164                "outputDockerImageReference",
165                "phase",
166                "reason",
167                "stages",
168                "startTimestamp",
169            ],
170            Visitor,
171        )
172    }
173}
174
175impl serde::Serialize for BuildStatus {
176    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: serde::Serializer {
177        let mut state = serializer.serialize_struct(
178            "BuildStatus",
179            1 +
180            self.cancelled.as_ref().map_or(0, |_| 1) +
181            self.completion_timestamp.as_ref().map_or(0, |_| 1) +
182            self.config.as_ref().map_or(0, |_| 1) +
183            self.duration.as_ref().map_or(0, |_| 1) +
184            self.log_snippet.as_ref().map_or(0, |_| 1) +
185            self.message.as_ref().map_or(0, |_| 1) +
186            self.output.as_ref().map_or(0, |_| 1) +
187            self.output_docker_image_reference.as_ref().map_or(0, |_| 1) +
188            self.reason.as_ref().map_or(0, |_| 1) +
189            self.stages.as_ref().map_or(0, |_| 1) +
190            self.start_timestamp.as_ref().map_or(0, |_| 1),
191        )?;
192        if let Some(value) = &self.cancelled {
193            serde::ser::SerializeStruct::serialize_field(&mut state, "cancelled", value)?;
194        }
195        if let Some(value) = &self.completion_timestamp {
196            serde::ser::SerializeStruct::serialize_field(&mut state, "completionTimestamp", value)?;
197        }
198        if let Some(value) = &self.config {
199            serde::ser::SerializeStruct::serialize_field(&mut state, "config", value)?;
200        }
201        if let Some(value) = &self.duration {
202            serde::ser::SerializeStruct::serialize_field(&mut state, "duration", value)?;
203        }
204        if let Some(value) = &self.log_snippet {
205            serde::ser::SerializeStruct::serialize_field(&mut state, "logSnippet", value)?;
206        }
207        if let Some(value) = &self.message {
208            serde::ser::SerializeStruct::serialize_field(&mut state, "message", value)?;
209        }
210        if let Some(value) = &self.output {
211            serde::ser::SerializeStruct::serialize_field(&mut state, "output", value)?;
212        }
213        if let Some(value) = &self.output_docker_image_reference {
214            serde::ser::SerializeStruct::serialize_field(&mut state, "outputDockerImageReference", value)?;
215        }
216        serde::ser::SerializeStruct::serialize_field(&mut state, "phase", &self.phase)?;
217        if let Some(value) = &self.reason {
218            serde::ser::SerializeStruct::serialize_field(&mut state, "reason", value)?;
219        }
220        if let Some(value) = &self.stages {
221            serde::ser::SerializeStruct::serialize_field(&mut state, "stages", value)?;
222        }
223        if let Some(value) = &self.start_timestamp {
224            serde::ser::SerializeStruct::serialize_field(&mut state, "startTimestamp", value)?;
225        }
226        serde::ser::SerializeStruct::end(state)
227    }
228}