k8s_openapi/v1_34/api/resource/v1alpha3/
device_taint_rule.rs

1// Generated from definition io.k8s.api.resource.v1alpha3.DeviceTaintRule
2
3/// DeviceTaintRule adds one taint to all devices which match the selector. This has the same effect as if the taint was specified directly in the ResourceSlice by the DRA driver.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct DeviceTaintRule {
6    /// Standard object metadata
7    pub metadata: crate::apimachinery::pkg::apis::meta::v1::ObjectMeta,
8
9    /// Spec specifies the selector and one taint.
10    ///
11    /// Changing the spec automatically increments the metadata.generation number.
12    pub spec: crate::api::resource::v1alpha3::DeviceTaintRuleSpec,
13}
14
15impl crate::Resource for DeviceTaintRule {
16    const API_VERSION: &'static str = "resource.k8s.io/v1alpha3";
17    const GROUP: &'static str = "resource.k8s.io";
18    const KIND: &'static str = "DeviceTaintRule";
19    const VERSION: &'static str = "v1alpha3";
20    const URL_PATH_SEGMENT: &'static str = "devicetaintrules";
21    type Scope = crate::ClusterResourceScope;
22}
23
24impl crate::ListableResource for DeviceTaintRule {
25    const LIST_KIND: &'static str = "DeviceTaintRuleList";
26}
27
28impl crate::Metadata for DeviceTaintRule {
29    type Ty = crate::apimachinery::pkg::apis::meta::v1::ObjectMeta;
30
31    fn metadata(&self) -> &<Self as crate::Metadata>::Ty {
32        &self.metadata
33    }
34
35    fn metadata_mut(&mut self) -> &mut<Self as crate::Metadata>::Ty {
36        &mut self.metadata
37    }
38}
39
40impl crate::DeepMerge for DeviceTaintRule {
41    fn merge_from(&mut self, other: Self) {
42        crate::DeepMerge::merge_from(&mut self.metadata, other.metadata);
43        crate::DeepMerge::merge_from(&mut self.spec, other.spec);
44    }
45}
46
47impl<'de> crate::serde::Deserialize<'de> for DeviceTaintRule {
48    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
49        #[allow(non_camel_case_types)]
50        enum Field {
51            Key_api_version,
52            Key_kind,
53            Key_metadata,
54            Key_spec,
55            Other,
56        }
57
58        impl<'de> crate::serde::Deserialize<'de> for Field {
59            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
60                struct Visitor;
61
62                impl crate::serde::de::Visitor<'_> for Visitor {
63                    type Value = Field;
64
65                    fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
66                        f.write_str("field identifier")
67                    }
68
69                    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
70                        Ok(match v {
71                            "apiVersion" => Field::Key_api_version,
72                            "kind" => Field::Key_kind,
73                            "metadata" => Field::Key_metadata,
74                            "spec" => Field::Key_spec,
75                            _ => Field::Other,
76                        })
77                    }
78                }
79
80                deserializer.deserialize_identifier(Visitor)
81            }
82        }
83
84        struct Visitor;
85
86        impl<'de> crate::serde::de::Visitor<'de> for Visitor {
87            type Value = DeviceTaintRule;
88
89            fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
90                f.write_str(<Self::Value as crate::Resource>::KIND)
91            }
92
93            fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
94                let mut value_metadata: Option<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta> = None;
95                let mut value_spec: Option<crate::api::resource::v1alpha3::DeviceTaintRuleSpec> = None;
96
97                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
98                    match key {
99                        Field::Key_api_version => {
100                            let value_api_version: std::string::String = crate::serde::de::MapAccess::next_value(&mut map)?;
101                            if value_api_version != <Self::Value as crate::Resource>::API_VERSION {
102                                return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_api_version), &<Self::Value as crate::Resource>::API_VERSION));
103                            }
104                        },
105                        Field::Key_kind => {
106                            let value_kind: std::string::String = crate::serde::de::MapAccess::next_value(&mut map)?;
107                            if value_kind != <Self::Value as crate::Resource>::KIND {
108                                return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_kind), &<Self::Value as crate::Resource>::KIND));
109                            }
110                        },
111                        Field::Key_metadata => value_metadata = crate::serde::de::MapAccess::next_value(&mut map)?,
112                        Field::Key_spec => value_spec = crate::serde::de::MapAccess::next_value(&mut map)?,
113                        Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
114                    }
115                }
116
117                Ok(DeviceTaintRule {
118                    metadata: value_metadata.unwrap_or_default(),
119                    spec: value_spec.unwrap_or_default(),
120                })
121            }
122        }
123
124        deserializer.deserialize_struct(
125            <Self as crate::Resource>::KIND,
126            &[
127                "apiVersion",
128                "kind",
129                "metadata",
130                "spec",
131            ],
132            Visitor,
133        )
134    }
135}
136
137impl crate::serde::Serialize for DeviceTaintRule {
138    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
139        let mut state = serializer.serialize_struct(
140            <Self as crate::Resource>::KIND,
141            4,
142        )?;
143        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiVersion", <Self as crate::Resource>::API_VERSION)?;
144        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kind", <Self as crate::Resource>::KIND)?;
145        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "metadata", &self.metadata)?;
146        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "spec", &self.spec)?;
147        crate::serde::ser::SerializeStruct::end(state)
148    }
149}
150
151#[cfg(feature = "schemars")]
152impl crate::schemars::JsonSchema for DeviceTaintRule {
153    fn schema_name() -> std::borrow::Cow<'static, str> {
154        "io.k8s.api.resource.v1alpha3.DeviceTaintRule".into()
155    }
156
157    fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
158        crate::schemars::json_schema!({
159            "description": "DeviceTaintRule adds one taint to all devices which match the selector. This has the same effect as if the taint was specified directly in the ResourceSlice by the DRA driver.",
160            "type": "object",
161            "properties": {
162                "apiVersion": {
163                    "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
164                    "type": "string",
165                },
166                "kind": {
167                    "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
168                    "type": "string",
169                },
170                "metadata": ({
171                    let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta>();
172                    schema_obj.ensure_object().insert("description".into(), "Standard object metadata".into());
173                    schema_obj
174                }),
175                "spec": ({
176                    let mut schema_obj = __gen.subschema_for::<crate::api::resource::v1alpha3::DeviceTaintRuleSpec>();
177                    schema_obj.ensure_object().insert("description".into(), "Spec specifies the selector and one taint.\n\nChanging the spec automatically increments the metadata.generation number.".into());
178                    schema_obj
179                }),
180            },
181            "required": [
182                "metadata",
183                "spec",
184            ],
185        })
186    }
187}