k8s_openapi/v1_33/api/core/v1/
endpoints.rs1#[derive(Clone, Debug, Default, PartialEq)]
21pub struct Endpoints {
22 pub metadata: crate::apimachinery::pkg::apis::meta::v1::ObjectMeta,
24
25 pub subsets: Option<std::vec::Vec<crate::api::core::v1::EndpointSubset>>,
27}
28
29impl crate::Resource for Endpoints {
30 const API_VERSION: &'static str = "v1";
31 const GROUP: &'static str = "";
32 const KIND: &'static str = "Endpoints";
33 const VERSION: &'static str = "v1";
34 const URL_PATH_SEGMENT: &'static str = "endpoints";
35 type Scope = crate::NamespaceResourceScope;
36}
37
38impl crate::ListableResource for Endpoints {
39 const LIST_KIND: &'static str = "EndpointsList";
40}
41
42impl crate::Metadata for Endpoints {
43 type Ty = crate::apimachinery::pkg::apis::meta::v1::ObjectMeta;
44
45 fn metadata(&self) -> &<Self as crate::Metadata>::Ty {
46 &self.metadata
47 }
48
49 fn metadata_mut(&mut self) -> &mut<Self as crate::Metadata>::Ty {
50 &mut self.metadata
51 }
52}
53
54impl crate::DeepMerge for Endpoints {
55 fn merge_from(&mut self, other: Self) {
56 crate::DeepMerge::merge_from(&mut self.metadata, other.metadata);
57 crate::merge_strategies::list::atomic(&mut self.subsets, other.subsets);
58 }
59}
60
61impl<'de> crate::serde::Deserialize<'de> for Endpoints {
62 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
63 #[allow(non_camel_case_types)]
64 enum Field {
65 Key_api_version,
66 Key_kind,
67 Key_metadata,
68 Key_subsets,
69 Other,
70 }
71
72 impl<'de> crate::serde::Deserialize<'de> for Field {
73 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
74 struct Visitor;
75
76 impl crate::serde::de::Visitor<'_> for Visitor {
77 type Value = Field;
78
79 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
80 f.write_str("field identifier")
81 }
82
83 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
84 Ok(match v {
85 "apiVersion" => Field::Key_api_version,
86 "kind" => Field::Key_kind,
87 "metadata" => Field::Key_metadata,
88 "subsets" => Field::Key_subsets,
89 _ => Field::Other,
90 })
91 }
92 }
93
94 deserializer.deserialize_identifier(Visitor)
95 }
96 }
97
98 struct Visitor;
99
100 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
101 type Value = Endpoints;
102
103 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
104 f.write_str(<Self::Value as crate::Resource>::KIND)
105 }
106
107 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
108 let mut value_metadata: Option<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta> = None;
109 let mut value_subsets: Option<std::vec::Vec<crate::api::core::v1::EndpointSubset>> = None;
110
111 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
112 match key {
113 Field::Key_api_version => {
114 let value_api_version: std::string::String = crate::serde::de::MapAccess::next_value(&mut map)?;
115 if value_api_version != <Self::Value as crate::Resource>::API_VERSION {
116 return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_api_version), &<Self::Value as crate::Resource>::API_VERSION));
117 }
118 },
119 Field::Key_kind => {
120 let value_kind: std::string::String = crate::serde::de::MapAccess::next_value(&mut map)?;
121 if value_kind != <Self::Value as crate::Resource>::KIND {
122 return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_kind), &<Self::Value as crate::Resource>::KIND));
123 }
124 },
125 Field::Key_metadata => value_metadata = crate::serde::de::MapAccess::next_value(&mut map)?,
126 Field::Key_subsets => value_subsets = crate::serde::de::MapAccess::next_value(&mut map)?,
127 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
128 }
129 }
130
131 Ok(Endpoints {
132 metadata: value_metadata.unwrap_or_default(),
133 subsets: value_subsets,
134 })
135 }
136 }
137
138 deserializer.deserialize_struct(
139 <Self as crate::Resource>::KIND,
140 &[
141 "apiVersion",
142 "kind",
143 "metadata",
144 "subsets",
145 ],
146 Visitor,
147 )
148 }
149}
150
151impl crate::serde::Serialize for Endpoints {
152 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
153 let mut state = serializer.serialize_struct(
154 <Self as crate::Resource>::KIND,
155 3 +
156 self.subsets.as_ref().map_or(0, |_| 1),
157 )?;
158 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiVersion", <Self as crate::Resource>::API_VERSION)?;
159 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kind", <Self as crate::Resource>::KIND)?;
160 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "metadata", &self.metadata)?;
161 if let Some(value) = &self.subsets {
162 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "subsets", value)?;
163 }
164 crate::serde::ser::SerializeStruct::end(state)
165 }
166}
167
168#[cfg(feature = "schemars")]
169impl crate::schemars::JsonSchema for Endpoints {
170 fn schema_name() -> std::string::String {
171 "io.k8s.api.core.v1.Endpoints".into()
172 }
173
174 fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
175 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
176 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
177 description: Some("Endpoints is a collection of endpoints that implement the actual service. Example:\n\n\t Name: \"mysvc\",\n\t Subsets: [\n\t {\n\t Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n\t Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n\t },\n\t {\n\t Addresses: [{\"ip\": \"10.10.3.3\"}],\n\t Ports: [{\"name\": \"a\", \"port\": 93}, {\"name\": \"b\", \"port\": 76}]\n\t },\n\t]\n\nEndpoints is a legacy API and does not contain information about all Service features. Use discoveryv1.EndpointSlice for complete information about Service endpoints.\n\nDeprecated: This API is deprecated in v1.33+. Use discoveryv1.EndpointSlice.".into()),
178 ..Default::default()
179 })),
180 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Object))),
181 object: Some(std::boxed::Box::new(crate::schemars::schema::ObjectValidation {
182 properties: [
183 (
184 "apiVersion".into(),
185 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
186 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
187 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".into()),
188 ..Default::default()
189 })),
190 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
191 ..Default::default()
192 }),
193 ),
194 (
195 "kind".into(),
196 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
197 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
198 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".into()),
199 ..Default::default()
200 })),
201 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
202 ..Default::default()
203 }),
204 ),
205 (
206 "metadata".into(),
207 {
208 let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta>().into_object();
209 schema_obj.metadata = Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
210 description: Some("Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata".into()),
211 ..Default::default()
212 }));
213 crate::schemars::schema::Schema::Object(schema_obj)
214 },
215 ),
216 (
217 "subsets".into(),
218 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
219 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
220 description: Some("The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.".into()),
221 ..Default::default()
222 })),
223 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Array))),
224 array: Some(std::boxed::Box::new(crate::schemars::schema::ArrayValidation {
225 items: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(__gen.subschema_for::<crate::api::core::v1::EndpointSubset>()))),
226 ..Default::default()
227 })),
228 ..Default::default()
229 }),
230 ),
231 ].into(),
232 required: [
233 "metadata".into(),
234 ].into(),
235 ..Default::default()
236 })),
237 ..Default::default()
238 })
239 }
240}