Skip to main content

k8s_openapi/v1_36/api/admissionregistration/v1/
variable.rs

1// Generated from definition io.k8s.api.admissionregistration.v1.Variable
2
3/// Variable is the definition of a variable that is used for composition. A variable is defined as a named expression.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct Variable {
6    /// expression is the expression that will be evaluated as the value of the variable. The CEL expression has access to the same identifiers as the CEL expressions in Validation.
7    pub expression: std::string::String,
8
9    /// name is the name of the variable. The name must be a valid CEL identifier and unique among all variables. The variable can be accessed in other expressions through `variables` For example, if name is "foo", the variable will be available as `variables.foo`
10    pub name: std::string::String,
11}
12
13impl crate::DeepMerge for Variable {
14    fn merge_from(&mut self, other: Self) {
15        crate::DeepMerge::merge_from(&mut self.expression, other.expression);
16        crate::DeepMerge::merge_from(&mut self.name, other.name);
17    }
18}
19
20impl<'de> crate::serde::Deserialize<'de> for Variable {
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_expression,
25            Key_name,
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                            "expression" => Field::Key_expression,
43                            "name" => Field::Key_name,
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 = Variable;
57
58            fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
59                f.write_str("Variable")
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_expression: Option<std::string::String> = None;
64                let mut value_name: Option<std::string::String> = None;
65
66                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
67                    match key {
68                        Field::Key_expression => value_expression = crate::serde::de::MapAccess::next_value(&mut map)?,
69                        Field::Key_name => value_name = 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(Variable {
75                    expression: value_expression.unwrap_or_default(),
76                    name: value_name.unwrap_or_default(),
77                })
78            }
79        }
80
81        deserializer.deserialize_struct(
82            "Variable",
83            &[
84                "expression",
85                "name",
86            ],
87            Visitor,
88        )
89    }
90}
91
92impl crate::serde::Serialize for Variable {
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            "Variable",
96            2,
97        )?;
98        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "expression", &self.expression)?;
99        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "name", &self.name)?;
100        crate::serde::ser::SerializeStruct::end(state)
101    }
102}
103
104#[cfg(feature = "schemars")]
105impl crate::schemars::JsonSchema for Variable {
106    fn schema_name() -> std::borrow::Cow<'static, str> {
107        "io.k8s.api.admissionregistration.v1.Variable".into()
108    }
109
110    fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
111        crate::schemars::json_schema!({
112            "description": "Variable is the definition of a variable that is used for composition. A variable is defined as a named expression.",
113            "type": "object",
114            "properties": {
115                "expression": {
116                    "description": "expression is the expression that will be evaluated as the value of the variable. The CEL expression has access to the same identifiers as the CEL expressions in Validation.",
117                    "type": "string",
118                },
119                "name": {
120                    "description": "name is the name of the variable. The name must be a valid CEL identifier and unique among all variables. The variable can be accessed in other expressions through `variables` For example, if name is \"foo\", the variable will be available as `variables.foo`",
121                    "type": "string",
122                },
123            },
124            "required": [
125                "expression",
126                "name",
127            ],
128        })
129    }
130}
131
132#[cfg(feature = "schemars08")]
133impl crate::schemars08::JsonSchema for Variable {
134    fn schema_name() -> std::string::String {
135        "io.k8s.api.admissionregistration.v1.Variable".into()
136    }
137
138    fn json_schema(__gen: &mut crate::schemars08::gen::SchemaGenerator) -> crate::schemars08::schema::Schema {
139        crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
140            metadata: Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
141                description: Some("Variable is the definition of a variable that is used for composition. A variable is defined as a named expression.".into()),
142                ..Default::default()
143            })),
144            instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::Object))),
145            object: Some(std::boxed::Box::new(crate::schemars08::schema::ObjectValidation {
146                properties: [
147                    (
148                        "expression".into(),
149                        crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
150                            metadata: Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
151                                description: Some("expression is the expression that will be evaluated as the value of the variable. The CEL expression has access to the same identifiers as the CEL expressions in Validation.".into()),
152                                ..Default::default()
153                            })),
154                            instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::String))),
155                            ..Default::default()
156                        }),
157                    ),
158                    (
159                        "name".into(),
160                        crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
161                            metadata: Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
162                                description: Some("name is the name of the variable. The name must be a valid CEL identifier and unique among all variables. The variable can be accessed in other expressions through `variables` For example, if name is \"foo\", the variable will be available as `variables.foo`".into()),
163                                ..Default::default()
164                            })),
165                            instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::String))),
166                            ..Default::default()
167                        }),
168                    ),
169                ].into(),
170                required: [
171                    "expression".into(),
172                    "name".into(),
173                ].into(),
174                ..Default::default()
175            })),
176            ..Default::default()
177        })
178    }
179}