k8s_openapi/v1_30/api/authentication/v1/
self_subject_review.rs

1// Generated from definition io.k8s.api.authentication.v1.SelfSubjectReview
2
3/// SelfSubjectReview contains the user information that the kube-apiserver has about the user making this request. When using impersonation, users will receive the user info of the user being impersonated.  If impersonation or request header authentication is used, any extra keys will have their case ignored and returned as lowercase.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct SelfSubjectReview {
6    /// Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
7    pub metadata: crate::apimachinery::pkg::apis::meta::v1::ObjectMeta,
8
9    /// Status is filled in by the server with the user attributes.
10    pub status: Option<crate::api::authentication::v1::SelfSubjectReviewStatus>,
11}
12
13impl crate::Resource for SelfSubjectReview {
14    const API_VERSION: &'static str = "authentication.k8s.io/v1";
15    const GROUP: &'static str = "authentication.k8s.io";
16    const KIND: &'static str = "SelfSubjectReview";
17    const VERSION: &'static str = "v1";
18    const URL_PATH_SEGMENT: &'static str = "selfsubjectreviews";
19    type Scope = crate::ClusterResourceScope;
20}
21
22impl crate::Metadata for SelfSubjectReview {
23    type Ty = crate::apimachinery::pkg::apis::meta::v1::ObjectMeta;
24
25    fn metadata(&self) -> &<Self as crate::Metadata>::Ty {
26        &self.metadata
27    }
28
29    fn metadata_mut(&mut self) -> &mut<Self as crate::Metadata>::Ty {
30        &mut self.metadata
31    }
32}
33
34impl crate::DeepMerge for SelfSubjectReview {
35    fn merge_from(&mut self, other: Self) {
36        crate::DeepMerge::merge_from(&mut self.metadata, other.metadata);
37        crate::DeepMerge::merge_from(&mut self.status, other.status);
38    }
39}
40
41impl<'de> crate::serde::Deserialize<'de> for SelfSubjectReview {
42    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
43        #[allow(non_camel_case_types)]
44        enum Field {
45            Key_api_version,
46            Key_kind,
47            Key_metadata,
48            Key_status,
49            Other,
50        }
51
52        impl<'de> crate::serde::Deserialize<'de> for Field {
53            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
54                struct Visitor;
55
56                impl<'de> crate::serde::de::Visitor<'de> for Visitor {
57                    type Value = Field;
58
59                    fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
60                        f.write_str("field identifier")
61                    }
62
63                    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
64                        Ok(match v {
65                            "apiVersion" => Field::Key_api_version,
66                            "kind" => Field::Key_kind,
67                            "metadata" => Field::Key_metadata,
68                            "status" => Field::Key_status,
69                            _ => Field::Other,
70                        })
71                    }
72                }
73
74                deserializer.deserialize_identifier(Visitor)
75            }
76        }
77
78        struct Visitor;
79
80        impl<'de> crate::serde::de::Visitor<'de> for Visitor {
81            type Value = SelfSubjectReview;
82
83            fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
84                f.write_str(<Self::Value as crate::Resource>::KIND)
85            }
86
87            fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
88                let mut value_metadata: Option<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta> = None;
89                let mut value_status: Option<crate::api::authentication::v1::SelfSubjectReviewStatus> = None;
90
91                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
92                    match key {
93                        Field::Key_api_version => {
94                            let value_api_version: String = crate::serde::de::MapAccess::next_value(&mut map)?;
95                            if value_api_version != <Self::Value as crate::Resource>::API_VERSION {
96                                return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_api_version), &<Self::Value as crate::Resource>::API_VERSION));
97                            }
98                        },
99                        Field::Key_kind => {
100                            let value_kind: String = crate::serde::de::MapAccess::next_value(&mut map)?;
101                            if value_kind != <Self::Value as crate::Resource>::KIND {
102                                return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_kind), &<Self::Value as crate::Resource>::KIND));
103                            }
104                        },
105                        Field::Key_metadata => value_metadata = crate::serde::de::MapAccess::next_value(&mut map)?,
106                        Field::Key_status => value_status = crate::serde::de::MapAccess::next_value(&mut map)?,
107                        Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
108                    }
109                }
110
111                Ok(SelfSubjectReview {
112                    metadata: value_metadata.unwrap_or_default(),
113                    status: value_status,
114                })
115            }
116        }
117
118        deserializer.deserialize_struct(
119            <Self as crate::Resource>::KIND,
120            &[
121                "apiVersion",
122                "kind",
123                "metadata",
124                "status",
125            ],
126            Visitor,
127        )
128    }
129}
130
131impl crate::serde::Serialize for SelfSubjectReview {
132    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
133        let mut state = serializer.serialize_struct(
134            <Self as crate::Resource>::KIND,
135            3 +
136            self.status.as_ref().map_or(0, |_| 1),
137        )?;
138        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiVersion", <Self as crate::Resource>::API_VERSION)?;
139        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kind", <Self as crate::Resource>::KIND)?;
140        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "metadata", &self.metadata)?;
141        if let Some(value) = &self.status {
142            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "status", value)?;
143        }
144        crate::serde::ser::SerializeStruct::end(state)
145    }
146}
147
148#[cfg(feature = "schemars")]
149impl crate::schemars::JsonSchema for SelfSubjectReview {
150    fn schema_name() -> String {
151        "io.k8s.api.authentication.v1.SelfSubjectReview".to_owned()
152    }
153
154    fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
155        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
156            metadata: Some(Box::new(crate::schemars::schema::Metadata {
157                description: Some("SelfSubjectReview contains the user information that the kube-apiserver has about the user making this request. When using impersonation, users will receive the user info of the user being impersonated.  If impersonation or request header authentication is used, any extra keys will have their case ignored and returned as lowercase.".to_owned()),
158                ..Default::default()
159            })),
160            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Object))),
161            object: Some(Box::new(crate::schemars::schema::ObjectValidation {
162                properties: [
163                    (
164                        "apiVersion".to_owned(),
165                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
166                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
167                                description: Some("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".to_owned()),
168                                ..Default::default()
169                            })),
170                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
171                            ..Default::default()
172                        }),
173                    ),
174                    (
175                        "kind".to_owned(),
176                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
177                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
178                                description: Some("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".to_owned()),
179                                ..Default::default()
180                            })),
181                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
182                            ..Default::default()
183                        }),
184                    ),
185                    (
186                        "metadata".to_owned(),
187                        {
188                            let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta>().into_object();
189                            schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
190                                description: Some("Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata".to_owned()),
191                                ..Default::default()
192                            }));
193                            crate::schemars::schema::Schema::Object(schema_obj)
194                        },
195                    ),
196                    (
197                        "status".to_owned(),
198                        {
199                            let mut schema_obj = __gen.subschema_for::<crate::api::authentication::v1::SelfSubjectReviewStatus>().into_object();
200                            schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
201                                description: Some("Status is filled in by the server with the user attributes.".to_owned()),
202                                ..Default::default()
203                            }));
204                            crate::schemars::schema::Schema::Object(schema_obj)
205                        },
206                    ),
207                ].into(),
208                required: [
209                    "metadata".to_owned(),
210                ].into(),
211                ..Default::default()
212            })),
213            ..Default::default()
214        })
215    }
216}