k8s_openapi/v1_35/api/networking/v1/
network_policy_port.rs1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct NetworkPolicyPort {
6 pub end_port: Option<i32>,
8
9 pub port: Option<crate::apimachinery::pkg::util::intstr::IntOrString>,
11
12 pub protocol: Option<std::string::String>,
14}
15
16impl crate::DeepMerge for NetworkPolicyPort {
17 fn merge_from(&mut self, other: Self) {
18 crate::DeepMerge::merge_from(&mut self.end_port, other.end_port);
19 crate::DeepMerge::merge_from(&mut self.port, other.port);
20 crate::DeepMerge::merge_from(&mut self.protocol, other.protocol);
21 }
22}
23
24impl<'de> crate::serde::Deserialize<'de> for NetworkPolicyPort {
25 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
26 #[allow(non_camel_case_types)]
27 enum Field {
28 Key_end_port,
29 Key_port,
30 Key_protocol,
31 Other,
32 }
33
34 impl<'de> crate::serde::Deserialize<'de> for Field {
35 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
36 struct Visitor;
37
38 impl crate::serde::de::Visitor<'_> for Visitor {
39 type Value = Field;
40
41 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
42 f.write_str("field identifier")
43 }
44
45 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
46 Ok(match v {
47 "endPort" => Field::Key_end_port,
48 "port" => Field::Key_port,
49 "protocol" => Field::Key_protocol,
50 _ => Field::Other,
51 })
52 }
53 }
54
55 deserializer.deserialize_identifier(Visitor)
56 }
57 }
58
59 struct Visitor;
60
61 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
62 type Value = NetworkPolicyPort;
63
64 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
65 f.write_str("NetworkPolicyPort")
66 }
67
68 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
69 let mut value_end_port: Option<i32> = None;
70 let mut value_port: Option<crate::apimachinery::pkg::util::intstr::IntOrString> = None;
71 let mut value_protocol: Option<std::string::String> = None;
72
73 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
74 match key {
75 Field::Key_end_port => value_end_port = crate::serde::de::MapAccess::next_value(&mut map)?,
76 Field::Key_port => value_port = crate::serde::de::MapAccess::next_value(&mut map)?,
77 Field::Key_protocol => value_protocol = crate::serde::de::MapAccess::next_value(&mut map)?,
78 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
79 }
80 }
81
82 Ok(NetworkPolicyPort {
83 end_port: value_end_port,
84 port: value_port,
85 protocol: value_protocol,
86 })
87 }
88 }
89
90 deserializer.deserialize_struct(
91 "NetworkPolicyPort",
92 &[
93 "endPort",
94 "port",
95 "protocol",
96 ],
97 Visitor,
98 )
99 }
100}
101
102impl crate::serde::Serialize for NetworkPolicyPort {
103 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
104 let mut state = serializer.serialize_struct(
105 "NetworkPolicyPort",
106 self.end_port.as_ref().map_or(0, |_| 1) +
107 self.port.as_ref().map_or(0, |_| 1) +
108 self.protocol.as_ref().map_or(0, |_| 1),
109 )?;
110 if let Some(value) = &self.end_port {
111 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "endPort", value)?;
112 }
113 if let Some(value) = &self.port {
114 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "port", value)?;
115 }
116 if let Some(value) = &self.protocol {
117 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "protocol", value)?;
118 }
119 crate::serde::ser::SerializeStruct::end(state)
120 }
121}
122
123#[cfg(feature = "schemars")]
124impl crate::schemars::JsonSchema for NetworkPolicyPort {
125 fn schema_name() -> std::borrow::Cow<'static, str> {
126 "io.k8s.api.networking.v1.NetworkPolicyPort".into()
127 }
128
129 fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
130 crate::schemars::json_schema!({
131 "description": "NetworkPolicyPort describes a port to allow traffic on",
132 "type": "object",
133 "properties": {
134 "endPort": {
135 "description": "endPort indicates that the range of ports from port to endPort if set, inclusive, should be allowed by the policy. This field cannot be defined if the port field is not defined or if the port field is defined as a named (string) port. The endPort must be equal or greater than port.",
136 "type": "integer",
137 "format": "int32",
138 },
139 "port": ({
140 let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::util::intstr::IntOrString>();
141 schema_obj.ensure_object().insert("description".into(), "port represents the port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.".into());
142 schema_obj
143 }),
144 "protocol": {
145 "description": "protocol represents the protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.",
146 "type": "string",
147 },
148 },
149 })
150 }
151}