Skip to main content

k8s_openapi/v1_36/api/scheduling/v1alpha2/
topology_constraint.rs

1// Generated from definition io.k8s.api.scheduling.v1alpha2.TopologyConstraint
2
3/// TopologyConstraint defines a topology constraint for a PodGroup.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct TopologyConstraint {
6    /// 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"
7    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}