1// Generated from definition io.k8s.api.networking.v1.IPAddress
23/// IPAddress represents a single IP of a single IP Family. The object is designed to be used by APIs that operate on IP addresses. The object is used by the Service core API for allocation of IP addresses. An IP address can be represented in different formats, to guarantee the uniqueness of the IP, the name of the object is the IP address in canonical format, four decimal digits separated by dots suppressing leading zeros for IPv4 and the representation defined by RFC 5952 for IPv6. Valid: 192.168.1.5 or 2001:db8::1 or 2001:db8:aaaa:bbbb:cccc:dddd:eeee:1 Invalid: 10.01.2.3 or 2001:db8:0:0:0::1
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct IPAddress {
6/// Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
7pub metadata: crate::apimachinery::pkg::apis::meta::v1::ObjectMeta,
89/// spec is the desired state of the IPAddress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
10pub spec: Option<crate::api::networking::v1::IPAddressSpec>,
11}
1213impl crate::Resource for IPAddress {
14const API_VERSION: &'static str = "networking.k8s.io/v1";
15const GROUP: &'static str = "networking.k8s.io";
16const KIND: &'static str = "IPAddress";
17const VERSION: &'static str = "v1";
18const URL_PATH_SEGMENT: &'static str = "ipaddresses";
19type Scope = crate::ClusterResourceScope;
20}
2122impl crate::ListableResource for IPAddress {
23const LIST_KIND: &'static str = "IPAddressList";
24}
2526impl crate::Metadata for IPAddress {
27type Ty = crate::apimachinery::pkg::apis::meta::v1::ObjectMeta;
2829fn metadata(&self) -> &<Self as crate::Metadata>::Ty {
30&self.metadata
31 }
3233fn metadata_mut(&mut self) -> &mut<Self as crate::Metadata>::Ty {
34&mut self.metadata
35 }
36}
3738impl crate::DeepMerge for IPAddress {
39fn merge_from(&mut self, other: Self) {
40crate::DeepMerge::merge_from(&mut self.metadata, other.metadata);
41crate::DeepMerge::merge_from(&mut self.spec, other.spec);
42 }
43}
4445impl<'de> crate::serde::Deserialize<'de> for IPAddress {
46fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
47#[allow(non_camel_case_types)]
48enum Field {
49 Key_api_version,
50 Key_kind,
51 Key_metadata,
52 Key_spec,
53 Other,
54 }
5556impl<'de> crate::serde::Deserialize<'de> for Field {
57fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
58struct Visitor;
5960impl crate::serde::de::Visitor<'_> for Visitor {
61type Value = Field;
6263fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
64 f.write_str("field identifier")
65 }
6667fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
68Ok(match v {
69"apiVersion" => Field::Key_api_version,
70"kind" => Field::Key_kind,
71"metadata" => Field::Key_metadata,
72"spec" => Field::Key_spec,
73_ => Field::Other,
74 })
75 }
76 }
7778 deserializer.deserialize_identifier(Visitor)
79 }
80 }
8182struct Visitor;
8384impl<'de> crate::serde::de::Visitor<'de> for Visitor {
85type Value = IPAddress;
8687fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
88 f.write_str(<Self::Value as crate::Resource>::KIND)
89 }
9091fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
92let mut value_metadata: Option<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta> = None;
93let mut value_spec: Option<crate::api::networking::v1::IPAddressSpec> = None;
9495while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
96match key {
97 Field::Key_api_version => {
98let value_api_version: std::string::String = crate::serde::de::MapAccess::next_value(&mut map)?;
99if value_api_version != <Self::Value as crate::Resource>::API_VERSION {
100return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_api_version), &<Self::Value as crate::Resource>::API_VERSION));
101 }
102 },
103 Field::Key_kind => {
104let value_kind: std::string::String = crate::serde::de::MapAccess::next_value(&mut map)?;
105if value_kind != <Self::Value as crate::Resource>::KIND {
106return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_kind), &<Self::Value as crate::Resource>::KIND));
107 }
108 },
109 Field::Key_metadata => value_metadata = crate::serde::de::MapAccess::next_value(&mut map)?,
110 Field::Key_spec => value_spec = crate::serde::de::MapAccess::next_value(&mut map)?,
111 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
112 }
113 }
114115Ok(IPAddress {
116 metadata: value_metadata.unwrap_or_default(),
117 spec: value_spec,
118 })
119 }
120 }
121122 deserializer.deserialize_struct(
123 <Self as crate::Resource>::KIND,
124&[
125"apiVersion",
126"kind",
127"metadata",
128"spec",
129 ],
130 Visitor,
131 )
132 }
133}
134135impl crate::serde::Serialize for IPAddress {
136fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
137let mut state = serializer.serialize_struct(
138 <Self as crate::Resource>::KIND,
1393 +
140self.spec.as_ref().map_or(0, |_| 1),
141 )?;
142crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiVersion", <Self as crate::Resource>::API_VERSION)?;
143crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kind", <Self as crate::Resource>::KIND)?;
144crate::serde::ser::SerializeStruct::serialize_field(&mut state, "metadata", &self.metadata)?;
145if let Some(value) = &self.spec {
146crate::serde::ser::SerializeStruct::serialize_field(&mut state, "spec", value)?;
147 }
148crate::serde::ser::SerializeStruct::end(state)
149 }
150}
151152#[cfg(feature = "schemars")]
153impl crate::schemars::JsonSchema for IPAddress {
154fn schema_name() -> std::string::String {
155"io.k8s.api.networking.v1.IPAddress".into()
156 }
157158fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
159crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
160 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
161 description: Some("IPAddress represents a single IP of a single IP Family. The object is designed to be used by APIs that operate on IP addresses. The object is used by the Service core API for allocation of IP addresses. An IP address can be represented in different formats, to guarantee the uniqueness of the IP, the name of the object is the IP address in canonical format, four decimal digits separated by dots suppressing leading zeros for IPv4 and the representation defined by RFC 5952 for IPv6. Valid: 192.168.1.5 or 2001:db8::1 or 2001:db8:aaaa:bbbb:cccc:dddd:eeee:1 Invalid: 10.01.2.3 or 2001:db8:0:0:0::1".into()),
162 ..Default::default()
163 })),
164 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Object))),
165 object: Some(std::boxed::Box::new(crate::schemars::schema::ObjectValidation {
166 properties: [
167 (
168"apiVersion".into(),
169crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
170 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
171 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()),
172 ..Default::default()
173 })),
174 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
175 ..Default::default()
176 }),
177 ),
178 (
179"kind".into(),
180crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
181 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
182 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()),
183 ..Default::default()
184 })),
185 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
186 ..Default::default()
187 }),
188 ),
189 (
190"metadata".into(),
191 {
192let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta>().into_object();
193 schema_obj.metadata = Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
194 description: Some("Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata".into()),
195 ..Default::default()
196 }));
197crate::schemars::schema::Schema::Object(schema_obj)
198 },
199 ),
200 (
201"spec".into(),
202 {
203let mut schema_obj = __gen.subschema_for::<crate::api::networking::v1::IPAddressSpec>().into_object();
204 schema_obj.metadata = Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
205 description: Some("spec is the desired state of the IPAddress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status".into()),
206 ..Default::default()
207 }));
208crate::schemars::schema::Schema::Object(schema_obj)
209 },
210 ),
211 ].into(),
212 required: [
213"metadata".into(),
214 ].into(),
215 ..Default::default()
216 })),
217 ..Default::default()
218 })
219 }
220}