k8s_openapi/v1_36/api/scheduling/v1alpha2/
topology_constraint.rs1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct TopologyConstraint {
6 pub key: std::string::String,
8}
9
10impl crate::DeepMerge for TopologyConstraint {
11 fn merge_from(&mut self, other: Self) {
12 crate::DeepMerge::merge_from(&mut self.key, other.key);
13 }
14}
15
16impl<'de> crate::serde::Deserialize<'de> for TopologyConstraint {
17 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
18 #[allow(non_camel_case_types)]
19 enum Field {
20 Key_key,
21 Other,
22 }
23
24 impl<'de> crate::serde::Deserialize<'de> for Field {
25 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
26 struct Visitor;
27
28 impl crate::serde::de::Visitor<'_> for Visitor {
29 type Value = Field;
30
31 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
32 f.write_str("field identifier")
33 }
34
35 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
36 Ok(match v {
37 "key" => Field::Key_key,
38 _ => Field::Other,
39 })
40 }
41 }
42
43 deserializer.deserialize_identifier(Visitor)
44 }
45 }
46
47 struct Visitor;
48
49 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
50 type Value = TopologyConstraint;
51
52 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
53 f.write_str("TopologyConstraint")
54 }
55
56 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
57 let mut value_key: Option<std::string::String> = None;
58
59 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
60 match key {
61 Field::Key_key => value_key = crate::serde::de::MapAccess::next_value(&mut map)?,
62 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
63 }
64 }
65
66 Ok(TopologyConstraint {
67 key: value_key.unwrap_or_default(),
68 })
69 }
70 }
71
72 deserializer.deserialize_struct(
73 "TopologyConstraint",
74 &[
75 "key",
76 ],
77 Visitor,
78 )
79 }
80}
81
82impl crate::serde::Serialize for TopologyConstraint {
83 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
84 let mut state = serializer.serialize_struct(
85 "TopologyConstraint",
86 1,
87 )?;
88 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "key", &self.key)?;
89 crate::serde::ser::SerializeStruct::end(state)
90 }
91}
92
93#[cfg(feature = "schemars")]
94impl crate::schemars::JsonSchema for TopologyConstraint {
95 fn schema_name() -> std::borrow::Cow<'static, str> {
96 "io.k8s.api.scheduling.v1alpha2.TopologyConstraint".into()
97 }
98
99 fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
100 crate::schemars::json_schema!({
101 "description": "TopologyConstraint defines a topology constraint for a PodGroup.",
102 "type": "object",
103 "properties": {
104 "key": {
105 "description": "Key specifies the key of the node label representing the topology domain. All pods within the PodGroup must be colocated within the same domain instance. Different PodGroups can land on different domain instances even if they derive from the same PodGroupTemplate. Examples: \"topology.kubernetes.io/rack\"",
106 "type": "string",
107 },
108 },
109 "required": [
110 "key",
111 ],
112 })
113 }
114}
115
116#[cfg(feature = "schemars08")]
117impl crate::schemars08::JsonSchema for TopologyConstraint {
118 fn schema_name() -> std::string::String {
119 "io.k8s.api.scheduling.v1alpha2.TopologyConstraint".into()
120 }
121
122 fn json_schema(__gen: &mut crate::schemars08::gen::SchemaGenerator) -> crate::schemars08::schema::Schema {
123 crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
124 metadata: Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
125 description: Some("TopologyConstraint defines a topology constraint for a PodGroup.".into()),
126 ..Default::default()
127 })),
128 instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::Object))),
129 object: Some(std::boxed::Box::new(crate::schemars08::schema::ObjectValidation {
130 properties: [
131 (
132 "key".into(),
133 crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
134 metadata: Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
135 description: Some("Key specifies the key of the node label representing the topology domain. All pods within the PodGroup must be colocated within the same domain instance. Different PodGroups can land on different domain instances even if they derive from the same PodGroupTemplate. Examples: \"topology.kubernetes.io/rack\"".into()),
136 ..Default::default()
137 })),
138 instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::String))),
139 ..Default::default()
140 }),
141 ),
142 ].into(),
143 required: [
144 "key".into(),
145 ].into(),
146 ..Default::default()
147 })),
148 ..Default::default()
149 })
150 }
151}