#[derive(Clone, Debug, Default, PartialEq)]
pub struct BuildConfigSpec {
pub completion_deadline_seconds: Option<i64>,
pub failed_builds_history_limit: Option<i32>,
pub node_selector: std::collections::BTreeMap<String, String>,
pub output: Option<crate::api::build::v1::BuildOutput>,
pub post_commit: Option<crate::api::build::v1::BuildPostCommitSpec>,
pub resources: Option<k8s_openapi::api::core::v1::ResourceRequirements>,
pub revision: Option<crate::api::build::v1::SourceRevision>,
pub run_policy: Option<String>,
pub service_account: Option<String>,
pub source: Option<crate::api::build::v1::BuildSource>,
pub strategy: crate::api::build::v1::BuildStrategy,
pub successful_builds_history_limit: Option<i32>,
pub triggers: Vec<crate::api::build::v1::BuildTriggerPolicy>,
}
impl<'de> serde::Deserialize<'de> for BuildConfigSpec {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
enum Field {
Key_completion_deadline_seconds,
Key_failed_builds_history_limit,
Key_node_selector,
Key_output,
Key_post_commit,
Key_resources,
Key_revision,
Key_run_policy,
Key_service_account,
Key_source,
Key_strategy,
Key_successful_builds_history_limit,
Key_triggers,
Other,
}
impl<'de> serde::Deserialize<'de> for Field {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: serde::Deserializer<'de> {
struct Visitor;
impl<'de> serde::de::Visitor<'de> for Visitor {
type Value = Field;
fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str("field identifier")
}
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: serde::de::Error {
Ok(match v {
"completionDeadlineSeconds" => Field::Key_completion_deadline_seconds,
"failedBuildsHistoryLimit" => Field::Key_failed_builds_history_limit,
"nodeSelector" => Field::Key_node_selector,
"output" => Field::Key_output,
"postCommit" => Field::Key_post_commit,
"resources" => Field::Key_resources,
"revision" => Field::Key_revision,
"runPolicy" => Field::Key_run_policy,
"serviceAccount" => Field::Key_service_account,
"source" => Field::Key_source,
"strategy" => Field::Key_strategy,
"successfulBuildsHistoryLimit" => Field::Key_successful_builds_history_limit,
"triggers" => Field::Key_triggers,
_ => Field::Other,
})
}
}
deserializer.deserialize_identifier(Visitor)
}
}
struct Visitor;
impl<'de> serde::de::Visitor<'de> for Visitor {
type Value = BuildConfigSpec;
fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str("BuildConfigSpec")
}
fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: serde::de::MapAccess<'de> {
let mut value_completion_deadline_seconds: Option<i64> = None;
let mut value_failed_builds_history_limit: Option<i32> = None;
let mut value_node_selector: Option<std::collections::BTreeMap<String, String>> = None;
let mut value_output: Option<crate::api::build::v1::BuildOutput> = None;
let mut value_post_commit: Option<crate::api::build::v1::BuildPostCommitSpec> = None;
let mut value_resources: Option<k8s_openapi::api::core::v1::ResourceRequirements> = None;
let mut value_revision: Option<crate::api::build::v1::SourceRevision> = None;
let mut value_run_policy: Option<String> = None;
let mut value_service_account: Option<String> = None;
let mut value_source: Option<crate::api::build::v1::BuildSource> = None;
let mut value_strategy: Option<crate::api::build::v1::BuildStrategy> = None;
let mut value_successful_builds_history_limit: Option<i32> = None;
let mut value_triggers: Option<Vec<crate::api::build::v1::BuildTriggerPolicy>> = None;
while let Some(key) = serde::de::MapAccess::next_key::<Field>(&mut map)? {
match key {
Field::Key_completion_deadline_seconds => value_completion_deadline_seconds = serde::de::MapAccess::next_value(&mut map)?,
Field::Key_failed_builds_history_limit => value_failed_builds_history_limit = serde::de::MapAccess::next_value(&mut map)?,
Field::Key_node_selector => value_node_selector = Some(serde::de::MapAccess::next_value(&mut map)?),
Field::Key_output => value_output = serde::de::MapAccess::next_value(&mut map)?,
Field::Key_post_commit => value_post_commit = serde::de::MapAccess::next_value(&mut map)?,
Field::Key_resources => value_resources = serde::de::MapAccess::next_value(&mut map)?,
Field::Key_revision => value_revision = serde::de::MapAccess::next_value(&mut map)?,
Field::Key_run_policy => value_run_policy = serde::de::MapAccess::next_value(&mut map)?,
Field::Key_service_account => value_service_account = serde::de::MapAccess::next_value(&mut map)?,
Field::Key_source => value_source = serde::de::MapAccess::next_value(&mut map)?,
Field::Key_strategy => value_strategy = Some(serde::de::MapAccess::next_value(&mut map)?),
Field::Key_successful_builds_history_limit => value_successful_builds_history_limit = serde::de::MapAccess::next_value(&mut map)?,
Field::Key_triggers => value_triggers = Some(serde::de::MapAccess::next_value(&mut map)?),
Field::Other => { let _: serde::de::IgnoredAny = serde::de::MapAccess::next_value(&mut map)?; },
}
}
Ok(BuildConfigSpec {
completion_deadline_seconds: value_completion_deadline_seconds,
failed_builds_history_limit: value_failed_builds_history_limit,
node_selector: value_node_selector.ok_or_else(|| serde::de::Error::missing_field("nodeSelector"))?,
output: value_output,
post_commit: value_post_commit,
resources: value_resources,
revision: value_revision,
run_policy: value_run_policy,
service_account: value_service_account,
source: value_source,
strategy: value_strategy.ok_or_else(|| serde::de::Error::missing_field("strategy"))?,
successful_builds_history_limit: value_successful_builds_history_limit,
triggers: value_triggers.ok_or_else(|| serde::de::Error::missing_field("triggers"))?,
})
}
}
deserializer.deserialize_struct(
"BuildConfigSpec",
&[
"completionDeadlineSeconds",
"failedBuildsHistoryLimit",
"nodeSelector",
"output",
"postCommit",
"resources",
"revision",
"runPolicy",
"serviceAccount",
"source",
"strategy",
"successfulBuildsHistoryLimit",
"triggers",
],
Visitor,
)
}
}
impl serde::Serialize for BuildConfigSpec {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: serde::Serializer {
let mut state = serializer.serialize_struct(
"BuildConfigSpec",
3 +
self.completion_deadline_seconds.as_ref().map_or(0, |_| 1) +
self.failed_builds_history_limit.as_ref().map_or(0, |_| 1) +
self.output.as_ref().map_or(0, |_| 1) +
self.post_commit.as_ref().map_or(0, |_| 1) +
self.resources.as_ref().map_or(0, |_| 1) +
self.revision.as_ref().map_or(0, |_| 1) +
self.run_policy.as_ref().map_or(0, |_| 1) +
self.service_account.as_ref().map_or(0, |_| 1) +
self.source.as_ref().map_or(0, |_| 1) +
self.successful_builds_history_limit.as_ref().map_or(0, |_| 1),
)?;
if let Some(value) = &self.completion_deadline_seconds {
serde::ser::SerializeStruct::serialize_field(&mut state, "completionDeadlineSeconds", value)?;
}
if let Some(value) = &self.failed_builds_history_limit {
serde::ser::SerializeStruct::serialize_field(&mut state, "failedBuildsHistoryLimit", value)?;
}
serde::ser::SerializeStruct::serialize_field(&mut state, "nodeSelector", &self.node_selector)?;
if let Some(value) = &self.output {
serde::ser::SerializeStruct::serialize_field(&mut state, "output", value)?;
}
if let Some(value) = &self.post_commit {
serde::ser::SerializeStruct::serialize_field(&mut state, "postCommit", value)?;
}
if let Some(value) = &self.resources {
serde::ser::SerializeStruct::serialize_field(&mut state, "resources", value)?;
}
if let Some(value) = &self.revision {
serde::ser::SerializeStruct::serialize_field(&mut state, "revision", value)?;
}
if let Some(value) = &self.run_policy {
serde::ser::SerializeStruct::serialize_field(&mut state, "runPolicy", value)?;
}
if let Some(value) = &self.service_account {
serde::ser::SerializeStruct::serialize_field(&mut state, "serviceAccount", value)?;
}
if let Some(value) = &self.source {
serde::ser::SerializeStruct::serialize_field(&mut state, "source", value)?;
}
serde::ser::SerializeStruct::serialize_field(&mut state, "strategy", &self.strategy)?;
if let Some(value) = &self.successful_builds_history_limit {
serde::ser::SerializeStruct::serialize_field(&mut state, "successfulBuildsHistoryLimit", value)?;
}
serde::ser::SerializeStruct::serialize_field(&mut state, "triggers", &self.triggers)?;
serde::ser::SerializeStruct::end(state)
}
}