k8s_openapi/v1_35/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    /// Status provides information about what was requested in the spec.
15    pub status: Option<crate::api::resource::v1alpha3::DeviceTaintRuleStatus>,
16}
17
18impl crate::Resource for DeviceTaintRule {
19    const API_VERSION: &'static str = "resource.k8s.io/v1alpha3";
20    const GROUP: &'static str = "resource.k8s.io";
21    const KIND: &'static str = "DeviceTaintRule";
22    const VERSION: &'static str = "v1alpha3";
23    const URL_PATH_SEGMENT: &'static str = "devicetaintrules";
24    type Scope = crate::ClusterResourceScope;
25}
26
27impl crate::ListableResource for DeviceTaintRule {
28    const LIST_KIND: &'static str = "DeviceTaintRuleList";
29}
30
31impl crate::Metadata for DeviceTaintRule {
32    type Ty = crate::apimachinery::pkg::apis::meta::v1::ObjectMeta;
33
34    fn metadata(&self) -> &<Self as crate::Metadata>::Ty {
35        &self.metadata
36    }
37
38    fn metadata_mut(&mut self) -> &mut<Self as crate::Metadata>::Ty {
39        &mut self.metadata
40    }
41}
42
43impl crate::DeepMerge for DeviceTaintRule {
44    fn merge_from(&mut self, other: Self) {
45        crate::DeepMerge::merge_from(&mut self.metadata, other.metadata);
46        crate::DeepMerge::merge_from(&mut self.spec, other.spec);
47        crate::DeepMerge::merge_from(&mut self.status, other.status);
48    }
49}
50
51impl<'de> crate::serde::Deserialize<'de> for DeviceTaintRule {
52    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
53        #[allow(non_camel_case_types)]
54        enum Field {
55            Key_api_version,
56            Key_kind,
57            Key_metadata,
58            Key_spec,
59            Key_status,
60            Other,
61        }
62
63        impl<'de> crate::serde::Deserialize<'de> for Field {
64            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
65                struct Visitor;
66
67                impl crate::serde::de::Visitor<'_> for Visitor {
68                    type Value = Field;
69
70                    fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
71                        f.write_str("field identifier")
72                    }
73
74                    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
75                        Ok(match v {
76                            "apiVersion" => Field::Key_api_version,
77                            "kind" => Field::Key_kind,
78                            "metadata" => Field::Key_metadata,
79                            "spec" => Field::Key_spec,
80                            "status" => Field::Key_status,
81                            _ => Field::Other,
82                        })
83                    }
84                }
85
86                deserializer.deserialize_identifier(Visitor)
87            }
88        }
89
90        struct Visitor;
91
92        impl<'de> crate::serde::de::Visitor<'de> for Visitor {
93            type Value = DeviceTaintRule;
94
95            fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
96                f.write_str(<Self::Value as crate::Resource>::KIND)
97            }
98
99            fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
100                let mut value_metadata: Option<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta> = None;
101                let mut value_spec: Option<crate::api::resource::v1alpha3::DeviceTaintRuleSpec> = None;
102                let mut value_status: Option<crate::api::resource::v1alpha3::DeviceTaintRuleStatus> = None;
103
104                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
105                    match key {
106                        Field::Key_api_version => {
107                            let value_api_version: std::string::String = crate::serde::de::MapAccess::next_value(&mut map)?;
108                            if value_api_version != <Self::Value as crate::Resource>::API_VERSION {
109                                return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_api_version), &<Self::Value as crate::Resource>::API_VERSION));
110                            }
111                        },
112                        Field::Key_kind => {
113                            let value_kind: std::string::String = crate::serde::de::MapAccess::next_value(&mut map)?;
114                            if value_kind != <Self::Value as crate::Resource>::KIND {
115                                return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_kind), &<Self::Value as crate::Resource>::KIND));
116                            }
117                        },
118                        Field::Key_metadata => value_metadata = crate::serde::de::MapAccess::next_value(&mut map)?,
119                        Field::Key_spec => value_spec = crate::serde::de::MapAccess::next_value(&mut map)?,
120                        Field::Key_status => value_status = crate::serde::de::MapAccess::next_value(&mut map)?,
121                        Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
122                    }
123                }
124
125                Ok(DeviceTaintRule {
126                    metadata: value_metadata.unwrap_or_default(),
127                    spec: value_spec.unwrap_or_default(),
128                    status: value_status,
129                })
130            }
131        }
132
133        deserializer.deserialize_struct(
134            <Self as crate::Resource>::KIND,
135            &[
136                "apiVersion",
137                "kind",
138                "metadata",
139                "spec",
140                "status",
141            ],
142            Visitor,
143        )
144    }
145}
146
147impl crate::serde::Serialize for DeviceTaintRule {
148    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
149        let mut state = serializer.serialize_struct(
150            <Self as crate::Resource>::KIND,
151            4 +
152            self.status.as_ref().map_or(0, |_| 1),
153        )?;
154        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiVersion", <Self as crate::Resource>::API_VERSION)?;
155        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kind", <Self as crate::Resource>::KIND)?;
156        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "metadata", &self.metadata)?;
157        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "spec", &self.spec)?;
158        if let Some(value) = &self.status {
159            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "status", value)?;
160        }
161        crate::serde::ser::SerializeStruct::end(state)
162    }
163}
164
165#[cfg(feature = "schemars")]
166impl crate::schemars::JsonSchema for DeviceTaintRule {
167    fn schema_name() -> std::borrow::Cow<'static, str> {
168        "io.k8s.api.resource.v1alpha3.DeviceTaintRule".into()
169    }
170
171    fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
172        crate::schemars::json_schema!({
173            "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.",
174            "type": "object",
175            "properties": {
176                "apiVersion": {
177                    "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",
178                    "type": "string",
179                },
180                "kind": {
181                    "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",
182                    "type": "string",
183                },
184                "metadata": ({
185                    let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta>();
186                    schema_obj.ensure_object().insert("description".into(), "Standard object metadata".into());
187                    schema_obj
188                }),
189                "spec": ({
190                    let mut schema_obj = __gen.subschema_for::<crate::api::resource::v1alpha3::DeviceTaintRuleSpec>();
191                    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());
192                    schema_obj
193                }),
194                "status": ({
195                    let mut schema_obj = __gen.subschema_for::<crate::api::resource::v1alpha3::DeviceTaintRuleStatus>();
196                    schema_obj.ensure_object().insert("description".into(), "Status provides information about what was requested in the spec.".into());
197                    schema_obj
198                }),
199            },
200            "required": [
201                "metadata",
202                "spec",
203            ],
204        })
205    }
206}