k8s_openapi/v1_36/api/autoscaling/v2/
metric_identifier.rs1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct MetricIdentifier {
6 pub name: std::string::String,
8
9 pub selector: Option<crate::apimachinery::pkg::apis::meta::v1::LabelSelector>,
11}
12
13impl crate::DeepMerge for MetricIdentifier {
14 fn merge_from(&mut self, other: Self) {
15 crate::DeepMerge::merge_from(&mut self.name, other.name);
16 crate::DeepMerge::merge_from(&mut self.selector, other.selector);
17 }
18}
19
20impl<'de> crate::serde::Deserialize<'de> for MetricIdentifier {
21 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
22 #[allow(non_camel_case_types)]
23 enum Field {
24 Key_name,
25 Key_selector,
26 Other,
27 }
28
29 impl<'de> crate::serde::Deserialize<'de> for Field {
30 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
31 struct Visitor;
32
33 impl crate::serde::de::Visitor<'_> for Visitor {
34 type Value = Field;
35
36 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
37 f.write_str("field identifier")
38 }
39
40 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
41 Ok(match v {
42 "name" => Field::Key_name,
43 "selector" => Field::Key_selector,
44 _ => Field::Other,
45 })
46 }
47 }
48
49 deserializer.deserialize_identifier(Visitor)
50 }
51 }
52
53 struct Visitor;
54
55 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
56 type Value = MetricIdentifier;
57
58 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
59 f.write_str("MetricIdentifier")
60 }
61
62 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
63 let mut value_name: Option<std::string::String> = None;
64 let mut value_selector: Option<crate::apimachinery::pkg::apis::meta::v1::LabelSelector> = None;
65
66 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
67 match key {
68 Field::Key_name => value_name = crate::serde::de::MapAccess::next_value(&mut map)?,
69 Field::Key_selector => value_selector = crate::serde::de::MapAccess::next_value(&mut map)?,
70 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
71 }
72 }
73
74 Ok(MetricIdentifier {
75 name: value_name.unwrap_or_default(),
76 selector: value_selector,
77 })
78 }
79 }
80
81 deserializer.deserialize_struct(
82 "MetricIdentifier",
83 &[
84 "name",
85 "selector",
86 ],
87 Visitor,
88 )
89 }
90}
91
92impl crate::serde::Serialize for MetricIdentifier {
93 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
94 let mut state = serializer.serialize_struct(
95 "MetricIdentifier",
96 1 +
97 self.selector.as_ref().map_or(0, |_| 1),
98 )?;
99 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "name", &self.name)?;
100 if let Some(value) = &self.selector {
101 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "selector", value)?;
102 }
103 crate::serde::ser::SerializeStruct::end(state)
104 }
105}
106
107#[cfg(feature = "schemars")]
108impl crate::schemars::JsonSchema for MetricIdentifier {
109 fn schema_name() -> std::borrow::Cow<'static, str> {
110 "io.k8s.api.autoscaling.v2.MetricIdentifier".into()
111 }
112
113 fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
114 crate::schemars::json_schema!({
115 "description": "MetricIdentifier defines the name and optionally selector for a metric",
116 "type": "object",
117 "properties": {
118 "name": {
119 "description": "name is the name of the given metric",
120 "type": "string",
121 },
122 "selector": ({
123 let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::LabelSelector>();
124 schema_obj.ensure_object().insert("description".into(), "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.".into());
125 schema_obj
126 }),
127 },
128 "required": [
129 "name",
130 ],
131 })
132 }
133}
134
135#[cfg(feature = "schemars08")]
136impl crate::schemars08::JsonSchema for MetricIdentifier {
137 fn schema_name() -> std::string::String {
138 "io.k8s.api.autoscaling.v2.MetricIdentifier".into()
139 }
140
141 fn json_schema(__gen: &mut crate::schemars08::gen::SchemaGenerator) -> crate::schemars08::schema::Schema {
142 crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
143 metadata: Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
144 description: Some("MetricIdentifier defines the name and optionally selector for a metric".into()),
145 ..Default::default()
146 })),
147 instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::Object))),
148 object: Some(std::boxed::Box::new(crate::schemars08::schema::ObjectValidation {
149 properties: [
150 (
151 "name".into(),
152 crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
153 metadata: Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
154 description: Some("name is the name of the given metric".into()),
155 ..Default::default()
156 })),
157 instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::String))),
158 ..Default::default()
159 }),
160 ),
161 (
162 "selector".into(),
163 {
164 let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::LabelSelector>().into_object();
165 schema_obj.metadata = Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
166 description: Some("selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.".into()),
167 ..Default::default()
168 }));
169 crate::schemars08::schema::Schema::Object(schema_obj)
170 },
171 ),
172 ].into(),
173 required: [
174 "name".into(),
175 ].into(),
176 ..Default::default()
177 })),
178 ..Default::default()
179 })
180 }
181}