google_cloud_edgecontainer_v1/
model.rs

1// Copyright 2025 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14//
15// Code generated by sidekick. DO NOT EDIT.
16
17#![allow(rustdoc::redundant_explicit_links)]
18#![allow(rustdoc::broken_intra_doc_links)]
19#![no_implicit_prelude]
20extern crate async_trait;
21extern crate bytes;
22extern crate gax;
23extern crate gaxi;
24extern crate lazy_static;
25extern crate location;
26extern crate longrunning;
27extern crate lro;
28extern crate reqwest;
29extern crate rpc;
30extern crate serde;
31extern crate serde_json;
32extern crate serde_with;
33extern crate std;
34extern crate tracing;
35extern crate wkt;
36
37/// A Google Distributed Cloud Edge Kubernetes cluster.
38#[derive(Clone, Default, PartialEq)]
39#[non_exhaustive]
40pub struct Cluster {
41    /// Required. The resource name of the cluster.
42    pub name: std::string::String,
43
44    /// Output only. The time when the cluster was created.
45    pub create_time: std::option::Option<wkt::Timestamp>,
46
47    /// Output only. The time when the cluster was last updated.
48    pub update_time: std::option::Option<wkt::Timestamp>,
49
50    /// Labels associated with this resource.
51    pub labels: std::collections::HashMap<std::string::String, std::string::String>,
52
53    /// Required. Fleet configuration.
54    pub fleet: std::option::Option<crate::model::Fleet>,
55
56    /// Required. Cluster-wide networking configuration.
57    pub networking: std::option::Option<crate::model::ClusterNetworking>,
58
59    /// Required. Immutable. RBAC policy that will be applied and managed by GEC.
60    pub authorization: std::option::Option<crate::model::Authorization>,
61
62    /// Optional. The default maximum number of pods per node used if a maximum
63    /// value is not specified explicitly for a node pool in this cluster. If
64    /// unspecified, the Kubernetes default value will be used.
65    pub default_max_pods_per_node: i32,
66
67    /// Output only. The IP address of the Kubernetes API server.
68    pub endpoint: std::string::String,
69
70    /// Output only. The port number of the Kubernetes API server.
71    pub port: i32,
72
73    /// Output only. The PEM-encoded public certificate of the cluster's CA.
74    pub cluster_ca_certificate: std::string::String,
75
76    /// Optional. Cluster-wide maintenance policy configuration.
77    pub maintenance_policy: std::option::Option<crate::model::MaintenancePolicy>,
78
79    /// Output only. The control plane release version
80    pub control_plane_version: std::string::String,
81
82    /// Output only. The lowest release version among all worker nodes. This field
83    /// can be empty if the cluster does not have any worker nodes.
84    pub node_version: std::string::String,
85
86    /// Optional. The configuration of the cluster control plane.
87    pub control_plane: std::option::Option<crate::model::cluster::ControlPlane>,
88
89    /// Optional. The configuration of the system add-ons.
90    pub system_addons_config: std::option::Option<crate::model::cluster::SystemAddonsConfig>,
91
92    /// Optional. IPv4 address pools for cluster data plane external load
93    /// balancing.
94    pub external_load_balancer_ipv4_address_pools: std::vec::Vec<std::string::String>,
95
96    /// Optional. Remote control plane disk encryption options. This field is only
97    /// used when enabling CMEK support.
98    pub control_plane_encryption:
99        std::option::Option<crate::model::cluster::ControlPlaneEncryption>,
100
101    /// Output only. The current status of the cluster.
102    pub status: crate::model::cluster::Status,
103
104    /// Output only. All the maintenance events scheduled for the cluster,
105    /// including the ones ongoing, planned for the future and done in the past (up
106    /// to 90 days).
107    pub maintenance_events: std::vec::Vec<crate::model::cluster::MaintenanceEvent>,
108
109    /// Optional. The target cluster version. For example: "1.5.0".
110    pub target_version: std::string::String,
111
112    /// Optional. The release channel a cluster is subscribed to.
113    pub release_channel: crate::model::cluster::ReleaseChannel,
114
115    /// Optional. Configuration of the cluster survivability, e.g., for the case
116    /// when network connectivity is lost. Note: This only applies to local control
117    /// plane clusters.
118    pub survivability_config: std::option::Option<crate::model::cluster::SurvivabilityConfig>,
119
120    /// Optional. IPv6 address pools for cluster data plane external load
121    /// balancing.
122    pub external_load_balancer_ipv6_address_pools: std::vec::Vec<std::string::String>,
123
124    /// Output only. The current connection state of the cluster.
125    pub connection_state: std::option::Option<crate::model::cluster::ConnectionState>,
126
127    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
128}
129
130impl Cluster {
131    pub fn new() -> Self {
132        std::default::Default::default()
133    }
134
135    /// Sets the value of [name][crate::model::Cluster::name].
136    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
137        self.name = v.into();
138        self
139    }
140
141    /// Sets the value of [create_time][crate::model::Cluster::create_time].
142    pub fn set_create_time<T>(mut self, v: T) -> Self
143    where
144        T: std::convert::Into<wkt::Timestamp>,
145    {
146        self.create_time = std::option::Option::Some(v.into());
147        self
148    }
149
150    /// Sets or clears the value of [create_time][crate::model::Cluster::create_time].
151    pub fn set_or_clear_create_time<T>(mut self, v: std::option::Option<T>) -> Self
152    where
153        T: std::convert::Into<wkt::Timestamp>,
154    {
155        self.create_time = v.map(|x| x.into());
156        self
157    }
158
159    /// Sets the value of [update_time][crate::model::Cluster::update_time].
160    pub fn set_update_time<T>(mut self, v: T) -> Self
161    where
162        T: std::convert::Into<wkt::Timestamp>,
163    {
164        self.update_time = std::option::Option::Some(v.into());
165        self
166    }
167
168    /// Sets or clears the value of [update_time][crate::model::Cluster::update_time].
169    pub fn set_or_clear_update_time<T>(mut self, v: std::option::Option<T>) -> Self
170    where
171        T: std::convert::Into<wkt::Timestamp>,
172    {
173        self.update_time = v.map(|x| x.into());
174        self
175    }
176
177    /// Sets the value of [labels][crate::model::Cluster::labels].
178    pub fn set_labels<T, K, V>(mut self, v: T) -> Self
179    where
180        T: std::iter::IntoIterator<Item = (K, V)>,
181        K: std::convert::Into<std::string::String>,
182        V: std::convert::Into<std::string::String>,
183    {
184        use std::iter::Iterator;
185        self.labels = v.into_iter().map(|(k, v)| (k.into(), v.into())).collect();
186        self
187    }
188
189    /// Sets the value of [fleet][crate::model::Cluster::fleet].
190    pub fn set_fleet<T>(mut self, v: T) -> Self
191    where
192        T: std::convert::Into<crate::model::Fleet>,
193    {
194        self.fleet = std::option::Option::Some(v.into());
195        self
196    }
197
198    /// Sets or clears the value of [fleet][crate::model::Cluster::fleet].
199    pub fn set_or_clear_fleet<T>(mut self, v: std::option::Option<T>) -> Self
200    where
201        T: std::convert::Into<crate::model::Fleet>,
202    {
203        self.fleet = v.map(|x| x.into());
204        self
205    }
206
207    /// Sets the value of [networking][crate::model::Cluster::networking].
208    pub fn set_networking<T>(mut self, v: T) -> Self
209    where
210        T: std::convert::Into<crate::model::ClusterNetworking>,
211    {
212        self.networking = std::option::Option::Some(v.into());
213        self
214    }
215
216    /// Sets or clears the value of [networking][crate::model::Cluster::networking].
217    pub fn set_or_clear_networking<T>(mut self, v: std::option::Option<T>) -> Self
218    where
219        T: std::convert::Into<crate::model::ClusterNetworking>,
220    {
221        self.networking = v.map(|x| x.into());
222        self
223    }
224
225    /// Sets the value of [authorization][crate::model::Cluster::authorization].
226    pub fn set_authorization<T>(mut self, v: T) -> Self
227    where
228        T: std::convert::Into<crate::model::Authorization>,
229    {
230        self.authorization = std::option::Option::Some(v.into());
231        self
232    }
233
234    /// Sets or clears the value of [authorization][crate::model::Cluster::authorization].
235    pub fn set_or_clear_authorization<T>(mut self, v: std::option::Option<T>) -> Self
236    where
237        T: std::convert::Into<crate::model::Authorization>,
238    {
239        self.authorization = v.map(|x| x.into());
240        self
241    }
242
243    /// Sets the value of [default_max_pods_per_node][crate::model::Cluster::default_max_pods_per_node].
244    pub fn set_default_max_pods_per_node<T: std::convert::Into<i32>>(mut self, v: T) -> Self {
245        self.default_max_pods_per_node = v.into();
246        self
247    }
248
249    /// Sets the value of [endpoint][crate::model::Cluster::endpoint].
250    pub fn set_endpoint<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
251        self.endpoint = v.into();
252        self
253    }
254
255    /// Sets the value of [port][crate::model::Cluster::port].
256    pub fn set_port<T: std::convert::Into<i32>>(mut self, v: T) -> Self {
257        self.port = v.into();
258        self
259    }
260
261    /// Sets the value of [cluster_ca_certificate][crate::model::Cluster::cluster_ca_certificate].
262    pub fn set_cluster_ca_certificate<T: std::convert::Into<std::string::String>>(
263        mut self,
264        v: T,
265    ) -> Self {
266        self.cluster_ca_certificate = v.into();
267        self
268    }
269
270    /// Sets the value of [maintenance_policy][crate::model::Cluster::maintenance_policy].
271    pub fn set_maintenance_policy<T>(mut self, v: T) -> Self
272    where
273        T: std::convert::Into<crate::model::MaintenancePolicy>,
274    {
275        self.maintenance_policy = std::option::Option::Some(v.into());
276        self
277    }
278
279    /// Sets or clears the value of [maintenance_policy][crate::model::Cluster::maintenance_policy].
280    pub fn set_or_clear_maintenance_policy<T>(mut self, v: std::option::Option<T>) -> Self
281    where
282        T: std::convert::Into<crate::model::MaintenancePolicy>,
283    {
284        self.maintenance_policy = v.map(|x| x.into());
285        self
286    }
287
288    /// Sets the value of [control_plane_version][crate::model::Cluster::control_plane_version].
289    pub fn set_control_plane_version<T: std::convert::Into<std::string::String>>(
290        mut self,
291        v: T,
292    ) -> Self {
293        self.control_plane_version = v.into();
294        self
295    }
296
297    /// Sets the value of [node_version][crate::model::Cluster::node_version].
298    pub fn set_node_version<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
299        self.node_version = v.into();
300        self
301    }
302
303    /// Sets the value of [control_plane][crate::model::Cluster::control_plane].
304    pub fn set_control_plane<T>(mut self, v: T) -> Self
305    where
306        T: std::convert::Into<crate::model::cluster::ControlPlane>,
307    {
308        self.control_plane = std::option::Option::Some(v.into());
309        self
310    }
311
312    /// Sets or clears the value of [control_plane][crate::model::Cluster::control_plane].
313    pub fn set_or_clear_control_plane<T>(mut self, v: std::option::Option<T>) -> Self
314    where
315        T: std::convert::Into<crate::model::cluster::ControlPlane>,
316    {
317        self.control_plane = v.map(|x| x.into());
318        self
319    }
320
321    /// Sets the value of [system_addons_config][crate::model::Cluster::system_addons_config].
322    pub fn set_system_addons_config<T>(mut self, v: T) -> Self
323    where
324        T: std::convert::Into<crate::model::cluster::SystemAddonsConfig>,
325    {
326        self.system_addons_config = std::option::Option::Some(v.into());
327        self
328    }
329
330    /// Sets or clears the value of [system_addons_config][crate::model::Cluster::system_addons_config].
331    pub fn set_or_clear_system_addons_config<T>(mut self, v: std::option::Option<T>) -> Self
332    where
333        T: std::convert::Into<crate::model::cluster::SystemAddonsConfig>,
334    {
335        self.system_addons_config = v.map(|x| x.into());
336        self
337    }
338
339    /// Sets the value of [external_load_balancer_ipv4_address_pools][crate::model::Cluster::external_load_balancer_ipv4_address_pools].
340    pub fn set_external_load_balancer_ipv4_address_pools<T, V>(mut self, v: T) -> Self
341    where
342        T: std::iter::IntoIterator<Item = V>,
343        V: std::convert::Into<std::string::String>,
344    {
345        use std::iter::Iterator;
346        self.external_load_balancer_ipv4_address_pools = v.into_iter().map(|i| i.into()).collect();
347        self
348    }
349
350    /// Sets the value of [control_plane_encryption][crate::model::Cluster::control_plane_encryption].
351    pub fn set_control_plane_encryption<T>(mut self, v: T) -> Self
352    where
353        T: std::convert::Into<crate::model::cluster::ControlPlaneEncryption>,
354    {
355        self.control_plane_encryption = std::option::Option::Some(v.into());
356        self
357    }
358
359    /// Sets or clears the value of [control_plane_encryption][crate::model::Cluster::control_plane_encryption].
360    pub fn set_or_clear_control_plane_encryption<T>(mut self, v: std::option::Option<T>) -> Self
361    where
362        T: std::convert::Into<crate::model::cluster::ControlPlaneEncryption>,
363    {
364        self.control_plane_encryption = v.map(|x| x.into());
365        self
366    }
367
368    /// Sets the value of [status][crate::model::Cluster::status].
369    pub fn set_status<T: std::convert::Into<crate::model::cluster::Status>>(
370        mut self,
371        v: T,
372    ) -> Self {
373        self.status = v.into();
374        self
375    }
376
377    /// Sets the value of [maintenance_events][crate::model::Cluster::maintenance_events].
378    pub fn set_maintenance_events<T, V>(mut self, v: T) -> Self
379    where
380        T: std::iter::IntoIterator<Item = V>,
381        V: std::convert::Into<crate::model::cluster::MaintenanceEvent>,
382    {
383        use std::iter::Iterator;
384        self.maintenance_events = v.into_iter().map(|i| i.into()).collect();
385        self
386    }
387
388    /// Sets the value of [target_version][crate::model::Cluster::target_version].
389    pub fn set_target_version<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
390        self.target_version = v.into();
391        self
392    }
393
394    /// Sets the value of [release_channel][crate::model::Cluster::release_channel].
395    pub fn set_release_channel<T: std::convert::Into<crate::model::cluster::ReleaseChannel>>(
396        mut self,
397        v: T,
398    ) -> Self {
399        self.release_channel = v.into();
400        self
401    }
402
403    /// Sets the value of [survivability_config][crate::model::Cluster::survivability_config].
404    pub fn set_survivability_config<T>(mut self, v: T) -> Self
405    where
406        T: std::convert::Into<crate::model::cluster::SurvivabilityConfig>,
407    {
408        self.survivability_config = std::option::Option::Some(v.into());
409        self
410    }
411
412    /// Sets or clears the value of [survivability_config][crate::model::Cluster::survivability_config].
413    pub fn set_or_clear_survivability_config<T>(mut self, v: std::option::Option<T>) -> Self
414    where
415        T: std::convert::Into<crate::model::cluster::SurvivabilityConfig>,
416    {
417        self.survivability_config = v.map(|x| x.into());
418        self
419    }
420
421    /// Sets the value of [external_load_balancer_ipv6_address_pools][crate::model::Cluster::external_load_balancer_ipv6_address_pools].
422    pub fn set_external_load_balancer_ipv6_address_pools<T, V>(mut self, v: T) -> Self
423    where
424        T: std::iter::IntoIterator<Item = V>,
425        V: std::convert::Into<std::string::String>,
426    {
427        use std::iter::Iterator;
428        self.external_load_balancer_ipv6_address_pools = v.into_iter().map(|i| i.into()).collect();
429        self
430    }
431
432    /// Sets the value of [connection_state][crate::model::Cluster::connection_state].
433    pub fn set_connection_state<T>(mut self, v: T) -> Self
434    where
435        T: std::convert::Into<crate::model::cluster::ConnectionState>,
436    {
437        self.connection_state = std::option::Option::Some(v.into());
438        self
439    }
440
441    /// Sets or clears the value of [connection_state][crate::model::Cluster::connection_state].
442    pub fn set_or_clear_connection_state<T>(mut self, v: std::option::Option<T>) -> Self
443    where
444        T: std::convert::Into<crate::model::cluster::ConnectionState>,
445    {
446        self.connection_state = v.map(|x| x.into());
447        self
448    }
449}
450
451impl wkt::message::Message for Cluster {
452    fn typename() -> &'static str {
453        "type.googleapis.com/google.cloud.edgecontainer.v1.Cluster"
454    }
455}
456
457#[doc(hidden)]
458impl<'de> serde::de::Deserialize<'de> for Cluster {
459    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
460    where
461        D: serde::Deserializer<'de>,
462    {
463        #[allow(non_camel_case_types)]
464        #[doc(hidden)]
465        #[derive(PartialEq, Eq, Hash)]
466        enum __FieldTag {
467            __name,
468            __create_time,
469            __update_time,
470            __labels,
471            __fleet,
472            __networking,
473            __authorization,
474            __default_max_pods_per_node,
475            __endpoint,
476            __port,
477            __cluster_ca_certificate,
478            __maintenance_policy,
479            __control_plane_version,
480            __node_version,
481            __control_plane,
482            __system_addons_config,
483            __external_load_balancer_ipv4_address_pools,
484            __control_plane_encryption,
485            __status,
486            __maintenance_events,
487            __target_version,
488            __release_channel,
489            __survivability_config,
490            __external_load_balancer_ipv6_address_pools,
491            __connection_state,
492            Unknown(std::string::String),
493        }
494        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
495            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
496            where
497                D: serde::Deserializer<'de>,
498            {
499                struct Visitor;
500                impl<'de> serde::de::Visitor<'de> for Visitor {
501                    type Value = __FieldTag;
502                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
503                        formatter.write_str("a field name for Cluster")
504                    }
505                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
506                    where
507                        E: serde::de::Error,
508                    {
509                        use std::result::Result::Ok;
510                        use std::string::ToString;
511                        match value {
512                            "name" => Ok(__FieldTag::__name),
513                            "createTime" => Ok(__FieldTag::__create_time),
514                            "create_time" => Ok(__FieldTag::__create_time),
515                            "updateTime" => Ok(__FieldTag::__update_time),
516                            "update_time" => Ok(__FieldTag::__update_time),
517                            "labels" => Ok(__FieldTag::__labels),
518                            "fleet" => Ok(__FieldTag::__fleet),
519                            "networking" => Ok(__FieldTag::__networking),
520                            "authorization" => Ok(__FieldTag::__authorization),
521                            "defaultMaxPodsPerNode" => Ok(__FieldTag::__default_max_pods_per_node),
522                            "default_max_pods_per_node" => {
523                                Ok(__FieldTag::__default_max_pods_per_node)
524                            }
525                            "endpoint" => Ok(__FieldTag::__endpoint),
526                            "port" => Ok(__FieldTag::__port),
527                            "clusterCaCertificate" => Ok(__FieldTag::__cluster_ca_certificate),
528                            "cluster_ca_certificate" => Ok(__FieldTag::__cluster_ca_certificate),
529                            "maintenancePolicy" => Ok(__FieldTag::__maintenance_policy),
530                            "maintenance_policy" => Ok(__FieldTag::__maintenance_policy),
531                            "controlPlaneVersion" => Ok(__FieldTag::__control_plane_version),
532                            "control_plane_version" => Ok(__FieldTag::__control_plane_version),
533                            "nodeVersion" => Ok(__FieldTag::__node_version),
534                            "node_version" => Ok(__FieldTag::__node_version),
535                            "controlPlane" => Ok(__FieldTag::__control_plane),
536                            "control_plane" => Ok(__FieldTag::__control_plane),
537                            "systemAddonsConfig" => Ok(__FieldTag::__system_addons_config),
538                            "system_addons_config" => Ok(__FieldTag::__system_addons_config),
539                            "externalLoadBalancerIpv4AddressPools" => {
540                                Ok(__FieldTag::__external_load_balancer_ipv4_address_pools)
541                            }
542                            "external_load_balancer_ipv4_address_pools" => {
543                                Ok(__FieldTag::__external_load_balancer_ipv4_address_pools)
544                            }
545                            "controlPlaneEncryption" => Ok(__FieldTag::__control_plane_encryption),
546                            "control_plane_encryption" => {
547                                Ok(__FieldTag::__control_plane_encryption)
548                            }
549                            "status" => Ok(__FieldTag::__status),
550                            "maintenanceEvents" => Ok(__FieldTag::__maintenance_events),
551                            "maintenance_events" => Ok(__FieldTag::__maintenance_events),
552                            "targetVersion" => Ok(__FieldTag::__target_version),
553                            "target_version" => Ok(__FieldTag::__target_version),
554                            "releaseChannel" => Ok(__FieldTag::__release_channel),
555                            "release_channel" => Ok(__FieldTag::__release_channel),
556                            "survivabilityConfig" => Ok(__FieldTag::__survivability_config),
557                            "survivability_config" => Ok(__FieldTag::__survivability_config),
558                            "externalLoadBalancerIpv6AddressPools" => {
559                                Ok(__FieldTag::__external_load_balancer_ipv6_address_pools)
560                            }
561                            "external_load_balancer_ipv6_address_pools" => {
562                                Ok(__FieldTag::__external_load_balancer_ipv6_address_pools)
563                            }
564                            "connectionState" => Ok(__FieldTag::__connection_state),
565                            "connection_state" => Ok(__FieldTag::__connection_state),
566                            _ => Ok(__FieldTag::Unknown(value.to_string())),
567                        }
568                    }
569                }
570                deserializer.deserialize_identifier(Visitor)
571            }
572        }
573        struct Visitor;
574        impl<'de> serde::de::Visitor<'de> for Visitor {
575            type Value = Cluster;
576            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
577                formatter.write_str("struct Cluster")
578            }
579            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
580            where
581                A: serde::de::MapAccess<'de>,
582            {
583                #[allow(unused_imports)]
584                use serde::de::Error;
585                use std::option::Option::Some;
586                let mut fields = std::collections::HashSet::new();
587                let mut result = Self::Value::new();
588                while let Some(tag) = map.next_key::<__FieldTag>()? {
589                    #[allow(clippy::match_single_binding)]
590                    match tag {
591                        __FieldTag::__name => {
592                            if !fields.insert(__FieldTag::__name) {
593                                return std::result::Result::Err(A::Error::duplicate_field(
594                                    "multiple values for name",
595                                ));
596                            }
597                            result.name = map
598                                .next_value::<std::option::Option<std::string::String>>()?
599                                .unwrap_or_default();
600                        }
601                        __FieldTag::__create_time => {
602                            if !fields.insert(__FieldTag::__create_time) {
603                                return std::result::Result::Err(A::Error::duplicate_field(
604                                    "multiple values for create_time",
605                                ));
606                            }
607                            result.create_time =
608                                map.next_value::<std::option::Option<wkt::Timestamp>>()?;
609                        }
610                        __FieldTag::__update_time => {
611                            if !fields.insert(__FieldTag::__update_time) {
612                                return std::result::Result::Err(A::Error::duplicate_field(
613                                    "multiple values for update_time",
614                                ));
615                            }
616                            result.update_time =
617                                map.next_value::<std::option::Option<wkt::Timestamp>>()?;
618                        }
619                        __FieldTag::__labels => {
620                            if !fields.insert(__FieldTag::__labels) {
621                                return std::result::Result::Err(A::Error::duplicate_field(
622                                    "multiple values for labels",
623                                ));
624                            }
625                            result.labels = map
626                                .next_value::<std::option::Option<
627                                    std::collections::HashMap<
628                                        std::string::String,
629                                        std::string::String,
630                                    >,
631                                >>()?
632                                .unwrap_or_default();
633                        }
634                        __FieldTag::__fleet => {
635                            if !fields.insert(__FieldTag::__fleet) {
636                                return std::result::Result::Err(A::Error::duplicate_field(
637                                    "multiple values for fleet",
638                                ));
639                            }
640                            result.fleet =
641                                map.next_value::<std::option::Option<crate::model::Fleet>>()?;
642                        }
643                        __FieldTag::__networking => {
644                            if !fields.insert(__FieldTag::__networking) {
645                                return std::result::Result::Err(A::Error::duplicate_field(
646                                    "multiple values for networking",
647                                ));
648                            }
649                            result.networking = map
650                                .next_value::<std::option::Option<crate::model::ClusterNetworking>>(
651                                )?;
652                        }
653                        __FieldTag::__authorization => {
654                            if !fields.insert(__FieldTag::__authorization) {
655                                return std::result::Result::Err(A::Error::duplicate_field(
656                                    "multiple values for authorization",
657                                ));
658                            }
659                            result.authorization = map
660                                .next_value::<std::option::Option<crate::model::Authorization>>()?;
661                        }
662                        __FieldTag::__default_max_pods_per_node => {
663                            if !fields.insert(__FieldTag::__default_max_pods_per_node) {
664                                return std::result::Result::Err(A::Error::duplicate_field(
665                                    "multiple values for default_max_pods_per_node",
666                                ));
667                            }
668                            struct __With(std::option::Option<i32>);
669                            impl<'de> serde::de::Deserialize<'de> for __With {
670                                fn deserialize<D>(
671                                    deserializer: D,
672                                ) -> std::result::Result<Self, D::Error>
673                                where
674                                    D: serde::de::Deserializer<'de>,
675                                {
676                                    serde_with::As::< std::option::Option<wkt::internal::I32> >::deserialize(deserializer).map(__With)
677                                }
678                            }
679                            result.default_max_pods_per_node =
680                                map.next_value::<__With>()?.0.unwrap_or_default();
681                        }
682                        __FieldTag::__endpoint => {
683                            if !fields.insert(__FieldTag::__endpoint) {
684                                return std::result::Result::Err(A::Error::duplicate_field(
685                                    "multiple values for endpoint",
686                                ));
687                            }
688                            result.endpoint = map
689                                .next_value::<std::option::Option<std::string::String>>()?
690                                .unwrap_or_default();
691                        }
692                        __FieldTag::__port => {
693                            if !fields.insert(__FieldTag::__port) {
694                                return std::result::Result::Err(A::Error::duplicate_field(
695                                    "multiple values for port",
696                                ));
697                            }
698                            struct __With(std::option::Option<i32>);
699                            impl<'de> serde::de::Deserialize<'de> for __With {
700                                fn deserialize<D>(
701                                    deserializer: D,
702                                ) -> std::result::Result<Self, D::Error>
703                                where
704                                    D: serde::de::Deserializer<'de>,
705                                {
706                                    serde_with::As::< std::option::Option<wkt::internal::I32> >::deserialize(deserializer).map(__With)
707                                }
708                            }
709                            result.port = map.next_value::<__With>()?.0.unwrap_or_default();
710                        }
711                        __FieldTag::__cluster_ca_certificate => {
712                            if !fields.insert(__FieldTag::__cluster_ca_certificate) {
713                                return std::result::Result::Err(A::Error::duplicate_field(
714                                    "multiple values for cluster_ca_certificate",
715                                ));
716                            }
717                            result.cluster_ca_certificate = map
718                                .next_value::<std::option::Option<std::string::String>>()?
719                                .unwrap_or_default();
720                        }
721                        __FieldTag::__maintenance_policy => {
722                            if !fields.insert(__FieldTag::__maintenance_policy) {
723                                return std::result::Result::Err(A::Error::duplicate_field(
724                                    "multiple values for maintenance_policy",
725                                ));
726                            }
727                            result.maintenance_policy = map
728                                .next_value::<std::option::Option<crate::model::MaintenancePolicy>>(
729                                )?;
730                        }
731                        __FieldTag::__control_plane_version => {
732                            if !fields.insert(__FieldTag::__control_plane_version) {
733                                return std::result::Result::Err(A::Error::duplicate_field(
734                                    "multiple values for control_plane_version",
735                                ));
736                            }
737                            result.control_plane_version = map
738                                .next_value::<std::option::Option<std::string::String>>()?
739                                .unwrap_or_default();
740                        }
741                        __FieldTag::__node_version => {
742                            if !fields.insert(__FieldTag::__node_version) {
743                                return std::result::Result::Err(A::Error::duplicate_field(
744                                    "multiple values for node_version",
745                                ));
746                            }
747                            result.node_version = map
748                                .next_value::<std::option::Option<std::string::String>>()?
749                                .unwrap_or_default();
750                        }
751                        __FieldTag::__control_plane => {
752                            if !fields.insert(__FieldTag::__control_plane) {
753                                return std::result::Result::Err(A::Error::duplicate_field(
754                                    "multiple values for control_plane",
755                                ));
756                            }
757                            result.control_plane = map.next_value::<std::option::Option<crate::model::cluster::ControlPlane>>()?
758                                ;
759                        }
760                        __FieldTag::__system_addons_config => {
761                            if !fields.insert(__FieldTag::__system_addons_config) {
762                                return std::result::Result::Err(A::Error::duplicate_field(
763                                    "multiple values for system_addons_config",
764                                ));
765                            }
766                            result.system_addons_config = map.next_value::<std::option::Option<crate::model::cluster::SystemAddonsConfig>>()?
767                                ;
768                        }
769                        __FieldTag::__external_load_balancer_ipv4_address_pools => {
770                            if !fields
771                                .insert(__FieldTag::__external_load_balancer_ipv4_address_pools)
772                            {
773                                return std::result::Result::Err(A::Error::duplicate_field(
774                                    "multiple values for external_load_balancer_ipv4_address_pools",
775                                ));
776                            }
777                            result.external_load_balancer_ipv4_address_pools = map.next_value::<std::option::Option<std::vec::Vec<std::string::String>>>()?.unwrap_or_default();
778                        }
779                        __FieldTag::__control_plane_encryption => {
780                            if !fields.insert(__FieldTag::__control_plane_encryption) {
781                                return std::result::Result::Err(A::Error::duplicate_field(
782                                    "multiple values for control_plane_encryption",
783                                ));
784                            }
785                            result.control_plane_encryption = map
786                                .next_value::<std::option::Option<
787                                    crate::model::cluster::ControlPlaneEncryption,
788                                >>()?;
789                        }
790                        __FieldTag::__status => {
791                            if !fields.insert(__FieldTag::__status) {
792                                return std::result::Result::Err(A::Error::duplicate_field(
793                                    "multiple values for status",
794                                ));
795                            }
796                            result.status = map
797                                .next_value::<std::option::Option<crate::model::cluster::Status>>()?
798                                .unwrap_or_default();
799                        }
800                        __FieldTag::__maintenance_events => {
801                            if !fields.insert(__FieldTag::__maintenance_events) {
802                                return std::result::Result::Err(A::Error::duplicate_field(
803                                    "multiple values for maintenance_events",
804                                ));
805                            }
806                            result.maintenance_events = map
807                                .next_value::<std::option::Option<
808                                    std::vec::Vec<crate::model::cluster::MaintenanceEvent>,
809                                >>()?
810                                .unwrap_or_default();
811                        }
812                        __FieldTag::__target_version => {
813                            if !fields.insert(__FieldTag::__target_version) {
814                                return std::result::Result::Err(A::Error::duplicate_field(
815                                    "multiple values for target_version",
816                                ));
817                            }
818                            result.target_version = map
819                                .next_value::<std::option::Option<std::string::String>>()?
820                                .unwrap_or_default();
821                        }
822                        __FieldTag::__release_channel => {
823                            if !fields.insert(__FieldTag::__release_channel) {
824                                return std::result::Result::Err(A::Error::duplicate_field(
825                                    "multiple values for release_channel",
826                                ));
827                            }
828                            result.release_channel = map.next_value::<std::option::Option<crate::model::cluster::ReleaseChannel>>()?.unwrap_or_default();
829                        }
830                        __FieldTag::__survivability_config => {
831                            if !fields.insert(__FieldTag::__survivability_config) {
832                                return std::result::Result::Err(A::Error::duplicate_field(
833                                    "multiple values for survivability_config",
834                                ));
835                            }
836                            result.survivability_config = map.next_value::<std::option::Option<crate::model::cluster::SurvivabilityConfig>>()?
837                                ;
838                        }
839                        __FieldTag::__external_load_balancer_ipv6_address_pools => {
840                            if !fields
841                                .insert(__FieldTag::__external_load_balancer_ipv6_address_pools)
842                            {
843                                return std::result::Result::Err(A::Error::duplicate_field(
844                                    "multiple values for external_load_balancer_ipv6_address_pools",
845                                ));
846                            }
847                            result.external_load_balancer_ipv6_address_pools = map.next_value::<std::option::Option<std::vec::Vec<std::string::String>>>()?.unwrap_or_default();
848                        }
849                        __FieldTag::__connection_state => {
850                            if !fields.insert(__FieldTag::__connection_state) {
851                                return std::result::Result::Err(A::Error::duplicate_field(
852                                    "multiple values for connection_state",
853                                ));
854                            }
855                            result.connection_state = map.next_value::<std::option::Option<crate::model::cluster::ConnectionState>>()?
856                                ;
857                        }
858                        __FieldTag::Unknown(key) => {
859                            let value = map.next_value::<serde_json::Value>()?;
860                            result._unknown_fields.insert(key, value);
861                        }
862                    }
863                }
864                std::result::Result::Ok(result)
865            }
866        }
867        deserializer.deserialize_any(Visitor)
868    }
869}
870
871#[doc(hidden)]
872impl serde::ser::Serialize for Cluster {
873    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
874    where
875        S: serde::ser::Serializer,
876    {
877        use serde::ser::SerializeMap;
878        #[allow(unused_imports)]
879        use std::option::Option::Some;
880        let mut state = serializer.serialize_map(std::option::Option::None)?;
881        if !self.name.is_empty() {
882            state.serialize_entry("name", &self.name)?;
883        }
884        if self.create_time.is_some() {
885            state.serialize_entry("createTime", &self.create_time)?;
886        }
887        if self.update_time.is_some() {
888            state.serialize_entry("updateTime", &self.update_time)?;
889        }
890        if !self.labels.is_empty() {
891            state.serialize_entry("labels", &self.labels)?;
892        }
893        if self.fleet.is_some() {
894            state.serialize_entry("fleet", &self.fleet)?;
895        }
896        if self.networking.is_some() {
897            state.serialize_entry("networking", &self.networking)?;
898        }
899        if self.authorization.is_some() {
900            state.serialize_entry("authorization", &self.authorization)?;
901        }
902        if !wkt::internal::is_default(&self.default_max_pods_per_node) {
903            struct __With<'a>(&'a i32);
904            impl<'a> serde::ser::Serialize for __With<'a> {
905                fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
906                where
907                    S: serde::ser::Serializer,
908                {
909                    serde_with::As::<wkt::internal::I32>::serialize(self.0, serializer)
910                }
911            }
912            state.serialize_entry(
913                "defaultMaxPodsPerNode",
914                &__With(&self.default_max_pods_per_node),
915            )?;
916        }
917        if !self.endpoint.is_empty() {
918            state.serialize_entry("endpoint", &self.endpoint)?;
919        }
920        if !wkt::internal::is_default(&self.port) {
921            struct __With<'a>(&'a i32);
922            impl<'a> serde::ser::Serialize for __With<'a> {
923                fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
924                where
925                    S: serde::ser::Serializer,
926                {
927                    serde_with::As::<wkt::internal::I32>::serialize(self.0, serializer)
928                }
929            }
930            state.serialize_entry("port", &__With(&self.port))?;
931        }
932        if !self.cluster_ca_certificate.is_empty() {
933            state.serialize_entry("clusterCaCertificate", &self.cluster_ca_certificate)?;
934        }
935        if self.maintenance_policy.is_some() {
936            state.serialize_entry("maintenancePolicy", &self.maintenance_policy)?;
937        }
938        if !self.control_plane_version.is_empty() {
939            state.serialize_entry("controlPlaneVersion", &self.control_plane_version)?;
940        }
941        if !self.node_version.is_empty() {
942            state.serialize_entry("nodeVersion", &self.node_version)?;
943        }
944        if self.control_plane.is_some() {
945            state.serialize_entry("controlPlane", &self.control_plane)?;
946        }
947        if self.system_addons_config.is_some() {
948            state.serialize_entry("systemAddonsConfig", &self.system_addons_config)?;
949        }
950        if !self.external_load_balancer_ipv4_address_pools.is_empty() {
951            state.serialize_entry(
952                "externalLoadBalancerIpv4AddressPools",
953                &self.external_load_balancer_ipv4_address_pools,
954            )?;
955        }
956        if self.control_plane_encryption.is_some() {
957            state.serialize_entry("controlPlaneEncryption", &self.control_plane_encryption)?;
958        }
959        if !wkt::internal::is_default(&self.status) {
960            state.serialize_entry("status", &self.status)?;
961        }
962        if !self.maintenance_events.is_empty() {
963            state.serialize_entry("maintenanceEvents", &self.maintenance_events)?;
964        }
965        if !self.target_version.is_empty() {
966            state.serialize_entry("targetVersion", &self.target_version)?;
967        }
968        if !wkt::internal::is_default(&self.release_channel) {
969            state.serialize_entry("releaseChannel", &self.release_channel)?;
970        }
971        if self.survivability_config.is_some() {
972            state.serialize_entry("survivabilityConfig", &self.survivability_config)?;
973        }
974        if !self.external_load_balancer_ipv6_address_pools.is_empty() {
975            state.serialize_entry(
976                "externalLoadBalancerIpv6AddressPools",
977                &self.external_load_balancer_ipv6_address_pools,
978            )?;
979        }
980        if self.connection_state.is_some() {
981            state.serialize_entry("connectionState", &self.connection_state)?;
982        }
983        if !self._unknown_fields.is_empty() {
984            for (key, value) in self._unknown_fields.iter() {
985                state.serialize_entry(key, &value)?;
986            }
987        }
988        state.end()
989    }
990}
991
992impl std::fmt::Debug for Cluster {
993    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
994        let mut debug_struct = f.debug_struct("Cluster");
995        debug_struct.field("name", &self.name);
996        debug_struct.field("create_time", &self.create_time);
997        debug_struct.field("update_time", &self.update_time);
998        debug_struct.field("labels", &self.labels);
999        debug_struct.field("fleet", &self.fleet);
1000        debug_struct.field("networking", &self.networking);
1001        debug_struct.field("authorization", &self.authorization);
1002        debug_struct.field("default_max_pods_per_node", &self.default_max_pods_per_node);
1003        debug_struct.field("endpoint", &self.endpoint);
1004        debug_struct.field("port", &self.port);
1005        debug_struct.field("cluster_ca_certificate", &self.cluster_ca_certificate);
1006        debug_struct.field("maintenance_policy", &self.maintenance_policy);
1007        debug_struct.field("control_plane_version", &self.control_plane_version);
1008        debug_struct.field("node_version", &self.node_version);
1009        debug_struct.field("control_plane", &self.control_plane);
1010        debug_struct.field("system_addons_config", &self.system_addons_config);
1011        debug_struct.field(
1012            "external_load_balancer_ipv4_address_pools",
1013            &self.external_load_balancer_ipv4_address_pools,
1014        );
1015        debug_struct.field("control_plane_encryption", &self.control_plane_encryption);
1016        debug_struct.field("status", &self.status);
1017        debug_struct.field("maintenance_events", &self.maintenance_events);
1018        debug_struct.field("target_version", &self.target_version);
1019        debug_struct.field("release_channel", &self.release_channel);
1020        debug_struct.field("survivability_config", &self.survivability_config);
1021        debug_struct.field(
1022            "external_load_balancer_ipv6_address_pools",
1023            &self.external_load_balancer_ipv6_address_pools,
1024        );
1025        debug_struct.field("connection_state", &self.connection_state);
1026        if !self._unknown_fields.is_empty() {
1027            debug_struct.field("_unknown_fields", &self._unknown_fields);
1028        }
1029        debug_struct.finish()
1030    }
1031}
1032
1033/// Defines additional types related to [Cluster].
1034pub mod cluster {
1035    #[allow(unused_imports)]
1036    use super::*;
1037
1038    /// Configuration of the cluster control plane.
1039    #[derive(Clone, Default, PartialEq)]
1040    #[non_exhaustive]
1041    pub struct ControlPlane {
1042        pub config: std::option::Option<crate::model::cluster::control_plane::Config>,
1043
1044        _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
1045    }
1046
1047    impl ControlPlane {
1048        pub fn new() -> Self {
1049            std::default::Default::default()
1050        }
1051
1052        /// Sets the value of [config][crate::model::cluster::ControlPlane::config].
1053        ///
1054        /// Note that all the setters affecting `config` are mutually
1055        /// exclusive.
1056        pub fn set_config<
1057            T: std::convert::Into<std::option::Option<crate::model::cluster::control_plane::Config>>,
1058        >(
1059            mut self,
1060            v: T,
1061        ) -> Self {
1062            self.config = v.into();
1063            self
1064        }
1065
1066        /// The value of [config][crate::model::cluster::ControlPlane::config]
1067        /// if it holds a `Remote`, `None` if the field is not set or
1068        /// holds a different branch.
1069        pub fn remote(
1070            &self,
1071        ) -> std::option::Option<&std::boxed::Box<crate::model::cluster::control_plane::Remote>>
1072        {
1073            #[allow(unreachable_patterns)]
1074            self.config.as_ref().and_then(|v| match v {
1075                crate::model::cluster::control_plane::Config::Remote(v) => {
1076                    std::option::Option::Some(v)
1077                }
1078                _ => std::option::Option::None,
1079            })
1080        }
1081
1082        /// Sets the value of [config][crate::model::cluster::ControlPlane::config]
1083        /// to hold a `Remote`.
1084        ///
1085        /// Note that all the setters affecting `config` are
1086        /// mutually exclusive.
1087        pub fn set_remote<
1088            T: std::convert::Into<std::boxed::Box<crate::model::cluster::control_plane::Remote>>,
1089        >(
1090            mut self,
1091            v: T,
1092        ) -> Self {
1093            self.config = std::option::Option::Some(
1094                crate::model::cluster::control_plane::Config::Remote(v.into()),
1095            );
1096            self
1097        }
1098
1099        /// The value of [config][crate::model::cluster::ControlPlane::config]
1100        /// if it holds a `Local`, `None` if the field is not set or
1101        /// holds a different branch.
1102        pub fn local(
1103            &self,
1104        ) -> std::option::Option<&std::boxed::Box<crate::model::cluster::control_plane::Local>>
1105        {
1106            #[allow(unreachable_patterns)]
1107            self.config.as_ref().and_then(|v| match v {
1108                crate::model::cluster::control_plane::Config::Local(v) => {
1109                    std::option::Option::Some(v)
1110                }
1111                _ => std::option::Option::None,
1112            })
1113        }
1114
1115        /// Sets the value of [config][crate::model::cluster::ControlPlane::config]
1116        /// to hold a `Local`.
1117        ///
1118        /// Note that all the setters affecting `config` are
1119        /// mutually exclusive.
1120        pub fn set_local<
1121            T: std::convert::Into<std::boxed::Box<crate::model::cluster::control_plane::Local>>,
1122        >(
1123            mut self,
1124            v: T,
1125        ) -> Self {
1126            self.config = std::option::Option::Some(
1127                crate::model::cluster::control_plane::Config::Local(v.into()),
1128            );
1129            self
1130        }
1131    }
1132
1133    impl wkt::message::Message for ControlPlane {
1134        fn typename() -> &'static str {
1135            "type.googleapis.com/google.cloud.edgecontainer.v1.Cluster.ControlPlane"
1136        }
1137    }
1138
1139    #[doc(hidden)]
1140    impl<'de> serde::de::Deserialize<'de> for ControlPlane {
1141        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1142        where
1143            D: serde::Deserializer<'de>,
1144        {
1145            #[allow(non_camel_case_types)]
1146            #[doc(hidden)]
1147            #[derive(PartialEq, Eq, Hash)]
1148            enum __FieldTag {
1149                __remote,
1150                __local,
1151                Unknown(std::string::String),
1152            }
1153            impl<'de> serde::de::Deserialize<'de> for __FieldTag {
1154                fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1155                where
1156                    D: serde::Deserializer<'de>,
1157                {
1158                    struct Visitor;
1159                    impl<'de> serde::de::Visitor<'de> for Visitor {
1160                        type Value = __FieldTag;
1161                        fn expecting(
1162                            &self,
1163                            formatter: &mut std::fmt::Formatter,
1164                        ) -> std::fmt::Result {
1165                            formatter.write_str("a field name for ControlPlane")
1166                        }
1167                        fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
1168                        where
1169                            E: serde::de::Error,
1170                        {
1171                            use std::result::Result::Ok;
1172                            use std::string::ToString;
1173                            match value {
1174                                "remote" => Ok(__FieldTag::__remote),
1175                                "local" => Ok(__FieldTag::__local),
1176                                _ => Ok(__FieldTag::Unknown(value.to_string())),
1177                            }
1178                        }
1179                    }
1180                    deserializer.deserialize_identifier(Visitor)
1181                }
1182            }
1183            struct Visitor;
1184            impl<'de> serde::de::Visitor<'de> for Visitor {
1185                type Value = ControlPlane;
1186                fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
1187                    formatter.write_str("struct ControlPlane")
1188                }
1189                fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
1190                where
1191                    A: serde::de::MapAccess<'de>,
1192                {
1193                    #[allow(unused_imports)]
1194                    use serde::de::Error;
1195                    use std::option::Option::Some;
1196                    let mut fields = std::collections::HashSet::new();
1197                    let mut result = Self::Value::new();
1198                    while let Some(tag) = map.next_key::<__FieldTag>()? {
1199                        #[allow(clippy::match_single_binding)]
1200                        match tag {
1201                            __FieldTag::__remote => {
1202                                if !fields.insert(__FieldTag::__remote) {
1203                                    return std::result::Result::Err(A::Error::duplicate_field(
1204                                        "multiple values for remote",
1205                                    ));
1206                                }
1207                                if result.config.is_some() {
1208                                    return std::result::Result::Err(A::Error::duplicate_field(
1209                                        "multiple values for `config`, a oneof with full ID .google.cloud.edgecontainer.v1.Cluster.ControlPlane.remote, latest field was remote",
1210                                    ));
1211                                }
1212                                result.config = std::option::Option::Some(
1213                                    crate::model::cluster::control_plane::Config::Remote(
1214                                        map.next_value::<std::option::Option<
1215                                            std::boxed::Box<
1216                                                crate::model::cluster::control_plane::Remote,
1217                                            >,
1218                                        >>()?
1219                                        .unwrap_or_default(),
1220                                    ),
1221                                );
1222                            }
1223                            __FieldTag::__local => {
1224                                if !fields.insert(__FieldTag::__local) {
1225                                    return std::result::Result::Err(A::Error::duplicate_field(
1226                                        "multiple values for local",
1227                                    ));
1228                                }
1229                                if result.config.is_some() {
1230                                    return std::result::Result::Err(A::Error::duplicate_field(
1231                                        "multiple values for `config`, a oneof with full ID .google.cloud.edgecontainer.v1.Cluster.ControlPlane.local, latest field was local",
1232                                    ));
1233                                }
1234                                result.config = std::option::Option::Some(
1235                                    crate::model::cluster::control_plane::Config::Local(
1236                                        map.next_value::<std::option::Option<
1237                                            std::boxed::Box<
1238                                                crate::model::cluster::control_plane::Local,
1239                                            >,
1240                                        >>()?
1241                                        .unwrap_or_default(),
1242                                    ),
1243                                );
1244                            }
1245                            __FieldTag::Unknown(key) => {
1246                                let value = map.next_value::<serde_json::Value>()?;
1247                                result._unknown_fields.insert(key, value);
1248                            }
1249                        }
1250                    }
1251                    std::result::Result::Ok(result)
1252                }
1253            }
1254            deserializer.deserialize_any(Visitor)
1255        }
1256    }
1257
1258    #[doc(hidden)]
1259    impl serde::ser::Serialize for ControlPlane {
1260        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1261        where
1262            S: serde::ser::Serializer,
1263        {
1264            use serde::ser::SerializeMap;
1265            #[allow(unused_imports)]
1266            use std::option::Option::Some;
1267            let mut state = serializer.serialize_map(std::option::Option::None)?;
1268            if let Some(value) = self.remote() {
1269                state.serialize_entry("remote", value)?;
1270            }
1271            if let Some(value) = self.local() {
1272                state.serialize_entry("local", value)?;
1273            }
1274            if !self._unknown_fields.is_empty() {
1275                for (key, value) in self._unknown_fields.iter() {
1276                    state.serialize_entry(key, &value)?;
1277                }
1278            }
1279            state.end()
1280        }
1281    }
1282
1283    impl std::fmt::Debug for ControlPlane {
1284        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1285            let mut debug_struct = f.debug_struct("ControlPlane");
1286            debug_struct.field("config", &self.config);
1287            if !self._unknown_fields.is_empty() {
1288                debug_struct.field("_unknown_fields", &self._unknown_fields);
1289            }
1290            debug_struct.finish()
1291        }
1292    }
1293
1294    /// Defines additional types related to [ControlPlane].
1295    pub mod control_plane {
1296        #[allow(unused_imports)]
1297        use super::*;
1298
1299        /// Configuration specific to clusters with a control plane hosted remotely.
1300        #[derive(Clone, Default, PartialEq)]
1301        #[non_exhaustive]
1302        pub struct Remote {
1303            _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
1304        }
1305
1306        impl Remote {
1307            pub fn new() -> Self {
1308                std::default::Default::default()
1309            }
1310        }
1311
1312        impl wkt::message::Message for Remote {
1313            fn typename() -> &'static str {
1314                "type.googleapis.com/google.cloud.edgecontainer.v1.Cluster.ControlPlane.Remote"
1315            }
1316        }
1317
1318        #[doc(hidden)]
1319        impl<'de> serde::de::Deserialize<'de> for Remote {
1320            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1321            where
1322                D: serde::Deserializer<'de>,
1323            {
1324                #[allow(non_camel_case_types)]
1325                #[doc(hidden)]
1326                #[derive(PartialEq, Eq, Hash)]
1327                enum __FieldTag {
1328                    Unknown(std::string::String),
1329                }
1330                impl<'de> serde::de::Deserialize<'de> for __FieldTag {
1331                    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1332                    where
1333                        D: serde::Deserializer<'de>,
1334                    {
1335                        struct Visitor;
1336                        impl<'de> serde::de::Visitor<'de> for Visitor {
1337                            type Value = __FieldTag;
1338                            fn expecting(
1339                                &self,
1340                                formatter: &mut std::fmt::Formatter,
1341                            ) -> std::fmt::Result {
1342                                formatter.write_str("a field name for Remote")
1343                            }
1344                            fn visit_str<E>(
1345                                self,
1346                                value: &str,
1347                            ) -> std::result::Result<Self::Value, E>
1348                            where
1349                                E: serde::de::Error,
1350                            {
1351                                use std::result::Result::Ok;
1352                                use std::string::ToString;
1353                                Ok(__FieldTag::Unknown(value.to_string()))
1354                            }
1355                        }
1356                        deserializer.deserialize_identifier(Visitor)
1357                    }
1358                }
1359                struct Visitor;
1360                impl<'de> serde::de::Visitor<'de> for Visitor {
1361                    type Value = Remote;
1362                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
1363                        formatter.write_str("struct Remote")
1364                    }
1365                    fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
1366                    where
1367                        A: serde::de::MapAccess<'de>,
1368                    {
1369                        #[allow(unused_imports)]
1370                        use serde::de::Error;
1371                        use std::option::Option::Some;
1372                        let mut result = Self::Value::new();
1373                        while let Some(tag) = map.next_key::<__FieldTag>()? {
1374                            #[allow(clippy::match_single_binding)]
1375                            match tag {
1376                                __FieldTag::Unknown(key) => {
1377                                    let value = map.next_value::<serde_json::Value>()?;
1378                                    result._unknown_fields.insert(key, value);
1379                                }
1380                            }
1381                        }
1382                        std::result::Result::Ok(result)
1383                    }
1384                }
1385                deserializer.deserialize_any(Visitor)
1386            }
1387        }
1388
1389        #[doc(hidden)]
1390        impl serde::ser::Serialize for Remote {
1391            fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1392            where
1393                S: serde::ser::Serializer,
1394            {
1395                use serde::ser::SerializeMap;
1396                #[allow(unused_imports)]
1397                use std::option::Option::Some;
1398                let mut state = serializer.serialize_map(std::option::Option::None)?;
1399                if !self._unknown_fields.is_empty() {
1400                    for (key, value) in self._unknown_fields.iter() {
1401                        state.serialize_entry(key, &value)?;
1402                    }
1403                }
1404                state.end()
1405            }
1406        }
1407
1408        impl std::fmt::Debug for Remote {
1409            fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1410                let mut debug_struct = f.debug_struct("Remote");
1411                if !self._unknown_fields.is_empty() {
1412                    debug_struct.field("_unknown_fields", &self._unknown_fields);
1413                }
1414                debug_struct.finish()
1415            }
1416        }
1417
1418        /// Configuration specific to clusters with a control plane hosted locally.
1419        ///
1420        /// Warning: Local control plane clusters must be created in their own
1421        /// project. Local control plane clusters cannot coexist in the same
1422        /// project with any other type of clusters, including non-GDCE clusters.
1423        /// Mixing local control plane GDCE clusters with any other type of
1424        /// clusters in the same project can result in data loss.
1425        #[derive(Clone, Default, PartialEq)]
1426        #[non_exhaustive]
1427        pub struct Local {
1428            /// Name of the Google Distributed Cloud Edge zones where this node pool
1429            /// will be created. For example: `us-central1-edge-customer-a`.
1430            pub node_location: std::string::String,
1431
1432            /// The number of nodes to serve as replicas of the Control Plane.
1433            pub node_count: i32,
1434
1435            /// Only machines matching this filter will be allowed to host control
1436            /// plane nodes. The filtering language accepts strings like "name=\<name\>",
1437            /// and is documented here: [AIP-160](https://google.aip.dev/160).
1438            pub machine_filter: std::string::String,
1439
1440            /// Policy configuration about how user applications are deployed.
1441            pub shared_deployment_policy:
1442                crate::model::cluster::control_plane::SharedDeploymentPolicy,
1443
1444            /// Optional. Name for the storage schema of control plane nodes.
1445            ///
1446            /// Warning: Configurable node local storage schema feature is an
1447            /// experimental feature, and is not recommended for general use
1448            /// in production clusters/nodepools.
1449            pub control_plane_node_storage_schema: std::string::String,
1450
1451            _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
1452        }
1453
1454        impl Local {
1455            pub fn new() -> Self {
1456                std::default::Default::default()
1457            }
1458
1459            /// Sets the value of [node_location][crate::model::cluster::control_plane::Local::node_location].
1460            pub fn set_node_location<T: std::convert::Into<std::string::String>>(
1461                mut self,
1462                v: T,
1463            ) -> Self {
1464                self.node_location = v.into();
1465                self
1466            }
1467
1468            /// Sets the value of [node_count][crate::model::cluster::control_plane::Local::node_count].
1469            pub fn set_node_count<T: std::convert::Into<i32>>(mut self, v: T) -> Self {
1470                self.node_count = v.into();
1471                self
1472            }
1473
1474            /// Sets the value of [machine_filter][crate::model::cluster::control_plane::Local::machine_filter].
1475            pub fn set_machine_filter<T: std::convert::Into<std::string::String>>(
1476                mut self,
1477                v: T,
1478            ) -> Self {
1479                self.machine_filter = v.into();
1480                self
1481            }
1482
1483            /// Sets the value of [shared_deployment_policy][crate::model::cluster::control_plane::Local::shared_deployment_policy].
1484            pub fn set_shared_deployment_policy<
1485                T: std::convert::Into<crate::model::cluster::control_plane::SharedDeploymentPolicy>,
1486            >(
1487                mut self,
1488                v: T,
1489            ) -> Self {
1490                self.shared_deployment_policy = v.into();
1491                self
1492            }
1493
1494            /// Sets the value of [control_plane_node_storage_schema][crate::model::cluster::control_plane::Local::control_plane_node_storage_schema].
1495            pub fn set_control_plane_node_storage_schema<
1496                T: std::convert::Into<std::string::String>,
1497            >(
1498                mut self,
1499                v: T,
1500            ) -> Self {
1501                self.control_plane_node_storage_schema = v.into();
1502                self
1503            }
1504        }
1505
1506        impl wkt::message::Message for Local {
1507            fn typename() -> &'static str {
1508                "type.googleapis.com/google.cloud.edgecontainer.v1.Cluster.ControlPlane.Local"
1509            }
1510        }
1511
1512        #[doc(hidden)]
1513        impl<'de> serde::de::Deserialize<'de> for Local {
1514            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1515            where
1516                D: serde::Deserializer<'de>,
1517            {
1518                #[allow(non_camel_case_types)]
1519                #[doc(hidden)]
1520                #[derive(PartialEq, Eq, Hash)]
1521                enum __FieldTag {
1522                    __node_location,
1523                    __node_count,
1524                    __machine_filter,
1525                    __shared_deployment_policy,
1526                    __control_plane_node_storage_schema,
1527                    Unknown(std::string::String),
1528                }
1529                impl<'de> serde::de::Deserialize<'de> for __FieldTag {
1530                    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1531                    where
1532                        D: serde::Deserializer<'de>,
1533                    {
1534                        struct Visitor;
1535                        impl<'de> serde::de::Visitor<'de> for Visitor {
1536                            type Value = __FieldTag;
1537                            fn expecting(
1538                                &self,
1539                                formatter: &mut std::fmt::Formatter,
1540                            ) -> std::fmt::Result {
1541                                formatter.write_str("a field name for Local")
1542                            }
1543                            fn visit_str<E>(
1544                                self,
1545                                value: &str,
1546                            ) -> std::result::Result<Self::Value, E>
1547                            where
1548                                E: serde::de::Error,
1549                            {
1550                                use std::result::Result::Ok;
1551                                use std::string::ToString;
1552                                match value {
1553                                    "nodeLocation" => Ok(__FieldTag::__node_location),
1554                                    "node_location" => Ok(__FieldTag::__node_location),
1555                                    "nodeCount" => Ok(__FieldTag::__node_count),
1556                                    "node_count" => Ok(__FieldTag::__node_count),
1557                                    "machineFilter" => Ok(__FieldTag::__machine_filter),
1558                                    "machine_filter" => Ok(__FieldTag::__machine_filter),
1559                                    "sharedDeploymentPolicy" => {
1560                                        Ok(__FieldTag::__shared_deployment_policy)
1561                                    }
1562                                    "shared_deployment_policy" => {
1563                                        Ok(__FieldTag::__shared_deployment_policy)
1564                                    }
1565                                    "controlPlaneNodeStorageSchema" => {
1566                                        Ok(__FieldTag::__control_plane_node_storage_schema)
1567                                    }
1568                                    "control_plane_node_storage_schema" => {
1569                                        Ok(__FieldTag::__control_plane_node_storage_schema)
1570                                    }
1571                                    _ => Ok(__FieldTag::Unknown(value.to_string())),
1572                                }
1573                            }
1574                        }
1575                        deserializer.deserialize_identifier(Visitor)
1576                    }
1577                }
1578                struct Visitor;
1579                impl<'de> serde::de::Visitor<'de> for Visitor {
1580                    type Value = Local;
1581                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
1582                        formatter.write_str("struct Local")
1583                    }
1584                    fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
1585                    where
1586                        A: serde::de::MapAccess<'de>,
1587                    {
1588                        #[allow(unused_imports)]
1589                        use serde::de::Error;
1590                        use std::option::Option::Some;
1591                        let mut fields = std::collections::HashSet::new();
1592                        let mut result = Self::Value::new();
1593                        while let Some(tag) = map.next_key::<__FieldTag>()? {
1594                            #[allow(clippy::match_single_binding)]
1595                            match tag {
1596                                __FieldTag::__node_location => {
1597                                    if !fields.insert(__FieldTag::__node_location) {
1598                                        return std::result::Result::Err(
1599                                            A::Error::duplicate_field(
1600                                                "multiple values for node_location",
1601                                            ),
1602                                        );
1603                                    }
1604                                    result.node_location = map
1605                                        .next_value::<std::option::Option<std::string::String>>()?
1606                                        .unwrap_or_default();
1607                                }
1608                                __FieldTag::__node_count => {
1609                                    if !fields.insert(__FieldTag::__node_count) {
1610                                        return std::result::Result::Err(
1611                                            A::Error::duplicate_field(
1612                                                "multiple values for node_count",
1613                                            ),
1614                                        );
1615                                    }
1616                                    struct __With(std::option::Option<i32>);
1617                                    impl<'de> serde::de::Deserialize<'de> for __With {
1618                                        fn deserialize<D>(
1619                                            deserializer: D,
1620                                        ) -> std::result::Result<Self, D::Error>
1621                                        where
1622                                            D: serde::de::Deserializer<'de>,
1623                                        {
1624                                            serde_with::As::< std::option::Option<wkt::internal::I32> >::deserialize(deserializer).map(__With)
1625                                        }
1626                                    }
1627                                    result.node_count =
1628                                        map.next_value::<__With>()?.0.unwrap_or_default();
1629                                }
1630                                __FieldTag::__machine_filter => {
1631                                    if !fields.insert(__FieldTag::__machine_filter) {
1632                                        return std::result::Result::Err(
1633                                            A::Error::duplicate_field(
1634                                                "multiple values for machine_filter",
1635                                            ),
1636                                        );
1637                                    }
1638                                    result.machine_filter = map
1639                                        .next_value::<std::option::Option<std::string::String>>()?
1640                                        .unwrap_or_default();
1641                                }
1642                                __FieldTag::__shared_deployment_policy => {
1643                                    if !fields.insert(__FieldTag::__shared_deployment_policy) {
1644                                        return std::result::Result::Err(
1645                                            A::Error::duplicate_field(
1646                                                "multiple values for shared_deployment_policy",
1647                                            ),
1648                                        );
1649                                    }
1650                                    result.shared_deployment_policy = map.next_value::<std::option::Option<crate::model::cluster::control_plane::SharedDeploymentPolicy>>()?.unwrap_or_default();
1651                                }
1652                                __FieldTag::__control_plane_node_storage_schema => {
1653                                    if !fields
1654                                        .insert(__FieldTag::__control_plane_node_storage_schema)
1655                                    {
1656                                        return std::result::Result::Err(
1657                                            A::Error::duplicate_field(
1658                                                "multiple values for control_plane_node_storage_schema",
1659                                            ),
1660                                        );
1661                                    }
1662                                    result.control_plane_node_storage_schema = map
1663                                        .next_value::<std::option::Option<std::string::String>>()?
1664                                        .unwrap_or_default();
1665                                }
1666                                __FieldTag::Unknown(key) => {
1667                                    let value = map.next_value::<serde_json::Value>()?;
1668                                    result._unknown_fields.insert(key, value);
1669                                }
1670                            }
1671                        }
1672                        std::result::Result::Ok(result)
1673                    }
1674                }
1675                deserializer.deserialize_any(Visitor)
1676            }
1677        }
1678
1679        #[doc(hidden)]
1680        impl serde::ser::Serialize for Local {
1681            fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1682            where
1683                S: serde::ser::Serializer,
1684            {
1685                use serde::ser::SerializeMap;
1686                #[allow(unused_imports)]
1687                use std::option::Option::Some;
1688                let mut state = serializer.serialize_map(std::option::Option::None)?;
1689                if !self.node_location.is_empty() {
1690                    state.serialize_entry("nodeLocation", &self.node_location)?;
1691                }
1692                if !wkt::internal::is_default(&self.node_count) {
1693                    struct __With<'a>(&'a i32);
1694                    impl<'a> serde::ser::Serialize for __With<'a> {
1695                        fn serialize<S>(
1696                            &self,
1697                            serializer: S,
1698                        ) -> std::result::Result<S::Ok, S::Error>
1699                        where
1700                            S: serde::ser::Serializer,
1701                        {
1702                            serde_with::As::<wkt::internal::I32>::serialize(self.0, serializer)
1703                        }
1704                    }
1705                    state.serialize_entry("nodeCount", &__With(&self.node_count))?;
1706                }
1707                if !self.machine_filter.is_empty() {
1708                    state.serialize_entry("machineFilter", &self.machine_filter)?;
1709                }
1710                if !wkt::internal::is_default(&self.shared_deployment_policy) {
1711                    state.serialize_entry(
1712                        "sharedDeploymentPolicy",
1713                        &self.shared_deployment_policy,
1714                    )?;
1715                }
1716                if !self.control_plane_node_storage_schema.is_empty() {
1717                    state.serialize_entry(
1718                        "controlPlaneNodeStorageSchema",
1719                        &self.control_plane_node_storage_schema,
1720                    )?;
1721                }
1722                if !self._unknown_fields.is_empty() {
1723                    for (key, value) in self._unknown_fields.iter() {
1724                        state.serialize_entry(key, &value)?;
1725                    }
1726                }
1727                state.end()
1728            }
1729        }
1730
1731        impl std::fmt::Debug for Local {
1732            fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1733                let mut debug_struct = f.debug_struct("Local");
1734                debug_struct.field("node_location", &self.node_location);
1735                debug_struct.field("node_count", &self.node_count);
1736                debug_struct.field("machine_filter", &self.machine_filter);
1737                debug_struct.field("shared_deployment_policy", &self.shared_deployment_policy);
1738                debug_struct.field(
1739                    "control_plane_node_storage_schema",
1740                    &self.control_plane_node_storage_schema,
1741                );
1742                if !self._unknown_fields.is_empty() {
1743                    debug_struct.field("_unknown_fields", &self._unknown_fields);
1744                }
1745                debug_struct.finish()
1746            }
1747        }
1748
1749        /// Represents the policy configuration about how user applications are
1750        /// deployed.
1751        ///
1752        /// # Working with unknown values
1753        ///
1754        /// This enum is defined as `#[non_exhaustive]` because Google Cloud may add
1755        /// additional enum variants at any time. Adding new variants is not considered
1756        /// a breaking change. Applications should write their code in anticipation of:
1757        ///
1758        /// - New values appearing in future releases of the client library, **and**
1759        /// - New values received dynamically, without application changes.
1760        ///
1761        /// Please consult the [Working with enums] section in the user guide for some
1762        /// guidelines.
1763        ///
1764        /// [Working with enums]: https://google-cloud-rust.github.io/working_with_enums.html
1765        #[derive(Clone, Debug, PartialEq)]
1766        #[non_exhaustive]
1767        pub enum SharedDeploymentPolicy {
1768            /// Unspecified.
1769            Unspecified,
1770            /// User applications can be deployed both on control plane and worker
1771            /// nodes.
1772            Allowed,
1773            /// User applications can not be deployed on control plane nodes and can
1774            /// only be deployed on worker nodes.
1775            Disallowed,
1776            /// If set, the enum was initialized with an unknown value.
1777            ///
1778            /// Applications can examine the value using [SharedDeploymentPolicy::value] or
1779            /// [SharedDeploymentPolicy::name].
1780            UnknownValue(shared_deployment_policy::UnknownValue),
1781        }
1782
1783        #[doc(hidden)]
1784        pub mod shared_deployment_policy {
1785            #[allow(unused_imports)]
1786            use super::*;
1787            #[derive(Clone, Debug, PartialEq)]
1788            pub struct UnknownValue(pub(crate) wkt::internal::UnknownEnumValue);
1789        }
1790
1791        impl SharedDeploymentPolicy {
1792            /// Gets the enum value.
1793            ///
1794            /// Returns `None` if the enum contains an unknown value deserialized from
1795            /// the string representation of enums.
1796            pub fn value(&self) -> std::option::Option<i32> {
1797                match self {
1798                    Self::Unspecified => std::option::Option::Some(0),
1799                    Self::Allowed => std::option::Option::Some(1),
1800                    Self::Disallowed => std::option::Option::Some(2),
1801                    Self::UnknownValue(u) => u.0.value(),
1802                }
1803            }
1804
1805            /// Gets the enum value as a string.
1806            ///
1807            /// Returns `None` if the enum contains an unknown value deserialized from
1808            /// the integer representation of enums.
1809            pub fn name(&self) -> std::option::Option<&str> {
1810                match self {
1811                    Self::Unspecified => {
1812                        std::option::Option::Some("SHARED_DEPLOYMENT_POLICY_UNSPECIFIED")
1813                    }
1814                    Self::Allowed => std::option::Option::Some("ALLOWED"),
1815                    Self::Disallowed => std::option::Option::Some("DISALLOWED"),
1816                    Self::UnknownValue(u) => u.0.name(),
1817                }
1818            }
1819        }
1820
1821        impl std::default::Default for SharedDeploymentPolicy {
1822            fn default() -> Self {
1823                use std::convert::From;
1824                Self::from(0)
1825            }
1826        }
1827
1828        impl std::fmt::Display for SharedDeploymentPolicy {
1829            fn fmt(
1830                &self,
1831                f: &mut std::fmt::Formatter<'_>,
1832            ) -> std::result::Result<(), std::fmt::Error> {
1833                wkt::internal::display_enum(f, self.name(), self.value())
1834            }
1835        }
1836
1837        impl std::convert::From<i32> for SharedDeploymentPolicy {
1838            fn from(value: i32) -> Self {
1839                match value {
1840                    0 => Self::Unspecified,
1841                    1 => Self::Allowed,
1842                    2 => Self::Disallowed,
1843                    _ => Self::UnknownValue(shared_deployment_policy::UnknownValue(
1844                        wkt::internal::UnknownEnumValue::Integer(value),
1845                    )),
1846                }
1847            }
1848        }
1849
1850        impl std::convert::From<&str> for SharedDeploymentPolicy {
1851            fn from(value: &str) -> Self {
1852                use std::string::ToString;
1853                match value {
1854                    "SHARED_DEPLOYMENT_POLICY_UNSPECIFIED" => Self::Unspecified,
1855                    "ALLOWED" => Self::Allowed,
1856                    "DISALLOWED" => Self::Disallowed,
1857                    _ => Self::UnknownValue(shared_deployment_policy::UnknownValue(
1858                        wkt::internal::UnknownEnumValue::String(value.to_string()),
1859                    )),
1860                }
1861            }
1862        }
1863
1864        impl serde::ser::Serialize for SharedDeploymentPolicy {
1865            fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1866            where
1867                S: serde::Serializer,
1868            {
1869                match self {
1870                    Self::Unspecified => serializer.serialize_i32(0),
1871                    Self::Allowed => serializer.serialize_i32(1),
1872                    Self::Disallowed => serializer.serialize_i32(2),
1873                    Self::UnknownValue(u) => u.0.serialize(serializer),
1874                }
1875            }
1876        }
1877
1878        impl<'de> serde::de::Deserialize<'de> for SharedDeploymentPolicy {
1879            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1880            where
1881                D: serde::Deserializer<'de>,
1882            {
1883                deserializer.deserialize_any(wkt::internal::EnumVisitor::<SharedDeploymentPolicy>::new(
1884                    ".google.cloud.edgecontainer.v1.Cluster.ControlPlane.SharedDeploymentPolicy"))
1885            }
1886        }
1887
1888        #[derive(Clone, Debug, PartialEq)]
1889        #[non_exhaustive]
1890        pub enum Config {
1891            /// Remote control plane configuration.
1892            Remote(std::boxed::Box<crate::model::cluster::control_plane::Remote>),
1893            /// Local control plane configuration.
1894            ///
1895            /// Warning: Local control plane clusters must be created in their own
1896            /// project. Local control plane clusters cannot coexist in the same
1897            /// project with any other type of clusters, including non-GDCE clusters.
1898            /// Mixing local control plane GDCE clusters with any other type of
1899            /// clusters in the same project can result in data loss.
1900            Local(std::boxed::Box<crate::model::cluster::control_plane::Local>),
1901        }
1902    }
1903
1904    /// Config that customers are allowed to define for GDCE system add-ons.
1905    #[derive(Clone, Default, PartialEq)]
1906    #[non_exhaustive]
1907    pub struct SystemAddonsConfig {
1908        /// Optional. Config for Ingress.
1909        pub ingress: std::option::Option<crate::model::cluster::system_addons_config::Ingress>,
1910
1911        /// Optional. Config for VM Service.
1912        pub vm_service_config:
1913            std::option::Option<crate::model::cluster::system_addons_config::VMServiceConfig>,
1914
1915        _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
1916    }
1917
1918    impl SystemAddonsConfig {
1919        pub fn new() -> Self {
1920            std::default::Default::default()
1921        }
1922
1923        /// Sets the value of [ingress][crate::model::cluster::SystemAddonsConfig::ingress].
1924        pub fn set_ingress<T>(mut self, v: T) -> Self
1925        where
1926            T: std::convert::Into<crate::model::cluster::system_addons_config::Ingress>,
1927        {
1928            self.ingress = std::option::Option::Some(v.into());
1929            self
1930        }
1931
1932        /// Sets or clears the value of [ingress][crate::model::cluster::SystemAddonsConfig::ingress].
1933        pub fn set_or_clear_ingress<T>(mut self, v: std::option::Option<T>) -> Self
1934        where
1935            T: std::convert::Into<crate::model::cluster::system_addons_config::Ingress>,
1936        {
1937            self.ingress = v.map(|x| x.into());
1938            self
1939        }
1940
1941        /// Sets the value of [vm_service_config][crate::model::cluster::SystemAddonsConfig::vm_service_config].
1942        pub fn set_vm_service_config<T>(mut self, v: T) -> Self
1943        where
1944            T: std::convert::Into<crate::model::cluster::system_addons_config::VMServiceConfig>,
1945        {
1946            self.vm_service_config = std::option::Option::Some(v.into());
1947            self
1948        }
1949
1950        /// Sets or clears the value of [vm_service_config][crate::model::cluster::SystemAddonsConfig::vm_service_config].
1951        pub fn set_or_clear_vm_service_config<T>(mut self, v: std::option::Option<T>) -> Self
1952        where
1953            T: std::convert::Into<crate::model::cluster::system_addons_config::VMServiceConfig>,
1954        {
1955            self.vm_service_config = v.map(|x| x.into());
1956            self
1957        }
1958    }
1959
1960    impl wkt::message::Message for SystemAddonsConfig {
1961        fn typename() -> &'static str {
1962            "type.googleapis.com/google.cloud.edgecontainer.v1.Cluster.SystemAddonsConfig"
1963        }
1964    }
1965
1966    #[doc(hidden)]
1967    impl<'de> serde::de::Deserialize<'de> for SystemAddonsConfig {
1968        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1969        where
1970            D: serde::Deserializer<'de>,
1971        {
1972            #[allow(non_camel_case_types)]
1973            #[doc(hidden)]
1974            #[derive(PartialEq, Eq, Hash)]
1975            enum __FieldTag {
1976                __ingress,
1977                __vm_service_config,
1978                Unknown(std::string::String),
1979            }
1980            impl<'de> serde::de::Deserialize<'de> for __FieldTag {
1981                fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1982                where
1983                    D: serde::Deserializer<'de>,
1984                {
1985                    struct Visitor;
1986                    impl<'de> serde::de::Visitor<'de> for Visitor {
1987                        type Value = __FieldTag;
1988                        fn expecting(
1989                            &self,
1990                            formatter: &mut std::fmt::Formatter,
1991                        ) -> std::fmt::Result {
1992                            formatter.write_str("a field name for SystemAddonsConfig")
1993                        }
1994                        fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
1995                        where
1996                            E: serde::de::Error,
1997                        {
1998                            use std::result::Result::Ok;
1999                            use std::string::ToString;
2000                            match value {
2001                                "ingress" => Ok(__FieldTag::__ingress),
2002                                "vmServiceConfig" => Ok(__FieldTag::__vm_service_config),
2003                                "vm_service_config" => Ok(__FieldTag::__vm_service_config),
2004                                _ => Ok(__FieldTag::Unknown(value.to_string())),
2005                            }
2006                        }
2007                    }
2008                    deserializer.deserialize_identifier(Visitor)
2009                }
2010            }
2011            struct Visitor;
2012            impl<'de> serde::de::Visitor<'de> for Visitor {
2013                type Value = SystemAddonsConfig;
2014                fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
2015                    formatter.write_str("struct SystemAddonsConfig")
2016                }
2017                fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
2018                where
2019                    A: serde::de::MapAccess<'de>,
2020                {
2021                    #[allow(unused_imports)]
2022                    use serde::de::Error;
2023                    use std::option::Option::Some;
2024                    let mut fields = std::collections::HashSet::new();
2025                    let mut result = Self::Value::new();
2026                    while let Some(tag) = map.next_key::<__FieldTag>()? {
2027                        #[allow(clippy::match_single_binding)]
2028                        match tag {
2029                            __FieldTag::__ingress => {
2030                                if !fields.insert(__FieldTag::__ingress) {
2031                                    return std::result::Result::Err(A::Error::duplicate_field(
2032                                        "multiple values for ingress",
2033                                    ));
2034                                }
2035                                result.ingress = map.next_value::<std::option::Option<
2036                                    crate::model::cluster::system_addons_config::Ingress,
2037                                >>()?;
2038                            }
2039                            __FieldTag::__vm_service_config => {
2040                                if !fields.insert(__FieldTag::__vm_service_config) {
2041                                    return std::result::Result::Err(A::Error::duplicate_field(
2042                                        "multiple values for vm_service_config",
2043                                    ));
2044                                }
2045                                result.vm_service_config = map.next_value::<std::option::Option<
2046                                    crate::model::cluster::system_addons_config::VMServiceConfig,
2047                                >>(
2048                                )?;
2049                            }
2050                            __FieldTag::Unknown(key) => {
2051                                let value = map.next_value::<serde_json::Value>()?;
2052                                result._unknown_fields.insert(key, value);
2053                            }
2054                        }
2055                    }
2056                    std::result::Result::Ok(result)
2057                }
2058            }
2059            deserializer.deserialize_any(Visitor)
2060        }
2061    }
2062
2063    #[doc(hidden)]
2064    impl serde::ser::Serialize for SystemAddonsConfig {
2065        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2066        where
2067            S: serde::ser::Serializer,
2068        {
2069            use serde::ser::SerializeMap;
2070            #[allow(unused_imports)]
2071            use std::option::Option::Some;
2072            let mut state = serializer.serialize_map(std::option::Option::None)?;
2073            if self.ingress.is_some() {
2074                state.serialize_entry("ingress", &self.ingress)?;
2075            }
2076            if self.vm_service_config.is_some() {
2077                state.serialize_entry("vmServiceConfig", &self.vm_service_config)?;
2078            }
2079            if !self._unknown_fields.is_empty() {
2080                for (key, value) in self._unknown_fields.iter() {
2081                    state.serialize_entry(key, &value)?;
2082                }
2083            }
2084            state.end()
2085        }
2086    }
2087
2088    impl std::fmt::Debug for SystemAddonsConfig {
2089        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2090            let mut debug_struct = f.debug_struct("SystemAddonsConfig");
2091            debug_struct.field("ingress", &self.ingress);
2092            debug_struct.field("vm_service_config", &self.vm_service_config);
2093            if !self._unknown_fields.is_empty() {
2094                debug_struct.field("_unknown_fields", &self._unknown_fields);
2095            }
2096            debug_struct.finish()
2097        }
2098    }
2099
2100    /// Defines additional types related to [SystemAddonsConfig].
2101    pub mod system_addons_config {
2102        #[allow(unused_imports)]
2103        use super::*;
2104
2105        /// Config for the Ingress add-on which allows customers to create an Ingress
2106        /// object to manage external access to the servers in a cluster. The add-on
2107        /// consists of istiod and istio-ingress.
2108        #[derive(Clone, Default, PartialEq)]
2109        #[non_exhaustive]
2110        pub struct Ingress {
2111            /// Optional. Whether Ingress is disabled.
2112            pub disabled: bool,
2113
2114            /// Optional. Ingress VIP.
2115            pub ipv4_vip: std::string::String,
2116
2117            _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
2118        }
2119
2120        impl Ingress {
2121            pub fn new() -> Self {
2122                std::default::Default::default()
2123            }
2124
2125            /// Sets the value of [disabled][crate::model::cluster::system_addons_config::Ingress::disabled].
2126            pub fn set_disabled<T: std::convert::Into<bool>>(mut self, v: T) -> Self {
2127                self.disabled = v.into();
2128                self
2129            }
2130
2131            /// Sets the value of [ipv4_vip][crate::model::cluster::system_addons_config::Ingress::ipv4_vip].
2132            pub fn set_ipv4_vip<T: std::convert::Into<std::string::String>>(
2133                mut self,
2134                v: T,
2135            ) -> Self {
2136                self.ipv4_vip = v.into();
2137                self
2138            }
2139        }
2140
2141        impl wkt::message::Message for Ingress {
2142            fn typename() -> &'static str {
2143                "type.googleapis.com/google.cloud.edgecontainer.v1.Cluster.SystemAddonsConfig.Ingress"
2144            }
2145        }
2146
2147        #[doc(hidden)]
2148        impl<'de> serde::de::Deserialize<'de> for Ingress {
2149            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2150            where
2151                D: serde::Deserializer<'de>,
2152            {
2153                #[allow(non_camel_case_types)]
2154                #[doc(hidden)]
2155                #[derive(PartialEq, Eq, Hash)]
2156                enum __FieldTag {
2157                    __disabled,
2158                    __ipv4_vip,
2159                    Unknown(std::string::String),
2160                }
2161                impl<'de> serde::de::Deserialize<'de> for __FieldTag {
2162                    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2163                    where
2164                        D: serde::Deserializer<'de>,
2165                    {
2166                        struct Visitor;
2167                        impl<'de> serde::de::Visitor<'de> for Visitor {
2168                            type Value = __FieldTag;
2169                            fn expecting(
2170                                &self,
2171                                formatter: &mut std::fmt::Formatter,
2172                            ) -> std::fmt::Result {
2173                                formatter.write_str("a field name for Ingress")
2174                            }
2175                            fn visit_str<E>(
2176                                self,
2177                                value: &str,
2178                            ) -> std::result::Result<Self::Value, E>
2179                            where
2180                                E: serde::de::Error,
2181                            {
2182                                use std::result::Result::Ok;
2183                                use std::string::ToString;
2184                                match value {
2185                                    "disabled" => Ok(__FieldTag::__disabled),
2186                                    "ipv4Vip" => Ok(__FieldTag::__ipv4_vip),
2187                                    "ipv4_vip" => Ok(__FieldTag::__ipv4_vip),
2188                                    _ => Ok(__FieldTag::Unknown(value.to_string())),
2189                                }
2190                            }
2191                        }
2192                        deserializer.deserialize_identifier(Visitor)
2193                    }
2194                }
2195                struct Visitor;
2196                impl<'de> serde::de::Visitor<'de> for Visitor {
2197                    type Value = Ingress;
2198                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
2199                        formatter.write_str("struct Ingress")
2200                    }
2201                    fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
2202                    where
2203                        A: serde::de::MapAccess<'de>,
2204                    {
2205                        #[allow(unused_imports)]
2206                        use serde::de::Error;
2207                        use std::option::Option::Some;
2208                        let mut fields = std::collections::HashSet::new();
2209                        let mut result = Self::Value::new();
2210                        while let Some(tag) = map.next_key::<__FieldTag>()? {
2211                            #[allow(clippy::match_single_binding)]
2212                            match tag {
2213                                __FieldTag::__disabled => {
2214                                    if !fields.insert(__FieldTag::__disabled) {
2215                                        return std::result::Result::Err(
2216                                            A::Error::duplicate_field(
2217                                                "multiple values for disabled",
2218                                            ),
2219                                        );
2220                                    }
2221                                    result.disabled = map
2222                                        .next_value::<std::option::Option<bool>>()?
2223                                        .unwrap_or_default();
2224                                }
2225                                __FieldTag::__ipv4_vip => {
2226                                    if !fields.insert(__FieldTag::__ipv4_vip) {
2227                                        return std::result::Result::Err(
2228                                            A::Error::duplicate_field(
2229                                                "multiple values for ipv4_vip",
2230                                            ),
2231                                        );
2232                                    }
2233                                    result.ipv4_vip = map
2234                                        .next_value::<std::option::Option<std::string::String>>()?
2235                                        .unwrap_or_default();
2236                                }
2237                                __FieldTag::Unknown(key) => {
2238                                    let value = map.next_value::<serde_json::Value>()?;
2239                                    result._unknown_fields.insert(key, value);
2240                                }
2241                            }
2242                        }
2243                        std::result::Result::Ok(result)
2244                    }
2245                }
2246                deserializer.deserialize_any(Visitor)
2247            }
2248        }
2249
2250        #[doc(hidden)]
2251        impl serde::ser::Serialize for Ingress {
2252            fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2253            where
2254                S: serde::ser::Serializer,
2255            {
2256                use serde::ser::SerializeMap;
2257                #[allow(unused_imports)]
2258                use std::option::Option::Some;
2259                let mut state = serializer.serialize_map(std::option::Option::None)?;
2260                if !wkt::internal::is_default(&self.disabled) {
2261                    state.serialize_entry("disabled", &self.disabled)?;
2262                }
2263                if !self.ipv4_vip.is_empty() {
2264                    state.serialize_entry("ipv4Vip", &self.ipv4_vip)?;
2265                }
2266                if !self._unknown_fields.is_empty() {
2267                    for (key, value) in self._unknown_fields.iter() {
2268                        state.serialize_entry(key, &value)?;
2269                    }
2270                }
2271                state.end()
2272            }
2273        }
2274
2275        impl std::fmt::Debug for Ingress {
2276            fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2277                let mut debug_struct = f.debug_struct("Ingress");
2278                debug_struct.field("disabled", &self.disabled);
2279                debug_struct.field("ipv4_vip", &self.ipv4_vip);
2280                if !self._unknown_fields.is_empty() {
2281                    debug_struct.field("_unknown_fields", &self._unknown_fields);
2282                }
2283                debug_struct.finish()
2284            }
2285        }
2286
2287        /// VMServiceConfig defines the configuration for GDCE VM Service.
2288        #[derive(Clone, Default, PartialEq)]
2289        #[non_exhaustive]
2290        pub struct VMServiceConfig {
2291            /// Optional. Whether VMM is enabled.
2292            pub vmm_enabled: bool,
2293
2294            _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
2295        }
2296
2297        impl VMServiceConfig {
2298            pub fn new() -> Self {
2299                std::default::Default::default()
2300            }
2301
2302            /// Sets the value of [vmm_enabled][crate::model::cluster::system_addons_config::VMServiceConfig::vmm_enabled].
2303            pub fn set_vmm_enabled<T: std::convert::Into<bool>>(mut self, v: T) -> Self {
2304                self.vmm_enabled = v.into();
2305                self
2306            }
2307        }
2308
2309        impl wkt::message::Message for VMServiceConfig {
2310            fn typename() -> &'static str {
2311                "type.googleapis.com/google.cloud.edgecontainer.v1.Cluster.SystemAddonsConfig.VMServiceConfig"
2312            }
2313        }
2314
2315        #[doc(hidden)]
2316        impl<'de> serde::de::Deserialize<'de> for VMServiceConfig {
2317            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2318            where
2319                D: serde::Deserializer<'de>,
2320            {
2321                #[allow(non_camel_case_types)]
2322                #[doc(hidden)]
2323                #[derive(PartialEq, Eq, Hash)]
2324                enum __FieldTag {
2325                    __vmm_enabled,
2326                    Unknown(std::string::String),
2327                }
2328                impl<'de> serde::de::Deserialize<'de> for __FieldTag {
2329                    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2330                    where
2331                        D: serde::Deserializer<'de>,
2332                    {
2333                        struct Visitor;
2334                        impl<'de> serde::de::Visitor<'de> for Visitor {
2335                            type Value = __FieldTag;
2336                            fn expecting(
2337                                &self,
2338                                formatter: &mut std::fmt::Formatter,
2339                            ) -> std::fmt::Result {
2340                                formatter.write_str("a field name for VMServiceConfig")
2341                            }
2342                            fn visit_str<E>(
2343                                self,
2344                                value: &str,
2345                            ) -> std::result::Result<Self::Value, E>
2346                            where
2347                                E: serde::de::Error,
2348                            {
2349                                use std::result::Result::Ok;
2350                                use std::string::ToString;
2351                                match value {
2352                                    "vmmEnabled" => Ok(__FieldTag::__vmm_enabled),
2353                                    "vmm_enabled" => Ok(__FieldTag::__vmm_enabled),
2354                                    _ => Ok(__FieldTag::Unknown(value.to_string())),
2355                                }
2356                            }
2357                        }
2358                        deserializer.deserialize_identifier(Visitor)
2359                    }
2360                }
2361                struct Visitor;
2362                impl<'de> serde::de::Visitor<'de> for Visitor {
2363                    type Value = VMServiceConfig;
2364                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
2365                        formatter.write_str("struct VMServiceConfig")
2366                    }
2367                    fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
2368                    where
2369                        A: serde::de::MapAccess<'de>,
2370                    {
2371                        #[allow(unused_imports)]
2372                        use serde::de::Error;
2373                        use std::option::Option::Some;
2374                        let mut fields = std::collections::HashSet::new();
2375                        let mut result = Self::Value::new();
2376                        while let Some(tag) = map.next_key::<__FieldTag>()? {
2377                            #[allow(clippy::match_single_binding)]
2378                            match tag {
2379                                __FieldTag::__vmm_enabled => {
2380                                    if !fields.insert(__FieldTag::__vmm_enabled) {
2381                                        return std::result::Result::Err(
2382                                            A::Error::duplicate_field(
2383                                                "multiple values for vmm_enabled",
2384                                            ),
2385                                        );
2386                                    }
2387                                    result.vmm_enabled = map
2388                                        .next_value::<std::option::Option<bool>>()?
2389                                        .unwrap_or_default();
2390                                }
2391                                __FieldTag::Unknown(key) => {
2392                                    let value = map.next_value::<serde_json::Value>()?;
2393                                    result._unknown_fields.insert(key, value);
2394                                }
2395                            }
2396                        }
2397                        std::result::Result::Ok(result)
2398                    }
2399                }
2400                deserializer.deserialize_any(Visitor)
2401            }
2402        }
2403
2404        #[doc(hidden)]
2405        impl serde::ser::Serialize for VMServiceConfig {
2406            fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2407            where
2408                S: serde::ser::Serializer,
2409            {
2410                use serde::ser::SerializeMap;
2411                #[allow(unused_imports)]
2412                use std::option::Option::Some;
2413                let mut state = serializer.serialize_map(std::option::Option::None)?;
2414                if !wkt::internal::is_default(&self.vmm_enabled) {
2415                    state.serialize_entry("vmmEnabled", &self.vmm_enabled)?;
2416                }
2417                if !self._unknown_fields.is_empty() {
2418                    for (key, value) in self._unknown_fields.iter() {
2419                        state.serialize_entry(key, &value)?;
2420                    }
2421                }
2422                state.end()
2423            }
2424        }
2425
2426        impl std::fmt::Debug for VMServiceConfig {
2427            fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2428                let mut debug_struct = f.debug_struct("VMServiceConfig");
2429                debug_struct.field("vmm_enabled", &self.vmm_enabled);
2430                if !self._unknown_fields.is_empty() {
2431                    debug_struct.field("_unknown_fields", &self._unknown_fields);
2432                }
2433                debug_struct.finish()
2434            }
2435        }
2436    }
2437
2438    /// Configuration for Customer-managed KMS key support for control plane nodes.
2439    #[derive(Clone, Default, PartialEq)]
2440    #[non_exhaustive]
2441    pub struct ControlPlaneEncryption {
2442        /// Optional. The Cloud KMS CryptoKey e.g.
2443        /// projects/{project}/locations/{location}/keyRings/{keyRing}/cryptoKeys/{cryptoKey}
2444        /// to use for protecting control plane disks. If not specified, a
2445        /// Google-managed key will be used instead.
2446        pub kms_key: std::string::String,
2447
2448        /// Output only. The Cloud KMS CryptoKeyVersion currently in use for
2449        /// protecting control plane disks. Only applicable if kms_key is set.
2450        pub kms_key_active_version: std::string::String,
2451
2452        /// Output only. Availability of the Cloud KMS CryptoKey. If not
2453        /// `KEY_AVAILABLE`, then nodes may go offline as they cannot access their
2454        /// local data. This can be caused by a lack of permissions to use the key,
2455        /// or if the key is disabled or deleted.
2456        pub kms_key_state: crate::model::KmsKeyState,
2457
2458        /// Output only. Error status returned by Cloud KMS when using this key. This
2459        /// field may be populated only if `kms_key_state` is not
2460        /// `KMS_KEY_STATE_KEY_AVAILABLE`. If populated, this field contains the
2461        /// error status reported by Cloud KMS.
2462        pub kms_status: std::option::Option<rpc::model::Status>,
2463
2464        /// Output only. The current resource state associated with the cmek.
2465        pub resource_state: crate::model::ResourceState,
2466
2467        _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
2468    }
2469
2470    impl ControlPlaneEncryption {
2471        pub fn new() -> Self {
2472            std::default::Default::default()
2473        }
2474
2475        /// Sets the value of [kms_key][crate::model::cluster::ControlPlaneEncryption::kms_key].
2476        pub fn set_kms_key<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
2477            self.kms_key = v.into();
2478            self
2479        }
2480
2481        /// Sets the value of [kms_key_active_version][crate::model::cluster::ControlPlaneEncryption::kms_key_active_version].
2482        pub fn set_kms_key_active_version<T: std::convert::Into<std::string::String>>(
2483            mut self,
2484            v: T,
2485        ) -> Self {
2486            self.kms_key_active_version = v.into();
2487            self
2488        }
2489
2490        /// Sets the value of [kms_key_state][crate::model::cluster::ControlPlaneEncryption::kms_key_state].
2491        pub fn set_kms_key_state<T: std::convert::Into<crate::model::KmsKeyState>>(
2492            mut self,
2493            v: T,
2494        ) -> Self {
2495            self.kms_key_state = v.into();
2496            self
2497        }
2498
2499        /// Sets the value of [kms_status][crate::model::cluster::ControlPlaneEncryption::kms_status].
2500        pub fn set_kms_status<T>(mut self, v: T) -> Self
2501        where
2502            T: std::convert::Into<rpc::model::Status>,
2503        {
2504            self.kms_status = std::option::Option::Some(v.into());
2505            self
2506        }
2507
2508        /// Sets or clears the value of [kms_status][crate::model::cluster::ControlPlaneEncryption::kms_status].
2509        pub fn set_or_clear_kms_status<T>(mut self, v: std::option::Option<T>) -> Self
2510        where
2511            T: std::convert::Into<rpc::model::Status>,
2512        {
2513            self.kms_status = v.map(|x| x.into());
2514            self
2515        }
2516
2517        /// Sets the value of [resource_state][crate::model::cluster::ControlPlaneEncryption::resource_state].
2518        pub fn set_resource_state<T: std::convert::Into<crate::model::ResourceState>>(
2519            mut self,
2520            v: T,
2521        ) -> Self {
2522            self.resource_state = v.into();
2523            self
2524        }
2525    }
2526
2527    impl wkt::message::Message for ControlPlaneEncryption {
2528        fn typename() -> &'static str {
2529            "type.googleapis.com/google.cloud.edgecontainer.v1.Cluster.ControlPlaneEncryption"
2530        }
2531    }
2532
2533    #[doc(hidden)]
2534    impl<'de> serde::de::Deserialize<'de> for ControlPlaneEncryption {
2535        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2536        where
2537            D: serde::Deserializer<'de>,
2538        {
2539            #[allow(non_camel_case_types)]
2540            #[doc(hidden)]
2541            #[derive(PartialEq, Eq, Hash)]
2542            enum __FieldTag {
2543                __kms_key,
2544                __kms_key_active_version,
2545                __kms_key_state,
2546                __kms_status,
2547                __resource_state,
2548                Unknown(std::string::String),
2549            }
2550            impl<'de> serde::de::Deserialize<'de> for __FieldTag {
2551                fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2552                where
2553                    D: serde::Deserializer<'de>,
2554                {
2555                    struct Visitor;
2556                    impl<'de> serde::de::Visitor<'de> for Visitor {
2557                        type Value = __FieldTag;
2558                        fn expecting(
2559                            &self,
2560                            formatter: &mut std::fmt::Formatter,
2561                        ) -> std::fmt::Result {
2562                            formatter.write_str("a field name for ControlPlaneEncryption")
2563                        }
2564                        fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
2565                        where
2566                            E: serde::de::Error,
2567                        {
2568                            use std::result::Result::Ok;
2569                            use std::string::ToString;
2570                            match value {
2571                                "kmsKey" => Ok(__FieldTag::__kms_key),
2572                                "kms_key" => Ok(__FieldTag::__kms_key),
2573                                "kmsKeyActiveVersion" => Ok(__FieldTag::__kms_key_active_version),
2574                                "kms_key_active_version" => {
2575                                    Ok(__FieldTag::__kms_key_active_version)
2576                                }
2577                                "kmsKeyState" => Ok(__FieldTag::__kms_key_state),
2578                                "kms_key_state" => Ok(__FieldTag::__kms_key_state),
2579                                "kmsStatus" => Ok(__FieldTag::__kms_status),
2580                                "kms_status" => Ok(__FieldTag::__kms_status),
2581                                "resourceState" => Ok(__FieldTag::__resource_state),
2582                                "resource_state" => Ok(__FieldTag::__resource_state),
2583                                _ => Ok(__FieldTag::Unknown(value.to_string())),
2584                            }
2585                        }
2586                    }
2587                    deserializer.deserialize_identifier(Visitor)
2588                }
2589            }
2590            struct Visitor;
2591            impl<'de> serde::de::Visitor<'de> for Visitor {
2592                type Value = ControlPlaneEncryption;
2593                fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
2594                    formatter.write_str("struct ControlPlaneEncryption")
2595                }
2596                fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
2597                where
2598                    A: serde::de::MapAccess<'de>,
2599                {
2600                    #[allow(unused_imports)]
2601                    use serde::de::Error;
2602                    use std::option::Option::Some;
2603                    let mut fields = std::collections::HashSet::new();
2604                    let mut result = Self::Value::new();
2605                    while let Some(tag) = map.next_key::<__FieldTag>()? {
2606                        #[allow(clippy::match_single_binding)]
2607                        match tag {
2608                            __FieldTag::__kms_key => {
2609                                if !fields.insert(__FieldTag::__kms_key) {
2610                                    return std::result::Result::Err(A::Error::duplicate_field(
2611                                        "multiple values for kms_key",
2612                                    ));
2613                                }
2614                                result.kms_key = map
2615                                    .next_value::<std::option::Option<std::string::String>>()?
2616                                    .unwrap_or_default();
2617                            }
2618                            __FieldTag::__kms_key_active_version => {
2619                                if !fields.insert(__FieldTag::__kms_key_active_version) {
2620                                    return std::result::Result::Err(A::Error::duplicate_field(
2621                                        "multiple values for kms_key_active_version",
2622                                    ));
2623                                }
2624                                result.kms_key_active_version = map
2625                                    .next_value::<std::option::Option<std::string::String>>()?
2626                                    .unwrap_or_default();
2627                            }
2628                            __FieldTag::__kms_key_state => {
2629                                if !fields.insert(__FieldTag::__kms_key_state) {
2630                                    return std::result::Result::Err(A::Error::duplicate_field(
2631                                        "multiple values for kms_key_state",
2632                                    ));
2633                                }
2634                                result.kms_key_state = map
2635                                    .next_value::<std::option::Option<crate::model::KmsKeyState>>()?
2636                                    .unwrap_or_default();
2637                            }
2638                            __FieldTag::__kms_status => {
2639                                if !fields.insert(__FieldTag::__kms_status) {
2640                                    return std::result::Result::Err(A::Error::duplicate_field(
2641                                        "multiple values for kms_status",
2642                                    ));
2643                                }
2644                                result.kms_status =
2645                                    map.next_value::<std::option::Option<rpc::model::Status>>()?;
2646                            }
2647                            __FieldTag::__resource_state => {
2648                                if !fields.insert(__FieldTag::__resource_state) {
2649                                    return std::result::Result::Err(A::Error::duplicate_field(
2650                                        "multiple values for resource_state",
2651                                    ));
2652                                }
2653                                result.resource_state = map
2654                                    .next_value::<std::option::Option<crate::model::ResourceState>>(
2655                                    )?
2656                                    .unwrap_or_default();
2657                            }
2658                            __FieldTag::Unknown(key) => {
2659                                let value = map.next_value::<serde_json::Value>()?;
2660                                result._unknown_fields.insert(key, value);
2661                            }
2662                        }
2663                    }
2664                    std::result::Result::Ok(result)
2665                }
2666            }
2667            deserializer.deserialize_any(Visitor)
2668        }
2669    }
2670
2671    #[doc(hidden)]
2672    impl serde::ser::Serialize for ControlPlaneEncryption {
2673        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2674        where
2675            S: serde::ser::Serializer,
2676        {
2677            use serde::ser::SerializeMap;
2678            #[allow(unused_imports)]
2679            use std::option::Option::Some;
2680            let mut state = serializer.serialize_map(std::option::Option::None)?;
2681            if !self.kms_key.is_empty() {
2682                state.serialize_entry("kmsKey", &self.kms_key)?;
2683            }
2684            if !self.kms_key_active_version.is_empty() {
2685                state.serialize_entry("kmsKeyActiveVersion", &self.kms_key_active_version)?;
2686            }
2687            if !wkt::internal::is_default(&self.kms_key_state) {
2688                state.serialize_entry("kmsKeyState", &self.kms_key_state)?;
2689            }
2690            if self.kms_status.is_some() {
2691                state.serialize_entry("kmsStatus", &self.kms_status)?;
2692            }
2693            if !wkt::internal::is_default(&self.resource_state) {
2694                state.serialize_entry("resourceState", &self.resource_state)?;
2695            }
2696            if !self._unknown_fields.is_empty() {
2697                for (key, value) in self._unknown_fields.iter() {
2698                    state.serialize_entry(key, &value)?;
2699                }
2700            }
2701            state.end()
2702        }
2703    }
2704
2705    impl std::fmt::Debug for ControlPlaneEncryption {
2706        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2707            let mut debug_struct = f.debug_struct("ControlPlaneEncryption");
2708            debug_struct.field("kms_key", &self.kms_key);
2709            debug_struct.field("kms_key_active_version", &self.kms_key_active_version);
2710            debug_struct.field("kms_key_state", &self.kms_key_state);
2711            debug_struct.field("kms_status", &self.kms_status);
2712            debug_struct.field("resource_state", &self.resource_state);
2713            if !self._unknown_fields.is_empty() {
2714                debug_struct.field("_unknown_fields", &self._unknown_fields);
2715            }
2716            debug_struct.finish()
2717        }
2718    }
2719
2720    /// A Maintenance Event is an operation that could cause temporary disruptions
2721    /// to the cluster workloads, including Google-driven or user-initiated cluster
2722    /// upgrades, user-initiated cluster configuration changes that require
2723    /// restarting nodes, etc.
2724    #[derive(Clone, Default, PartialEq)]
2725    #[non_exhaustive]
2726    pub struct MaintenanceEvent {
2727        /// Output only. UUID of the maintenance event.
2728        pub uuid: std::string::String,
2729
2730        /// Output only. The target version of the cluster.
2731        pub target_version: std::string::String,
2732
2733        /// Output only. The operation for running the maintenance event. Specified
2734        /// in the format projects/*/locations/*/operations/*. If the maintenance
2735        /// event is split into multiple operations (e.g. due to maintenance
2736        /// windows), the latest one is recorded.
2737        pub operation: std::string::String,
2738
2739        /// Output only. The type of the maintenance event.
2740        pub r#type: crate::model::cluster::maintenance_event::Type,
2741
2742        /// Output only. The schedule of the maintenance event.
2743        pub schedule: crate::model::cluster::maintenance_event::Schedule,
2744
2745        /// Output only. The state of the maintenance event.
2746        pub state: crate::model::cluster::maintenance_event::State,
2747
2748        /// Output only. The time when the maintenance event request was created.
2749        pub create_time: std::option::Option<wkt::Timestamp>,
2750
2751        /// Output only. The time when the maintenance event started.
2752        pub start_time: std::option::Option<wkt::Timestamp>,
2753
2754        /// Output only. The time when the maintenance event ended, either
2755        /// successfully or not. If the maintenance event is split into multiple
2756        /// maintenance windows, end_time is only updated when the whole flow ends.
2757        pub end_time: std::option::Option<wkt::Timestamp>,
2758
2759        /// Output only. The time when the maintenance event message was updated.
2760        pub update_time: std::option::Option<wkt::Timestamp>,
2761
2762        _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
2763    }
2764
2765    impl MaintenanceEvent {
2766        pub fn new() -> Self {
2767            std::default::Default::default()
2768        }
2769
2770        /// Sets the value of [uuid][crate::model::cluster::MaintenanceEvent::uuid].
2771        pub fn set_uuid<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
2772            self.uuid = v.into();
2773            self
2774        }
2775
2776        /// Sets the value of [target_version][crate::model::cluster::MaintenanceEvent::target_version].
2777        pub fn set_target_version<T: std::convert::Into<std::string::String>>(
2778            mut self,
2779            v: T,
2780        ) -> Self {
2781            self.target_version = v.into();
2782            self
2783        }
2784
2785        /// Sets the value of [operation][crate::model::cluster::MaintenanceEvent::operation].
2786        pub fn set_operation<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
2787            self.operation = v.into();
2788            self
2789        }
2790
2791        /// Sets the value of [r#type][crate::model::cluster::MaintenanceEvent::type].
2792        pub fn set_type<T: std::convert::Into<crate::model::cluster::maintenance_event::Type>>(
2793            mut self,
2794            v: T,
2795        ) -> Self {
2796            self.r#type = v.into();
2797            self
2798        }
2799
2800        /// Sets the value of [schedule][crate::model::cluster::MaintenanceEvent::schedule].
2801        pub fn set_schedule<
2802            T: std::convert::Into<crate::model::cluster::maintenance_event::Schedule>,
2803        >(
2804            mut self,
2805            v: T,
2806        ) -> Self {
2807            self.schedule = v.into();
2808            self
2809        }
2810
2811        /// Sets the value of [state][crate::model::cluster::MaintenanceEvent::state].
2812        pub fn set_state<T: std::convert::Into<crate::model::cluster::maintenance_event::State>>(
2813            mut self,
2814            v: T,
2815        ) -> Self {
2816            self.state = v.into();
2817            self
2818        }
2819
2820        /// Sets the value of [create_time][crate::model::cluster::MaintenanceEvent::create_time].
2821        pub fn set_create_time<T>(mut self, v: T) -> Self
2822        where
2823            T: std::convert::Into<wkt::Timestamp>,
2824        {
2825            self.create_time = std::option::Option::Some(v.into());
2826            self
2827        }
2828
2829        /// Sets or clears the value of [create_time][crate::model::cluster::MaintenanceEvent::create_time].
2830        pub fn set_or_clear_create_time<T>(mut self, v: std::option::Option<T>) -> Self
2831        where
2832            T: std::convert::Into<wkt::Timestamp>,
2833        {
2834            self.create_time = v.map(|x| x.into());
2835            self
2836        }
2837
2838        /// Sets the value of [start_time][crate::model::cluster::MaintenanceEvent::start_time].
2839        pub fn set_start_time<T>(mut self, v: T) -> Self
2840        where
2841            T: std::convert::Into<wkt::Timestamp>,
2842        {
2843            self.start_time = std::option::Option::Some(v.into());
2844            self
2845        }
2846
2847        /// Sets or clears the value of [start_time][crate::model::cluster::MaintenanceEvent::start_time].
2848        pub fn set_or_clear_start_time<T>(mut self, v: std::option::Option<T>) -> Self
2849        where
2850            T: std::convert::Into<wkt::Timestamp>,
2851        {
2852            self.start_time = v.map(|x| x.into());
2853            self
2854        }
2855
2856        /// Sets the value of [end_time][crate::model::cluster::MaintenanceEvent::end_time].
2857        pub fn set_end_time<T>(mut self, v: T) -> Self
2858        where
2859            T: std::convert::Into<wkt::Timestamp>,
2860        {
2861            self.end_time = std::option::Option::Some(v.into());
2862            self
2863        }
2864
2865        /// Sets or clears the value of [end_time][crate::model::cluster::MaintenanceEvent::end_time].
2866        pub fn set_or_clear_end_time<T>(mut self, v: std::option::Option<T>) -> Self
2867        where
2868            T: std::convert::Into<wkt::Timestamp>,
2869        {
2870            self.end_time = v.map(|x| x.into());
2871            self
2872        }
2873
2874        /// Sets the value of [update_time][crate::model::cluster::MaintenanceEvent::update_time].
2875        pub fn set_update_time<T>(mut self, v: T) -> Self
2876        where
2877            T: std::convert::Into<wkt::Timestamp>,
2878        {
2879            self.update_time = std::option::Option::Some(v.into());
2880            self
2881        }
2882
2883        /// Sets or clears the value of [update_time][crate::model::cluster::MaintenanceEvent::update_time].
2884        pub fn set_or_clear_update_time<T>(mut self, v: std::option::Option<T>) -> Self
2885        where
2886            T: std::convert::Into<wkt::Timestamp>,
2887        {
2888            self.update_time = v.map(|x| x.into());
2889            self
2890        }
2891    }
2892
2893    impl wkt::message::Message for MaintenanceEvent {
2894        fn typename() -> &'static str {
2895            "type.googleapis.com/google.cloud.edgecontainer.v1.Cluster.MaintenanceEvent"
2896        }
2897    }
2898
2899    #[doc(hidden)]
2900    impl<'de> serde::de::Deserialize<'de> for MaintenanceEvent {
2901        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2902        where
2903            D: serde::Deserializer<'de>,
2904        {
2905            #[allow(non_camel_case_types)]
2906            #[doc(hidden)]
2907            #[derive(PartialEq, Eq, Hash)]
2908            enum __FieldTag {
2909                __uuid,
2910                __target_version,
2911                __operation,
2912                __type,
2913                __schedule,
2914                __state,
2915                __create_time,
2916                __start_time,
2917                __end_time,
2918                __update_time,
2919                Unknown(std::string::String),
2920            }
2921            impl<'de> serde::de::Deserialize<'de> for __FieldTag {
2922                fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2923                where
2924                    D: serde::Deserializer<'de>,
2925                {
2926                    struct Visitor;
2927                    impl<'de> serde::de::Visitor<'de> for Visitor {
2928                        type Value = __FieldTag;
2929                        fn expecting(
2930                            &self,
2931                            formatter: &mut std::fmt::Formatter,
2932                        ) -> std::fmt::Result {
2933                            formatter.write_str("a field name for MaintenanceEvent")
2934                        }
2935                        fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
2936                        where
2937                            E: serde::de::Error,
2938                        {
2939                            use std::result::Result::Ok;
2940                            use std::string::ToString;
2941                            match value {
2942                                "uuid" => Ok(__FieldTag::__uuid),
2943                                "targetVersion" => Ok(__FieldTag::__target_version),
2944                                "target_version" => Ok(__FieldTag::__target_version),
2945                                "operation" => Ok(__FieldTag::__operation),
2946                                "type" => Ok(__FieldTag::__type),
2947                                "schedule" => Ok(__FieldTag::__schedule),
2948                                "state" => Ok(__FieldTag::__state),
2949                                "createTime" => Ok(__FieldTag::__create_time),
2950                                "create_time" => Ok(__FieldTag::__create_time),
2951                                "startTime" => Ok(__FieldTag::__start_time),
2952                                "start_time" => Ok(__FieldTag::__start_time),
2953                                "endTime" => Ok(__FieldTag::__end_time),
2954                                "end_time" => Ok(__FieldTag::__end_time),
2955                                "updateTime" => Ok(__FieldTag::__update_time),
2956                                "update_time" => Ok(__FieldTag::__update_time),
2957                                _ => Ok(__FieldTag::Unknown(value.to_string())),
2958                            }
2959                        }
2960                    }
2961                    deserializer.deserialize_identifier(Visitor)
2962                }
2963            }
2964            struct Visitor;
2965            impl<'de> serde::de::Visitor<'de> for Visitor {
2966                type Value = MaintenanceEvent;
2967                fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
2968                    formatter.write_str("struct MaintenanceEvent")
2969                }
2970                fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
2971                where
2972                    A: serde::de::MapAccess<'de>,
2973                {
2974                    #[allow(unused_imports)]
2975                    use serde::de::Error;
2976                    use std::option::Option::Some;
2977                    let mut fields = std::collections::HashSet::new();
2978                    let mut result = Self::Value::new();
2979                    while let Some(tag) = map.next_key::<__FieldTag>()? {
2980                        #[allow(clippy::match_single_binding)]
2981                        match tag {
2982                            __FieldTag::__uuid => {
2983                                if !fields.insert(__FieldTag::__uuid) {
2984                                    return std::result::Result::Err(A::Error::duplicate_field(
2985                                        "multiple values for uuid",
2986                                    ));
2987                                }
2988                                result.uuid = map
2989                                    .next_value::<std::option::Option<std::string::String>>()?
2990                                    .unwrap_or_default();
2991                            }
2992                            __FieldTag::__target_version => {
2993                                if !fields.insert(__FieldTag::__target_version) {
2994                                    return std::result::Result::Err(A::Error::duplicate_field(
2995                                        "multiple values for target_version",
2996                                    ));
2997                                }
2998                                result.target_version = map
2999                                    .next_value::<std::option::Option<std::string::String>>()?
3000                                    .unwrap_or_default();
3001                            }
3002                            __FieldTag::__operation => {
3003                                if !fields.insert(__FieldTag::__operation) {
3004                                    return std::result::Result::Err(A::Error::duplicate_field(
3005                                        "multiple values for operation",
3006                                    ));
3007                                }
3008                                result.operation = map
3009                                    .next_value::<std::option::Option<std::string::String>>()?
3010                                    .unwrap_or_default();
3011                            }
3012                            __FieldTag::__type => {
3013                                if !fields.insert(__FieldTag::__type) {
3014                                    return std::result::Result::Err(A::Error::duplicate_field(
3015                                        "multiple values for type",
3016                                    ));
3017                                }
3018                                result.r#type = map
3019                                    .next_value::<std::option::Option<
3020                                        crate::model::cluster::maintenance_event::Type,
3021                                    >>()?
3022                                    .unwrap_or_default();
3023                            }
3024                            __FieldTag::__schedule => {
3025                                if !fields.insert(__FieldTag::__schedule) {
3026                                    return std::result::Result::Err(A::Error::duplicate_field(
3027                                        "multiple values for schedule",
3028                                    ));
3029                                }
3030                                result.schedule = map
3031                                    .next_value::<std::option::Option<
3032                                        crate::model::cluster::maintenance_event::Schedule,
3033                                    >>()?
3034                                    .unwrap_or_default();
3035                            }
3036                            __FieldTag::__state => {
3037                                if !fields.insert(__FieldTag::__state) {
3038                                    return std::result::Result::Err(A::Error::duplicate_field(
3039                                        "multiple values for state",
3040                                    ));
3041                                }
3042                                result.state = map
3043                                    .next_value::<std::option::Option<
3044                                        crate::model::cluster::maintenance_event::State,
3045                                    >>()?
3046                                    .unwrap_or_default();
3047                            }
3048                            __FieldTag::__create_time => {
3049                                if !fields.insert(__FieldTag::__create_time) {
3050                                    return std::result::Result::Err(A::Error::duplicate_field(
3051                                        "multiple values for create_time",
3052                                    ));
3053                                }
3054                                result.create_time =
3055                                    map.next_value::<std::option::Option<wkt::Timestamp>>()?;
3056                            }
3057                            __FieldTag::__start_time => {
3058                                if !fields.insert(__FieldTag::__start_time) {
3059                                    return std::result::Result::Err(A::Error::duplicate_field(
3060                                        "multiple values for start_time",
3061                                    ));
3062                                }
3063                                result.start_time =
3064                                    map.next_value::<std::option::Option<wkt::Timestamp>>()?;
3065                            }
3066                            __FieldTag::__end_time => {
3067                                if !fields.insert(__FieldTag::__end_time) {
3068                                    return std::result::Result::Err(A::Error::duplicate_field(
3069                                        "multiple values for end_time",
3070                                    ));
3071                                }
3072                                result.end_time =
3073                                    map.next_value::<std::option::Option<wkt::Timestamp>>()?;
3074                            }
3075                            __FieldTag::__update_time => {
3076                                if !fields.insert(__FieldTag::__update_time) {
3077                                    return std::result::Result::Err(A::Error::duplicate_field(
3078                                        "multiple values for update_time",
3079                                    ));
3080                                }
3081                                result.update_time =
3082                                    map.next_value::<std::option::Option<wkt::Timestamp>>()?;
3083                            }
3084                            __FieldTag::Unknown(key) => {
3085                                let value = map.next_value::<serde_json::Value>()?;
3086                                result._unknown_fields.insert(key, value);
3087                            }
3088                        }
3089                    }
3090                    std::result::Result::Ok(result)
3091                }
3092            }
3093            deserializer.deserialize_any(Visitor)
3094        }
3095    }
3096
3097    #[doc(hidden)]
3098    impl serde::ser::Serialize for MaintenanceEvent {
3099        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3100        where
3101            S: serde::ser::Serializer,
3102        {
3103            use serde::ser::SerializeMap;
3104            #[allow(unused_imports)]
3105            use std::option::Option::Some;
3106            let mut state = serializer.serialize_map(std::option::Option::None)?;
3107            if !self.uuid.is_empty() {
3108                state.serialize_entry("uuid", &self.uuid)?;
3109            }
3110            if !self.target_version.is_empty() {
3111                state.serialize_entry("targetVersion", &self.target_version)?;
3112            }
3113            if !self.operation.is_empty() {
3114                state.serialize_entry("operation", &self.operation)?;
3115            }
3116            if !wkt::internal::is_default(&self.r#type) {
3117                state.serialize_entry("type", &self.r#type)?;
3118            }
3119            if !wkt::internal::is_default(&self.schedule) {
3120                state.serialize_entry("schedule", &self.schedule)?;
3121            }
3122            if !wkt::internal::is_default(&self.state) {
3123                state.serialize_entry("state", &self.state)?;
3124            }
3125            if self.create_time.is_some() {
3126                state.serialize_entry("createTime", &self.create_time)?;
3127            }
3128            if self.start_time.is_some() {
3129                state.serialize_entry("startTime", &self.start_time)?;
3130            }
3131            if self.end_time.is_some() {
3132                state.serialize_entry("endTime", &self.end_time)?;
3133            }
3134            if self.update_time.is_some() {
3135                state.serialize_entry("updateTime", &self.update_time)?;
3136            }
3137            if !self._unknown_fields.is_empty() {
3138                for (key, value) in self._unknown_fields.iter() {
3139                    state.serialize_entry(key, &value)?;
3140                }
3141            }
3142            state.end()
3143        }
3144    }
3145
3146    impl std::fmt::Debug for MaintenanceEvent {
3147        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3148            let mut debug_struct = f.debug_struct("MaintenanceEvent");
3149            debug_struct.field("uuid", &self.uuid);
3150            debug_struct.field("target_version", &self.target_version);
3151            debug_struct.field("operation", &self.operation);
3152            debug_struct.field("r#type", &self.r#type);
3153            debug_struct.field("schedule", &self.schedule);
3154            debug_struct.field("state", &self.state);
3155            debug_struct.field("create_time", &self.create_time);
3156            debug_struct.field("start_time", &self.start_time);
3157            debug_struct.field("end_time", &self.end_time);
3158            debug_struct.field("update_time", &self.update_time);
3159            if !self._unknown_fields.is_empty() {
3160                debug_struct.field("_unknown_fields", &self._unknown_fields);
3161            }
3162            debug_struct.finish()
3163        }
3164    }
3165
3166    /// Defines additional types related to [MaintenanceEvent].
3167    pub mod maintenance_event {
3168        #[allow(unused_imports)]
3169        use super::*;
3170
3171        /// Indicates the maintenance event type.
3172        ///
3173        /// # Working with unknown values
3174        ///
3175        /// This enum is defined as `#[non_exhaustive]` because Google Cloud may add
3176        /// additional enum variants at any time. Adding new variants is not considered
3177        /// a breaking change. Applications should write their code in anticipation of:
3178        ///
3179        /// - New values appearing in future releases of the client library, **and**
3180        /// - New values received dynamically, without application changes.
3181        ///
3182        /// Please consult the [Working with enums] section in the user guide for some
3183        /// guidelines.
3184        ///
3185        /// [Working with enums]: https://google-cloud-rust.github.io/working_with_enums.html
3186        #[derive(Clone, Debug, PartialEq)]
3187        #[non_exhaustive]
3188        pub enum Type {
3189            /// Unspecified.
3190            Unspecified,
3191            /// Upgrade initiated by users.
3192            UserInitiatedUpgrade,
3193            /// Upgrade driven by Google.
3194            GoogleDrivenUpgrade,
3195            /// If set, the enum was initialized with an unknown value.
3196            ///
3197            /// Applications can examine the value using [Type::value] or
3198            /// [Type::name].
3199            UnknownValue(r#type::UnknownValue),
3200        }
3201
3202        #[doc(hidden)]
3203        pub mod r#type {
3204            #[allow(unused_imports)]
3205            use super::*;
3206            #[derive(Clone, Debug, PartialEq)]
3207            pub struct UnknownValue(pub(crate) wkt::internal::UnknownEnumValue);
3208        }
3209
3210        impl Type {
3211            /// Gets the enum value.
3212            ///
3213            /// Returns `None` if the enum contains an unknown value deserialized from
3214            /// the string representation of enums.
3215            pub fn value(&self) -> std::option::Option<i32> {
3216                match self {
3217                    Self::Unspecified => std::option::Option::Some(0),
3218                    Self::UserInitiatedUpgrade => std::option::Option::Some(1),
3219                    Self::GoogleDrivenUpgrade => std::option::Option::Some(2),
3220                    Self::UnknownValue(u) => u.0.value(),
3221                }
3222            }
3223
3224            /// Gets the enum value as a string.
3225            ///
3226            /// Returns `None` if the enum contains an unknown value deserialized from
3227            /// the integer representation of enums.
3228            pub fn name(&self) -> std::option::Option<&str> {
3229                match self {
3230                    Self::Unspecified => std::option::Option::Some("TYPE_UNSPECIFIED"),
3231                    Self::UserInitiatedUpgrade => {
3232                        std::option::Option::Some("USER_INITIATED_UPGRADE")
3233                    }
3234                    Self::GoogleDrivenUpgrade => std::option::Option::Some("GOOGLE_DRIVEN_UPGRADE"),
3235                    Self::UnknownValue(u) => u.0.name(),
3236                }
3237            }
3238        }
3239
3240        impl std::default::Default for Type {
3241            fn default() -> Self {
3242                use std::convert::From;
3243                Self::from(0)
3244            }
3245        }
3246
3247        impl std::fmt::Display for Type {
3248            fn fmt(
3249                &self,
3250                f: &mut std::fmt::Formatter<'_>,
3251            ) -> std::result::Result<(), std::fmt::Error> {
3252                wkt::internal::display_enum(f, self.name(), self.value())
3253            }
3254        }
3255
3256        impl std::convert::From<i32> for Type {
3257            fn from(value: i32) -> Self {
3258                match value {
3259                    0 => Self::Unspecified,
3260                    1 => Self::UserInitiatedUpgrade,
3261                    2 => Self::GoogleDrivenUpgrade,
3262                    _ => Self::UnknownValue(r#type::UnknownValue(
3263                        wkt::internal::UnknownEnumValue::Integer(value),
3264                    )),
3265                }
3266            }
3267        }
3268
3269        impl std::convert::From<&str> for Type {
3270            fn from(value: &str) -> Self {
3271                use std::string::ToString;
3272                match value {
3273                    "TYPE_UNSPECIFIED" => Self::Unspecified,
3274                    "USER_INITIATED_UPGRADE" => Self::UserInitiatedUpgrade,
3275                    "GOOGLE_DRIVEN_UPGRADE" => Self::GoogleDrivenUpgrade,
3276                    _ => Self::UnknownValue(r#type::UnknownValue(
3277                        wkt::internal::UnknownEnumValue::String(value.to_string()),
3278                    )),
3279                }
3280            }
3281        }
3282
3283        impl serde::ser::Serialize for Type {
3284            fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3285            where
3286                S: serde::Serializer,
3287            {
3288                match self {
3289                    Self::Unspecified => serializer.serialize_i32(0),
3290                    Self::UserInitiatedUpgrade => serializer.serialize_i32(1),
3291                    Self::GoogleDrivenUpgrade => serializer.serialize_i32(2),
3292                    Self::UnknownValue(u) => u.0.serialize(serializer),
3293                }
3294            }
3295        }
3296
3297        impl<'de> serde::de::Deserialize<'de> for Type {
3298            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3299            where
3300                D: serde::Deserializer<'de>,
3301            {
3302                deserializer.deserialize_any(wkt::internal::EnumVisitor::<Type>::new(
3303                    ".google.cloud.edgecontainer.v1.Cluster.MaintenanceEvent.Type",
3304                ))
3305            }
3306        }
3307
3308        /// Indicates when the maintenance event should be performed.
3309        ///
3310        /// # Working with unknown values
3311        ///
3312        /// This enum is defined as `#[non_exhaustive]` because Google Cloud may add
3313        /// additional enum variants at any time. Adding new variants is not considered
3314        /// a breaking change. Applications should write their code in anticipation of:
3315        ///
3316        /// - New values appearing in future releases of the client library, **and**
3317        /// - New values received dynamically, without application changes.
3318        ///
3319        /// Please consult the [Working with enums] section in the user guide for some
3320        /// guidelines.
3321        ///
3322        /// [Working with enums]: https://google-cloud-rust.github.io/working_with_enums.html
3323        #[derive(Clone, Debug, PartialEq)]
3324        #[non_exhaustive]
3325        pub enum Schedule {
3326            /// Unspecified.
3327            Unspecified,
3328            /// Immediately after receiving the request.
3329            Immediately,
3330            /// If set, the enum was initialized with an unknown value.
3331            ///
3332            /// Applications can examine the value using [Schedule::value] or
3333            /// [Schedule::name].
3334            UnknownValue(schedule::UnknownValue),
3335        }
3336
3337        #[doc(hidden)]
3338        pub mod schedule {
3339            #[allow(unused_imports)]
3340            use super::*;
3341            #[derive(Clone, Debug, PartialEq)]
3342            pub struct UnknownValue(pub(crate) wkt::internal::UnknownEnumValue);
3343        }
3344
3345        impl Schedule {
3346            /// Gets the enum value.
3347            ///
3348            /// Returns `None` if the enum contains an unknown value deserialized from
3349            /// the string representation of enums.
3350            pub fn value(&self) -> std::option::Option<i32> {
3351                match self {
3352                    Self::Unspecified => std::option::Option::Some(0),
3353                    Self::Immediately => std::option::Option::Some(1),
3354                    Self::UnknownValue(u) => u.0.value(),
3355                }
3356            }
3357
3358            /// Gets the enum value as a string.
3359            ///
3360            /// Returns `None` if the enum contains an unknown value deserialized from
3361            /// the integer representation of enums.
3362            pub fn name(&self) -> std::option::Option<&str> {
3363                match self {
3364                    Self::Unspecified => std::option::Option::Some("SCHEDULE_UNSPECIFIED"),
3365                    Self::Immediately => std::option::Option::Some("IMMEDIATELY"),
3366                    Self::UnknownValue(u) => u.0.name(),
3367                }
3368            }
3369        }
3370
3371        impl std::default::Default for Schedule {
3372            fn default() -> Self {
3373                use std::convert::From;
3374                Self::from(0)
3375            }
3376        }
3377
3378        impl std::fmt::Display for Schedule {
3379            fn fmt(
3380                &self,
3381                f: &mut std::fmt::Formatter<'_>,
3382            ) -> std::result::Result<(), std::fmt::Error> {
3383                wkt::internal::display_enum(f, self.name(), self.value())
3384            }
3385        }
3386
3387        impl std::convert::From<i32> for Schedule {
3388            fn from(value: i32) -> Self {
3389                match value {
3390                    0 => Self::Unspecified,
3391                    1 => Self::Immediately,
3392                    _ => Self::UnknownValue(schedule::UnknownValue(
3393                        wkt::internal::UnknownEnumValue::Integer(value),
3394                    )),
3395                }
3396            }
3397        }
3398
3399        impl std::convert::From<&str> for Schedule {
3400            fn from(value: &str) -> Self {
3401                use std::string::ToString;
3402                match value {
3403                    "SCHEDULE_UNSPECIFIED" => Self::Unspecified,
3404                    "IMMEDIATELY" => Self::Immediately,
3405                    _ => Self::UnknownValue(schedule::UnknownValue(
3406                        wkt::internal::UnknownEnumValue::String(value.to_string()),
3407                    )),
3408                }
3409            }
3410        }
3411
3412        impl serde::ser::Serialize for Schedule {
3413            fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3414            where
3415                S: serde::Serializer,
3416            {
3417                match self {
3418                    Self::Unspecified => serializer.serialize_i32(0),
3419                    Self::Immediately => serializer.serialize_i32(1),
3420                    Self::UnknownValue(u) => u.0.serialize(serializer),
3421                }
3422            }
3423        }
3424
3425        impl<'de> serde::de::Deserialize<'de> for Schedule {
3426            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3427            where
3428                D: serde::Deserializer<'de>,
3429            {
3430                deserializer.deserialize_any(wkt::internal::EnumVisitor::<Schedule>::new(
3431                    ".google.cloud.edgecontainer.v1.Cluster.MaintenanceEvent.Schedule",
3432                ))
3433            }
3434        }
3435
3436        /// Indicates the maintenance event state.
3437        ///
3438        /// # Working with unknown values
3439        ///
3440        /// This enum is defined as `#[non_exhaustive]` because Google Cloud may add
3441        /// additional enum variants at any time. Adding new variants is not considered
3442        /// a breaking change. Applications should write their code in anticipation of:
3443        ///
3444        /// - New values appearing in future releases of the client library, **and**
3445        /// - New values received dynamically, without application changes.
3446        ///
3447        /// Please consult the [Working with enums] section in the user guide for some
3448        /// guidelines.
3449        ///
3450        /// [Working with enums]: https://google-cloud-rust.github.io/working_with_enums.html
3451        #[derive(Clone, Debug, PartialEq)]
3452        #[non_exhaustive]
3453        pub enum State {
3454            /// Unspecified.
3455            Unspecified,
3456            /// The maintenance event is ongoing. The cluster might be unusable.
3457            Reconciling,
3458            /// The maintenance event succeeded.
3459            Succeeded,
3460            /// The maintenance event failed.
3461            Failed,
3462            /// If set, the enum was initialized with an unknown value.
3463            ///
3464            /// Applications can examine the value using [State::value] or
3465            /// [State::name].
3466            UnknownValue(state::UnknownValue),
3467        }
3468
3469        #[doc(hidden)]
3470        pub mod state {
3471            #[allow(unused_imports)]
3472            use super::*;
3473            #[derive(Clone, Debug, PartialEq)]
3474            pub struct UnknownValue(pub(crate) wkt::internal::UnknownEnumValue);
3475        }
3476
3477        impl State {
3478            /// Gets the enum value.
3479            ///
3480            /// Returns `None` if the enum contains an unknown value deserialized from
3481            /// the string representation of enums.
3482            pub fn value(&self) -> std::option::Option<i32> {
3483                match self {
3484                    Self::Unspecified => std::option::Option::Some(0),
3485                    Self::Reconciling => std::option::Option::Some(1),
3486                    Self::Succeeded => std::option::Option::Some(2),
3487                    Self::Failed => std::option::Option::Some(3),
3488                    Self::UnknownValue(u) => u.0.value(),
3489                }
3490            }
3491
3492            /// Gets the enum value as a string.
3493            ///
3494            /// Returns `None` if the enum contains an unknown value deserialized from
3495            /// the integer representation of enums.
3496            pub fn name(&self) -> std::option::Option<&str> {
3497                match self {
3498                    Self::Unspecified => std::option::Option::Some("STATE_UNSPECIFIED"),
3499                    Self::Reconciling => std::option::Option::Some("RECONCILING"),
3500                    Self::Succeeded => std::option::Option::Some("SUCCEEDED"),
3501                    Self::Failed => std::option::Option::Some("FAILED"),
3502                    Self::UnknownValue(u) => u.0.name(),
3503                }
3504            }
3505        }
3506
3507        impl std::default::Default for State {
3508            fn default() -> Self {
3509                use std::convert::From;
3510                Self::from(0)
3511            }
3512        }
3513
3514        impl std::fmt::Display for State {
3515            fn fmt(
3516                &self,
3517                f: &mut std::fmt::Formatter<'_>,
3518            ) -> std::result::Result<(), std::fmt::Error> {
3519                wkt::internal::display_enum(f, self.name(), self.value())
3520            }
3521        }
3522
3523        impl std::convert::From<i32> for State {
3524            fn from(value: i32) -> Self {
3525                match value {
3526                    0 => Self::Unspecified,
3527                    1 => Self::Reconciling,
3528                    2 => Self::Succeeded,
3529                    3 => Self::Failed,
3530                    _ => Self::UnknownValue(state::UnknownValue(
3531                        wkt::internal::UnknownEnumValue::Integer(value),
3532                    )),
3533                }
3534            }
3535        }
3536
3537        impl std::convert::From<&str> for State {
3538            fn from(value: &str) -> Self {
3539                use std::string::ToString;
3540                match value {
3541                    "STATE_UNSPECIFIED" => Self::Unspecified,
3542                    "RECONCILING" => Self::Reconciling,
3543                    "SUCCEEDED" => Self::Succeeded,
3544                    "FAILED" => Self::Failed,
3545                    _ => Self::UnknownValue(state::UnknownValue(
3546                        wkt::internal::UnknownEnumValue::String(value.to_string()),
3547                    )),
3548                }
3549            }
3550        }
3551
3552        impl serde::ser::Serialize for State {
3553            fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3554            where
3555                S: serde::Serializer,
3556            {
3557                match self {
3558                    Self::Unspecified => serializer.serialize_i32(0),
3559                    Self::Reconciling => serializer.serialize_i32(1),
3560                    Self::Succeeded => serializer.serialize_i32(2),
3561                    Self::Failed => serializer.serialize_i32(3),
3562                    Self::UnknownValue(u) => u.0.serialize(serializer),
3563                }
3564            }
3565        }
3566
3567        impl<'de> serde::de::Deserialize<'de> for State {
3568            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3569            where
3570                D: serde::Deserializer<'de>,
3571            {
3572                deserializer.deserialize_any(wkt::internal::EnumVisitor::<State>::new(
3573                    ".google.cloud.edgecontainer.v1.Cluster.MaintenanceEvent.State",
3574                ))
3575            }
3576        }
3577    }
3578
3579    /// Configuration of the cluster survivability, e.g., for the case when network
3580    /// connectivity is lost.
3581    #[derive(Clone, Default, PartialEq)]
3582    #[non_exhaustive]
3583    pub struct SurvivabilityConfig {
3584        /// Optional. Time period that allows the cluster nodes to be rebooted and
3585        /// become functional without network connectivity to Google. The default 0
3586        /// means not allowed. The maximum is 7 days.
3587        pub offline_reboot_ttl: std::option::Option<wkt::Duration>,
3588
3589        _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
3590    }
3591
3592    impl SurvivabilityConfig {
3593        pub fn new() -> Self {
3594            std::default::Default::default()
3595        }
3596
3597        /// Sets the value of [offline_reboot_ttl][crate::model::cluster::SurvivabilityConfig::offline_reboot_ttl].
3598        pub fn set_offline_reboot_ttl<T>(mut self, v: T) -> Self
3599        where
3600            T: std::convert::Into<wkt::Duration>,
3601        {
3602            self.offline_reboot_ttl = std::option::Option::Some(v.into());
3603            self
3604        }
3605
3606        /// Sets or clears the value of [offline_reboot_ttl][crate::model::cluster::SurvivabilityConfig::offline_reboot_ttl].
3607        pub fn set_or_clear_offline_reboot_ttl<T>(mut self, v: std::option::Option<T>) -> Self
3608        where
3609            T: std::convert::Into<wkt::Duration>,
3610        {
3611            self.offline_reboot_ttl = v.map(|x| x.into());
3612            self
3613        }
3614    }
3615
3616    impl wkt::message::Message for SurvivabilityConfig {
3617        fn typename() -> &'static str {
3618            "type.googleapis.com/google.cloud.edgecontainer.v1.Cluster.SurvivabilityConfig"
3619        }
3620    }
3621
3622    #[doc(hidden)]
3623    impl<'de> serde::de::Deserialize<'de> for SurvivabilityConfig {
3624        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3625        where
3626            D: serde::Deserializer<'de>,
3627        {
3628            #[allow(non_camel_case_types)]
3629            #[doc(hidden)]
3630            #[derive(PartialEq, Eq, Hash)]
3631            enum __FieldTag {
3632                __offline_reboot_ttl,
3633                Unknown(std::string::String),
3634            }
3635            impl<'de> serde::de::Deserialize<'de> for __FieldTag {
3636                fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3637                where
3638                    D: serde::Deserializer<'de>,
3639                {
3640                    struct Visitor;
3641                    impl<'de> serde::de::Visitor<'de> for Visitor {
3642                        type Value = __FieldTag;
3643                        fn expecting(
3644                            &self,
3645                            formatter: &mut std::fmt::Formatter,
3646                        ) -> std::fmt::Result {
3647                            formatter.write_str("a field name for SurvivabilityConfig")
3648                        }
3649                        fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
3650                        where
3651                            E: serde::de::Error,
3652                        {
3653                            use std::result::Result::Ok;
3654                            use std::string::ToString;
3655                            match value {
3656                                "offlineRebootTtl" => Ok(__FieldTag::__offline_reboot_ttl),
3657                                "offline_reboot_ttl" => Ok(__FieldTag::__offline_reboot_ttl),
3658                                _ => Ok(__FieldTag::Unknown(value.to_string())),
3659                            }
3660                        }
3661                    }
3662                    deserializer.deserialize_identifier(Visitor)
3663                }
3664            }
3665            struct Visitor;
3666            impl<'de> serde::de::Visitor<'de> for Visitor {
3667                type Value = SurvivabilityConfig;
3668                fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
3669                    formatter.write_str("struct SurvivabilityConfig")
3670                }
3671                fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
3672                where
3673                    A: serde::de::MapAccess<'de>,
3674                {
3675                    #[allow(unused_imports)]
3676                    use serde::de::Error;
3677                    use std::option::Option::Some;
3678                    let mut fields = std::collections::HashSet::new();
3679                    let mut result = Self::Value::new();
3680                    while let Some(tag) = map.next_key::<__FieldTag>()? {
3681                        #[allow(clippy::match_single_binding)]
3682                        match tag {
3683                            __FieldTag::__offline_reboot_ttl => {
3684                                if !fields.insert(__FieldTag::__offline_reboot_ttl) {
3685                                    return std::result::Result::Err(A::Error::duplicate_field(
3686                                        "multiple values for offline_reboot_ttl",
3687                                    ));
3688                                }
3689                                result.offline_reboot_ttl =
3690                                    map.next_value::<std::option::Option<wkt::Duration>>()?;
3691                            }
3692                            __FieldTag::Unknown(key) => {
3693                                let value = map.next_value::<serde_json::Value>()?;
3694                                result._unknown_fields.insert(key, value);
3695                            }
3696                        }
3697                    }
3698                    std::result::Result::Ok(result)
3699                }
3700            }
3701            deserializer.deserialize_any(Visitor)
3702        }
3703    }
3704
3705    #[doc(hidden)]
3706    impl serde::ser::Serialize for SurvivabilityConfig {
3707        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3708        where
3709            S: serde::ser::Serializer,
3710        {
3711            use serde::ser::SerializeMap;
3712            #[allow(unused_imports)]
3713            use std::option::Option::Some;
3714            let mut state = serializer.serialize_map(std::option::Option::None)?;
3715            if self.offline_reboot_ttl.is_some() {
3716                state.serialize_entry("offlineRebootTtl", &self.offline_reboot_ttl)?;
3717            }
3718            if !self._unknown_fields.is_empty() {
3719                for (key, value) in self._unknown_fields.iter() {
3720                    state.serialize_entry(key, &value)?;
3721                }
3722            }
3723            state.end()
3724        }
3725    }
3726
3727    impl std::fmt::Debug for SurvivabilityConfig {
3728        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3729            let mut debug_struct = f.debug_struct("SurvivabilityConfig");
3730            debug_struct.field("offline_reboot_ttl", &self.offline_reboot_ttl);
3731            if !self._unknown_fields.is_empty() {
3732                debug_struct.field("_unknown_fields", &self._unknown_fields);
3733            }
3734            debug_struct.finish()
3735        }
3736    }
3737
3738    /// ConnectionState holds the current connection state from the cluster to
3739    /// Google.
3740    #[derive(Clone, Default, PartialEq)]
3741    #[non_exhaustive]
3742    pub struct ConnectionState {
3743        /// Output only. The current connection state.
3744        pub state: crate::model::cluster::connection_state::State,
3745
3746        /// Output only. The time when the connection state was last changed.
3747        pub update_time: std::option::Option<wkt::Timestamp>,
3748
3749        _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
3750    }
3751
3752    impl ConnectionState {
3753        pub fn new() -> Self {
3754            std::default::Default::default()
3755        }
3756
3757        /// Sets the value of [state][crate::model::cluster::ConnectionState::state].
3758        pub fn set_state<T: std::convert::Into<crate::model::cluster::connection_state::State>>(
3759            mut self,
3760            v: T,
3761        ) -> Self {
3762            self.state = v.into();
3763            self
3764        }
3765
3766        /// Sets the value of [update_time][crate::model::cluster::ConnectionState::update_time].
3767        pub fn set_update_time<T>(mut self, v: T) -> Self
3768        where
3769            T: std::convert::Into<wkt::Timestamp>,
3770        {
3771            self.update_time = std::option::Option::Some(v.into());
3772            self
3773        }
3774
3775        /// Sets or clears the value of [update_time][crate::model::cluster::ConnectionState::update_time].
3776        pub fn set_or_clear_update_time<T>(mut self, v: std::option::Option<T>) -> Self
3777        where
3778            T: std::convert::Into<wkt::Timestamp>,
3779        {
3780            self.update_time = v.map(|x| x.into());
3781            self
3782        }
3783    }
3784
3785    impl wkt::message::Message for ConnectionState {
3786        fn typename() -> &'static str {
3787            "type.googleapis.com/google.cloud.edgecontainer.v1.Cluster.ConnectionState"
3788        }
3789    }
3790
3791    #[doc(hidden)]
3792    impl<'de> serde::de::Deserialize<'de> for ConnectionState {
3793        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3794        where
3795            D: serde::Deserializer<'de>,
3796        {
3797            #[allow(non_camel_case_types)]
3798            #[doc(hidden)]
3799            #[derive(PartialEq, Eq, Hash)]
3800            enum __FieldTag {
3801                __state,
3802                __update_time,
3803                Unknown(std::string::String),
3804            }
3805            impl<'de> serde::de::Deserialize<'de> for __FieldTag {
3806                fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3807                where
3808                    D: serde::Deserializer<'de>,
3809                {
3810                    struct Visitor;
3811                    impl<'de> serde::de::Visitor<'de> for Visitor {
3812                        type Value = __FieldTag;
3813                        fn expecting(
3814                            &self,
3815                            formatter: &mut std::fmt::Formatter,
3816                        ) -> std::fmt::Result {
3817                            formatter.write_str("a field name for ConnectionState")
3818                        }
3819                        fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
3820                        where
3821                            E: serde::de::Error,
3822                        {
3823                            use std::result::Result::Ok;
3824                            use std::string::ToString;
3825                            match value {
3826                                "state" => Ok(__FieldTag::__state),
3827                                "updateTime" => Ok(__FieldTag::__update_time),
3828                                "update_time" => Ok(__FieldTag::__update_time),
3829                                _ => Ok(__FieldTag::Unknown(value.to_string())),
3830                            }
3831                        }
3832                    }
3833                    deserializer.deserialize_identifier(Visitor)
3834                }
3835            }
3836            struct Visitor;
3837            impl<'de> serde::de::Visitor<'de> for Visitor {
3838                type Value = ConnectionState;
3839                fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
3840                    formatter.write_str("struct ConnectionState")
3841                }
3842                fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
3843                where
3844                    A: serde::de::MapAccess<'de>,
3845                {
3846                    #[allow(unused_imports)]
3847                    use serde::de::Error;
3848                    use std::option::Option::Some;
3849                    let mut fields = std::collections::HashSet::new();
3850                    let mut result = Self::Value::new();
3851                    while let Some(tag) = map.next_key::<__FieldTag>()? {
3852                        #[allow(clippy::match_single_binding)]
3853                        match tag {
3854                            __FieldTag::__state => {
3855                                if !fields.insert(__FieldTag::__state) {
3856                                    return std::result::Result::Err(A::Error::duplicate_field(
3857                                        "multiple values for state",
3858                                    ));
3859                                }
3860                                result.state = map
3861                                    .next_value::<std::option::Option<
3862                                        crate::model::cluster::connection_state::State,
3863                                    >>()?
3864                                    .unwrap_or_default();
3865                            }
3866                            __FieldTag::__update_time => {
3867                                if !fields.insert(__FieldTag::__update_time) {
3868                                    return std::result::Result::Err(A::Error::duplicate_field(
3869                                        "multiple values for update_time",
3870                                    ));
3871                                }
3872                                result.update_time =
3873                                    map.next_value::<std::option::Option<wkt::Timestamp>>()?;
3874                            }
3875                            __FieldTag::Unknown(key) => {
3876                                let value = map.next_value::<serde_json::Value>()?;
3877                                result._unknown_fields.insert(key, value);
3878                            }
3879                        }
3880                    }
3881                    std::result::Result::Ok(result)
3882                }
3883            }
3884            deserializer.deserialize_any(Visitor)
3885        }
3886    }
3887
3888    #[doc(hidden)]
3889    impl serde::ser::Serialize for ConnectionState {
3890        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3891        where
3892            S: serde::ser::Serializer,
3893        {
3894            use serde::ser::SerializeMap;
3895            #[allow(unused_imports)]
3896            use std::option::Option::Some;
3897            let mut state = serializer.serialize_map(std::option::Option::None)?;
3898            if !wkt::internal::is_default(&self.state) {
3899                state.serialize_entry("state", &self.state)?;
3900            }
3901            if self.update_time.is_some() {
3902                state.serialize_entry("updateTime", &self.update_time)?;
3903            }
3904            if !self._unknown_fields.is_empty() {
3905                for (key, value) in self._unknown_fields.iter() {
3906                    state.serialize_entry(key, &value)?;
3907                }
3908            }
3909            state.end()
3910        }
3911    }
3912
3913    impl std::fmt::Debug for ConnectionState {
3914        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3915            let mut debug_struct = f.debug_struct("ConnectionState");
3916            debug_struct.field("state", &self.state);
3917            debug_struct.field("update_time", &self.update_time);
3918            if !self._unknown_fields.is_empty() {
3919                debug_struct.field("_unknown_fields", &self._unknown_fields);
3920            }
3921            debug_struct.finish()
3922        }
3923    }
3924
3925    /// Defines additional types related to [ConnectionState].
3926    pub mod connection_state {
3927        #[allow(unused_imports)]
3928        use super::*;
3929
3930        /// The connection state.
3931        ///
3932        /// # Working with unknown values
3933        ///
3934        /// This enum is defined as `#[non_exhaustive]` because Google Cloud may add
3935        /// additional enum variants at any time. Adding new variants is not considered
3936        /// a breaking change. Applications should write their code in anticipation of:
3937        ///
3938        /// - New values appearing in future releases of the client library, **and**
3939        /// - New values received dynamically, without application changes.
3940        ///
3941        /// Please consult the [Working with enums] section in the user guide for some
3942        /// guidelines.
3943        ///
3944        /// [Working with enums]: https://google-cloud-rust.github.io/working_with_enums.html
3945        #[derive(Clone, Debug, PartialEq)]
3946        #[non_exhaustive]
3947        pub enum State {
3948            /// Unknown connection state.
3949            Unspecified,
3950            /// This cluster is currently disconnected from Google.
3951            Disconnected,
3952            /// This cluster is currently connected to Google.
3953            Connected,
3954            /// This cluster is currently connected to Google, but may have recently
3955            /// reconnected after a disconnection. It is still syncing back.
3956            ConnectedAndSyncing,
3957            /// If set, the enum was initialized with an unknown value.
3958            ///
3959            /// Applications can examine the value using [State::value] or
3960            /// [State::name].
3961            UnknownValue(state::UnknownValue),
3962        }
3963
3964        #[doc(hidden)]
3965        pub mod state {
3966            #[allow(unused_imports)]
3967            use super::*;
3968            #[derive(Clone, Debug, PartialEq)]
3969            pub struct UnknownValue(pub(crate) wkt::internal::UnknownEnumValue);
3970        }
3971
3972        impl State {
3973            /// Gets the enum value.
3974            ///
3975            /// Returns `None` if the enum contains an unknown value deserialized from
3976            /// the string representation of enums.
3977            pub fn value(&self) -> std::option::Option<i32> {
3978                match self {
3979                    Self::Unspecified => std::option::Option::Some(0),
3980                    Self::Disconnected => std::option::Option::Some(1),
3981                    Self::Connected => std::option::Option::Some(2),
3982                    Self::ConnectedAndSyncing => std::option::Option::Some(3),
3983                    Self::UnknownValue(u) => u.0.value(),
3984                }
3985            }
3986
3987            /// Gets the enum value as a string.
3988            ///
3989            /// Returns `None` if the enum contains an unknown value deserialized from
3990            /// the integer representation of enums.
3991            pub fn name(&self) -> std::option::Option<&str> {
3992                match self {
3993                    Self::Unspecified => std::option::Option::Some("STATE_UNSPECIFIED"),
3994                    Self::Disconnected => std::option::Option::Some("DISCONNECTED"),
3995                    Self::Connected => std::option::Option::Some("CONNECTED"),
3996                    Self::ConnectedAndSyncing => std::option::Option::Some("CONNECTED_AND_SYNCING"),
3997                    Self::UnknownValue(u) => u.0.name(),
3998                }
3999            }
4000        }
4001
4002        impl std::default::Default for State {
4003            fn default() -> Self {
4004                use std::convert::From;
4005                Self::from(0)
4006            }
4007        }
4008
4009        impl std::fmt::Display for State {
4010            fn fmt(
4011                &self,
4012                f: &mut std::fmt::Formatter<'_>,
4013            ) -> std::result::Result<(), std::fmt::Error> {
4014                wkt::internal::display_enum(f, self.name(), self.value())
4015            }
4016        }
4017
4018        impl std::convert::From<i32> for State {
4019            fn from(value: i32) -> Self {
4020                match value {
4021                    0 => Self::Unspecified,
4022                    1 => Self::Disconnected,
4023                    2 => Self::Connected,
4024                    3 => Self::ConnectedAndSyncing,
4025                    _ => Self::UnknownValue(state::UnknownValue(
4026                        wkt::internal::UnknownEnumValue::Integer(value),
4027                    )),
4028                }
4029            }
4030        }
4031
4032        impl std::convert::From<&str> for State {
4033            fn from(value: &str) -> Self {
4034                use std::string::ToString;
4035                match value {
4036                    "STATE_UNSPECIFIED" => Self::Unspecified,
4037                    "DISCONNECTED" => Self::Disconnected,
4038                    "CONNECTED" => Self::Connected,
4039                    "CONNECTED_AND_SYNCING" => Self::ConnectedAndSyncing,
4040                    _ => Self::UnknownValue(state::UnknownValue(
4041                        wkt::internal::UnknownEnumValue::String(value.to_string()),
4042                    )),
4043                }
4044            }
4045        }
4046
4047        impl serde::ser::Serialize for State {
4048            fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4049            where
4050                S: serde::Serializer,
4051            {
4052                match self {
4053                    Self::Unspecified => serializer.serialize_i32(0),
4054                    Self::Disconnected => serializer.serialize_i32(1),
4055                    Self::Connected => serializer.serialize_i32(2),
4056                    Self::ConnectedAndSyncing => serializer.serialize_i32(3),
4057                    Self::UnknownValue(u) => u.0.serialize(serializer),
4058                }
4059            }
4060        }
4061
4062        impl<'de> serde::de::Deserialize<'de> for State {
4063            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4064            where
4065                D: serde::Deserializer<'de>,
4066            {
4067                deserializer.deserialize_any(wkt::internal::EnumVisitor::<State>::new(
4068                    ".google.cloud.edgecontainer.v1.Cluster.ConnectionState.State",
4069                ))
4070            }
4071        }
4072    }
4073
4074    /// Indicates the status of the cluster.
4075    ///
4076    /// # Working with unknown values
4077    ///
4078    /// This enum is defined as `#[non_exhaustive]` because Google Cloud may add
4079    /// additional enum variants at any time. Adding new variants is not considered
4080    /// a breaking change. Applications should write their code in anticipation of:
4081    ///
4082    /// - New values appearing in future releases of the client library, **and**
4083    /// - New values received dynamically, without application changes.
4084    ///
4085    /// Please consult the [Working with enums] section in the user guide for some
4086    /// guidelines.
4087    ///
4088    /// [Working with enums]: https://google-cloud-rust.github.io/working_with_enums.html
4089    #[derive(Clone, Debug, PartialEq)]
4090    #[non_exhaustive]
4091    pub enum Status {
4092        /// Status unknown.
4093        Unspecified,
4094        /// The cluster is being created.
4095        Provisioning,
4096        /// The cluster is created and fully usable.
4097        Running,
4098        /// The cluster is being deleted.
4099        Deleting,
4100        /// The status indicates that some errors occurred while reconciling/deleting
4101        /// the cluster.
4102        Error,
4103        /// The cluster is undergoing some work such as version upgrades, etc.
4104        Reconciling,
4105        /// If set, the enum was initialized with an unknown value.
4106        ///
4107        /// Applications can examine the value using [Status::value] or
4108        /// [Status::name].
4109        UnknownValue(status::UnknownValue),
4110    }
4111
4112    #[doc(hidden)]
4113    pub mod status {
4114        #[allow(unused_imports)]
4115        use super::*;
4116        #[derive(Clone, Debug, PartialEq)]
4117        pub struct UnknownValue(pub(crate) wkt::internal::UnknownEnumValue);
4118    }
4119
4120    impl Status {
4121        /// Gets the enum value.
4122        ///
4123        /// Returns `None` if the enum contains an unknown value deserialized from
4124        /// the string representation of enums.
4125        pub fn value(&self) -> std::option::Option<i32> {
4126            match self {
4127                Self::Unspecified => std::option::Option::Some(0),
4128                Self::Provisioning => std::option::Option::Some(1),
4129                Self::Running => std::option::Option::Some(2),
4130                Self::Deleting => std::option::Option::Some(3),
4131                Self::Error => std::option::Option::Some(4),
4132                Self::Reconciling => std::option::Option::Some(5),
4133                Self::UnknownValue(u) => u.0.value(),
4134            }
4135        }
4136
4137        /// Gets the enum value as a string.
4138        ///
4139        /// Returns `None` if the enum contains an unknown value deserialized from
4140        /// the integer representation of enums.
4141        pub fn name(&self) -> std::option::Option<&str> {
4142            match self {
4143                Self::Unspecified => std::option::Option::Some("STATUS_UNSPECIFIED"),
4144                Self::Provisioning => std::option::Option::Some("PROVISIONING"),
4145                Self::Running => std::option::Option::Some("RUNNING"),
4146                Self::Deleting => std::option::Option::Some("DELETING"),
4147                Self::Error => std::option::Option::Some("ERROR"),
4148                Self::Reconciling => std::option::Option::Some("RECONCILING"),
4149                Self::UnknownValue(u) => u.0.name(),
4150            }
4151        }
4152    }
4153
4154    impl std::default::Default for Status {
4155        fn default() -> Self {
4156            use std::convert::From;
4157            Self::from(0)
4158        }
4159    }
4160
4161    impl std::fmt::Display for Status {
4162        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
4163            wkt::internal::display_enum(f, self.name(), self.value())
4164        }
4165    }
4166
4167    impl std::convert::From<i32> for Status {
4168        fn from(value: i32) -> Self {
4169            match value {
4170                0 => Self::Unspecified,
4171                1 => Self::Provisioning,
4172                2 => Self::Running,
4173                3 => Self::Deleting,
4174                4 => Self::Error,
4175                5 => Self::Reconciling,
4176                _ => Self::UnknownValue(status::UnknownValue(
4177                    wkt::internal::UnknownEnumValue::Integer(value),
4178                )),
4179            }
4180        }
4181    }
4182
4183    impl std::convert::From<&str> for Status {
4184        fn from(value: &str) -> Self {
4185            use std::string::ToString;
4186            match value {
4187                "STATUS_UNSPECIFIED" => Self::Unspecified,
4188                "PROVISIONING" => Self::Provisioning,
4189                "RUNNING" => Self::Running,
4190                "DELETING" => Self::Deleting,
4191                "ERROR" => Self::Error,
4192                "RECONCILING" => Self::Reconciling,
4193                _ => Self::UnknownValue(status::UnknownValue(
4194                    wkt::internal::UnknownEnumValue::String(value.to_string()),
4195                )),
4196            }
4197        }
4198    }
4199
4200    impl serde::ser::Serialize for Status {
4201        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4202        where
4203            S: serde::Serializer,
4204        {
4205            match self {
4206                Self::Unspecified => serializer.serialize_i32(0),
4207                Self::Provisioning => serializer.serialize_i32(1),
4208                Self::Running => serializer.serialize_i32(2),
4209                Self::Deleting => serializer.serialize_i32(3),
4210                Self::Error => serializer.serialize_i32(4),
4211                Self::Reconciling => serializer.serialize_i32(5),
4212                Self::UnknownValue(u) => u.0.serialize(serializer),
4213            }
4214        }
4215    }
4216
4217    impl<'de> serde::de::Deserialize<'de> for Status {
4218        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4219        where
4220            D: serde::Deserializer<'de>,
4221        {
4222            deserializer.deserialize_any(wkt::internal::EnumVisitor::<Status>::new(
4223                ".google.cloud.edgecontainer.v1.Cluster.Status",
4224            ))
4225        }
4226    }
4227
4228    /// The release channel a cluster is subscribed to.
4229    ///
4230    /// # Working with unknown values
4231    ///
4232    /// This enum is defined as `#[non_exhaustive]` because Google Cloud may add
4233    /// additional enum variants at any time. Adding new variants is not considered
4234    /// a breaking change. Applications should write their code in anticipation of:
4235    ///
4236    /// - New values appearing in future releases of the client library, **and**
4237    /// - New values received dynamically, without application changes.
4238    ///
4239    /// Please consult the [Working with enums] section in the user guide for some
4240    /// guidelines.
4241    ///
4242    /// [Working with enums]: https://google-cloud-rust.github.io/working_with_enums.html
4243    #[derive(Clone, Debug, PartialEq)]
4244    #[non_exhaustive]
4245    pub enum ReleaseChannel {
4246        /// Unspecified release channel. This will default to the REGULAR channel.
4247        Unspecified,
4248        /// No release channel.
4249        None,
4250        /// Regular release channel.
4251        Regular,
4252        /// If set, the enum was initialized with an unknown value.
4253        ///
4254        /// Applications can examine the value using [ReleaseChannel::value] or
4255        /// [ReleaseChannel::name].
4256        UnknownValue(release_channel::UnknownValue),
4257    }
4258
4259    #[doc(hidden)]
4260    pub mod release_channel {
4261        #[allow(unused_imports)]
4262        use super::*;
4263        #[derive(Clone, Debug, PartialEq)]
4264        pub struct UnknownValue(pub(crate) wkt::internal::UnknownEnumValue);
4265    }
4266
4267    impl ReleaseChannel {
4268        /// Gets the enum value.
4269        ///
4270        /// Returns `None` if the enum contains an unknown value deserialized from
4271        /// the string representation of enums.
4272        pub fn value(&self) -> std::option::Option<i32> {
4273            match self {
4274                Self::Unspecified => std::option::Option::Some(0),
4275                Self::None => std::option::Option::Some(1),
4276                Self::Regular => std::option::Option::Some(2),
4277                Self::UnknownValue(u) => u.0.value(),
4278            }
4279        }
4280
4281        /// Gets the enum value as a string.
4282        ///
4283        /// Returns `None` if the enum contains an unknown value deserialized from
4284        /// the integer representation of enums.
4285        pub fn name(&self) -> std::option::Option<&str> {
4286            match self {
4287                Self::Unspecified => std::option::Option::Some("RELEASE_CHANNEL_UNSPECIFIED"),
4288                Self::None => std::option::Option::Some("NONE"),
4289                Self::Regular => std::option::Option::Some("REGULAR"),
4290                Self::UnknownValue(u) => u.0.name(),
4291            }
4292        }
4293    }
4294
4295    impl std::default::Default for ReleaseChannel {
4296        fn default() -> Self {
4297            use std::convert::From;
4298            Self::from(0)
4299        }
4300    }
4301
4302    impl std::fmt::Display for ReleaseChannel {
4303        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
4304            wkt::internal::display_enum(f, self.name(), self.value())
4305        }
4306    }
4307
4308    impl std::convert::From<i32> for ReleaseChannel {
4309        fn from(value: i32) -> Self {
4310            match value {
4311                0 => Self::Unspecified,
4312                1 => Self::None,
4313                2 => Self::Regular,
4314                _ => Self::UnknownValue(release_channel::UnknownValue(
4315                    wkt::internal::UnknownEnumValue::Integer(value),
4316                )),
4317            }
4318        }
4319    }
4320
4321    impl std::convert::From<&str> for ReleaseChannel {
4322        fn from(value: &str) -> Self {
4323            use std::string::ToString;
4324            match value {
4325                "RELEASE_CHANNEL_UNSPECIFIED" => Self::Unspecified,
4326                "NONE" => Self::None,
4327                "REGULAR" => Self::Regular,
4328                _ => Self::UnknownValue(release_channel::UnknownValue(
4329                    wkt::internal::UnknownEnumValue::String(value.to_string()),
4330                )),
4331            }
4332        }
4333    }
4334
4335    impl serde::ser::Serialize for ReleaseChannel {
4336        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4337        where
4338            S: serde::Serializer,
4339        {
4340            match self {
4341                Self::Unspecified => serializer.serialize_i32(0),
4342                Self::None => serializer.serialize_i32(1),
4343                Self::Regular => serializer.serialize_i32(2),
4344                Self::UnknownValue(u) => u.0.serialize(serializer),
4345            }
4346        }
4347    }
4348
4349    impl<'de> serde::de::Deserialize<'de> for ReleaseChannel {
4350        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4351        where
4352            D: serde::Deserializer<'de>,
4353        {
4354            deserializer.deserialize_any(wkt::internal::EnumVisitor::<ReleaseChannel>::new(
4355                ".google.cloud.edgecontainer.v1.Cluster.ReleaseChannel",
4356            ))
4357        }
4358    }
4359}
4360
4361/// Cluster-wide networking configuration.
4362#[derive(Clone, Default, PartialEq)]
4363#[non_exhaustive]
4364pub struct ClusterNetworking {
4365    /// Required. All pods in the cluster are assigned an RFC1918 IPv4 address from
4366    /// these blocks. Only a single block is supported. This field cannot be
4367    /// changed after creation.
4368    pub cluster_ipv4_cidr_blocks: std::vec::Vec<std::string::String>,
4369
4370    /// Required. All services in the cluster are assigned an RFC1918 IPv4 address
4371    /// from these blocks. Only a single block is supported. This field cannot be
4372    /// changed after creation.
4373    pub services_ipv4_cidr_blocks: std::vec::Vec<std::string::String>,
4374
4375    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
4376}
4377
4378impl ClusterNetworking {
4379    pub fn new() -> Self {
4380        std::default::Default::default()
4381    }
4382
4383    /// Sets the value of [cluster_ipv4_cidr_blocks][crate::model::ClusterNetworking::cluster_ipv4_cidr_blocks].
4384    pub fn set_cluster_ipv4_cidr_blocks<T, V>(mut self, v: T) -> Self
4385    where
4386        T: std::iter::IntoIterator<Item = V>,
4387        V: std::convert::Into<std::string::String>,
4388    {
4389        use std::iter::Iterator;
4390        self.cluster_ipv4_cidr_blocks = v.into_iter().map(|i| i.into()).collect();
4391        self
4392    }
4393
4394    /// Sets the value of [services_ipv4_cidr_blocks][crate::model::ClusterNetworking::services_ipv4_cidr_blocks].
4395    pub fn set_services_ipv4_cidr_blocks<T, V>(mut self, v: T) -> Self
4396    where
4397        T: std::iter::IntoIterator<Item = V>,
4398        V: std::convert::Into<std::string::String>,
4399    {
4400        use std::iter::Iterator;
4401        self.services_ipv4_cidr_blocks = v.into_iter().map(|i| i.into()).collect();
4402        self
4403    }
4404}
4405
4406impl wkt::message::Message for ClusterNetworking {
4407    fn typename() -> &'static str {
4408        "type.googleapis.com/google.cloud.edgecontainer.v1.ClusterNetworking"
4409    }
4410}
4411
4412#[doc(hidden)]
4413impl<'de> serde::de::Deserialize<'de> for ClusterNetworking {
4414    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4415    where
4416        D: serde::Deserializer<'de>,
4417    {
4418        #[allow(non_camel_case_types)]
4419        #[doc(hidden)]
4420        #[derive(PartialEq, Eq, Hash)]
4421        enum __FieldTag {
4422            __cluster_ipv4_cidr_blocks,
4423            __services_ipv4_cidr_blocks,
4424            Unknown(std::string::String),
4425        }
4426        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
4427            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4428            where
4429                D: serde::Deserializer<'de>,
4430            {
4431                struct Visitor;
4432                impl<'de> serde::de::Visitor<'de> for Visitor {
4433                    type Value = __FieldTag;
4434                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
4435                        formatter.write_str("a field name for ClusterNetworking")
4436                    }
4437                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
4438                    where
4439                        E: serde::de::Error,
4440                    {
4441                        use std::result::Result::Ok;
4442                        use std::string::ToString;
4443                        match value {
4444                            "clusterIpv4CidrBlocks" => Ok(__FieldTag::__cluster_ipv4_cidr_blocks),
4445                            "cluster_ipv4_cidr_blocks" => {
4446                                Ok(__FieldTag::__cluster_ipv4_cidr_blocks)
4447                            }
4448                            "servicesIpv4CidrBlocks" => Ok(__FieldTag::__services_ipv4_cidr_blocks),
4449                            "services_ipv4_cidr_blocks" => {
4450                                Ok(__FieldTag::__services_ipv4_cidr_blocks)
4451                            }
4452                            _ => Ok(__FieldTag::Unknown(value.to_string())),
4453                        }
4454                    }
4455                }
4456                deserializer.deserialize_identifier(Visitor)
4457            }
4458        }
4459        struct Visitor;
4460        impl<'de> serde::de::Visitor<'de> for Visitor {
4461            type Value = ClusterNetworking;
4462            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
4463                formatter.write_str("struct ClusterNetworking")
4464            }
4465            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
4466            where
4467                A: serde::de::MapAccess<'de>,
4468            {
4469                #[allow(unused_imports)]
4470                use serde::de::Error;
4471                use std::option::Option::Some;
4472                let mut fields = std::collections::HashSet::new();
4473                let mut result = Self::Value::new();
4474                while let Some(tag) = map.next_key::<__FieldTag>()? {
4475                    #[allow(clippy::match_single_binding)]
4476                    match tag {
4477                        __FieldTag::__cluster_ipv4_cidr_blocks => {
4478                            if !fields.insert(__FieldTag::__cluster_ipv4_cidr_blocks) {
4479                                return std::result::Result::Err(A::Error::duplicate_field(
4480                                    "multiple values for cluster_ipv4_cidr_blocks",
4481                                ));
4482                            }
4483                            result.cluster_ipv4_cidr_blocks = map.next_value::<std::option::Option<std::vec::Vec<std::string::String>>>()?.unwrap_or_default();
4484                        }
4485                        __FieldTag::__services_ipv4_cidr_blocks => {
4486                            if !fields.insert(__FieldTag::__services_ipv4_cidr_blocks) {
4487                                return std::result::Result::Err(A::Error::duplicate_field(
4488                                    "multiple values for services_ipv4_cidr_blocks",
4489                                ));
4490                            }
4491                            result.services_ipv4_cidr_blocks = map.next_value::<std::option::Option<std::vec::Vec<std::string::String>>>()?.unwrap_or_default();
4492                        }
4493                        __FieldTag::Unknown(key) => {
4494                            let value = map.next_value::<serde_json::Value>()?;
4495                            result._unknown_fields.insert(key, value);
4496                        }
4497                    }
4498                }
4499                std::result::Result::Ok(result)
4500            }
4501        }
4502        deserializer.deserialize_any(Visitor)
4503    }
4504}
4505
4506#[doc(hidden)]
4507impl serde::ser::Serialize for ClusterNetworking {
4508    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4509    where
4510        S: serde::ser::Serializer,
4511    {
4512        use serde::ser::SerializeMap;
4513        #[allow(unused_imports)]
4514        use std::option::Option::Some;
4515        let mut state = serializer.serialize_map(std::option::Option::None)?;
4516        if !self.cluster_ipv4_cidr_blocks.is_empty() {
4517            state.serialize_entry("clusterIpv4CidrBlocks", &self.cluster_ipv4_cidr_blocks)?;
4518        }
4519        if !self.services_ipv4_cidr_blocks.is_empty() {
4520            state.serialize_entry("servicesIpv4CidrBlocks", &self.services_ipv4_cidr_blocks)?;
4521        }
4522        if !self._unknown_fields.is_empty() {
4523            for (key, value) in self._unknown_fields.iter() {
4524                state.serialize_entry(key, &value)?;
4525            }
4526        }
4527        state.end()
4528    }
4529}
4530
4531impl std::fmt::Debug for ClusterNetworking {
4532    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4533        let mut debug_struct = f.debug_struct("ClusterNetworking");
4534        debug_struct.field("cluster_ipv4_cidr_blocks", &self.cluster_ipv4_cidr_blocks);
4535        debug_struct.field("services_ipv4_cidr_blocks", &self.services_ipv4_cidr_blocks);
4536        if !self._unknown_fields.is_empty() {
4537            debug_struct.field("_unknown_fields", &self._unknown_fields);
4538        }
4539        debug_struct.finish()
4540    }
4541}
4542
4543/// Fleet related configuration.
4544///
4545/// Fleets are a Google Cloud concept for logically organizing clusters,
4546/// letting you use and manage multi-cluster capabilities and apply
4547/// consistent policies across your systems.
4548#[derive(Clone, Default, PartialEq)]
4549#[non_exhaustive]
4550pub struct Fleet {
4551    /// Required. The name of the Fleet host project where this cluster will be
4552    /// registered.
4553    ///
4554    /// Project names are formatted as
4555    /// `projects/<project-number>`.
4556    pub project: std::string::String,
4557
4558    /// Output only. The name of the managed Hub Membership resource associated to
4559    /// this cluster.
4560    ///
4561    /// Membership names are formatted as
4562    /// `projects/<project-number>/locations/global/membership/<cluster-id>`.
4563    pub membership: std::string::String,
4564
4565    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
4566}
4567
4568impl Fleet {
4569    pub fn new() -> Self {
4570        std::default::Default::default()
4571    }
4572
4573    /// Sets the value of [project][crate::model::Fleet::project].
4574    pub fn set_project<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
4575        self.project = v.into();
4576        self
4577    }
4578
4579    /// Sets the value of [membership][crate::model::Fleet::membership].
4580    pub fn set_membership<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
4581        self.membership = v.into();
4582        self
4583    }
4584}
4585
4586impl wkt::message::Message for Fleet {
4587    fn typename() -> &'static str {
4588        "type.googleapis.com/google.cloud.edgecontainer.v1.Fleet"
4589    }
4590}
4591
4592#[doc(hidden)]
4593impl<'de> serde::de::Deserialize<'de> for Fleet {
4594    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4595    where
4596        D: serde::Deserializer<'de>,
4597    {
4598        #[allow(non_camel_case_types)]
4599        #[doc(hidden)]
4600        #[derive(PartialEq, Eq, Hash)]
4601        enum __FieldTag {
4602            __project,
4603            __membership,
4604            Unknown(std::string::String),
4605        }
4606        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
4607            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4608            where
4609                D: serde::Deserializer<'de>,
4610            {
4611                struct Visitor;
4612                impl<'de> serde::de::Visitor<'de> for Visitor {
4613                    type Value = __FieldTag;
4614                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
4615                        formatter.write_str("a field name for Fleet")
4616                    }
4617                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
4618                    where
4619                        E: serde::de::Error,
4620                    {
4621                        use std::result::Result::Ok;
4622                        use std::string::ToString;
4623                        match value {
4624                            "project" => Ok(__FieldTag::__project),
4625                            "membership" => Ok(__FieldTag::__membership),
4626                            _ => Ok(__FieldTag::Unknown(value.to_string())),
4627                        }
4628                    }
4629                }
4630                deserializer.deserialize_identifier(Visitor)
4631            }
4632        }
4633        struct Visitor;
4634        impl<'de> serde::de::Visitor<'de> for Visitor {
4635            type Value = Fleet;
4636            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
4637                formatter.write_str("struct Fleet")
4638            }
4639            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
4640            where
4641                A: serde::de::MapAccess<'de>,
4642            {
4643                #[allow(unused_imports)]
4644                use serde::de::Error;
4645                use std::option::Option::Some;
4646                let mut fields = std::collections::HashSet::new();
4647                let mut result = Self::Value::new();
4648                while let Some(tag) = map.next_key::<__FieldTag>()? {
4649                    #[allow(clippy::match_single_binding)]
4650                    match tag {
4651                        __FieldTag::__project => {
4652                            if !fields.insert(__FieldTag::__project) {
4653                                return std::result::Result::Err(A::Error::duplicate_field(
4654                                    "multiple values for project",
4655                                ));
4656                            }
4657                            result.project = map
4658                                .next_value::<std::option::Option<std::string::String>>()?
4659                                .unwrap_or_default();
4660                        }
4661                        __FieldTag::__membership => {
4662                            if !fields.insert(__FieldTag::__membership) {
4663                                return std::result::Result::Err(A::Error::duplicate_field(
4664                                    "multiple values for membership",
4665                                ));
4666                            }
4667                            result.membership = map
4668                                .next_value::<std::option::Option<std::string::String>>()?
4669                                .unwrap_or_default();
4670                        }
4671                        __FieldTag::Unknown(key) => {
4672                            let value = map.next_value::<serde_json::Value>()?;
4673                            result._unknown_fields.insert(key, value);
4674                        }
4675                    }
4676                }
4677                std::result::Result::Ok(result)
4678            }
4679        }
4680        deserializer.deserialize_any(Visitor)
4681    }
4682}
4683
4684#[doc(hidden)]
4685impl serde::ser::Serialize for Fleet {
4686    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4687    where
4688        S: serde::ser::Serializer,
4689    {
4690        use serde::ser::SerializeMap;
4691        #[allow(unused_imports)]
4692        use std::option::Option::Some;
4693        let mut state = serializer.serialize_map(std::option::Option::None)?;
4694        if !self.project.is_empty() {
4695            state.serialize_entry("project", &self.project)?;
4696        }
4697        if !self.membership.is_empty() {
4698            state.serialize_entry("membership", &self.membership)?;
4699        }
4700        if !self._unknown_fields.is_empty() {
4701            for (key, value) in self._unknown_fields.iter() {
4702                state.serialize_entry(key, &value)?;
4703            }
4704        }
4705        state.end()
4706    }
4707}
4708
4709impl std::fmt::Debug for Fleet {
4710    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4711        let mut debug_struct = f.debug_struct("Fleet");
4712        debug_struct.field("project", &self.project);
4713        debug_struct.field("membership", &self.membership);
4714        if !self._unknown_fields.is_empty() {
4715            debug_struct.field("_unknown_fields", &self._unknown_fields);
4716        }
4717        debug_struct.finish()
4718    }
4719}
4720
4721/// A user principal for an RBAC policy.
4722#[derive(Clone, Default, PartialEq)]
4723#[non_exhaustive]
4724pub struct ClusterUser {
4725    /// Required. An active Google username.
4726    pub username: std::string::String,
4727
4728    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
4729}
4730
4731impl ClusterUser {
4732    pub fn new() -> Self {
4733        std::default::Default::default()
4734    }
4735
4736    /// Sets the value of [username][crate::model::ClusterUser::username].
4737    pub fn set_username<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
4738        self.username = v.into();
4739        self
4740    }
4741}
4742
4743impl wkt::message::Message for ClusterUser {
4744    fn typename() -> &'static str {
4745        "type.googleapis.com/google.cloud.edgecontainer.v1.ClusterUser"
4746    }
4747}
4748
4749#[doc(hidden)]
4750impl<'de> serde::de::Deserialize<'de> for ClusterUser {
4751    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4752    where
4753        D: serde::Deserializer<'de>,
4754    {
4755        #[allow(non_camel_case_types)]
4756        #[doc(hidden)]
4757        #[derive(PartialEq, Eq, Hash)]
4758        enum __FieldTag {
4759            __username,
4760            Unknown(std::string::String),
4761        }
4762        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
4763            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4764            where
4765                D: serde::Deserializer<'de>,
4766            {
4767                struct Visitor;
4768                impl<'de> serde::de::Visitor<'de> for Visitor {
4769                    type Value = __FieldTag;
4770                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
4771                        formatter.write_str("a field name for ClusterUser")
4772                    }
4773                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
4774                    where
4775                        E: serde::de::Error,
4776                    {
4777                        use std::result::Result::Ok;
4778                        use std::string::ToString;
4779                        match value {
4780                            "username" => Ok(__FieldTag::__username),
4781                            _ => Ok(__FieldTag::Unknown(value.to_string())),
4782                        }
4783                    }
4784                }
4785                deserializer.deserialize_identifier(Visitor)
4786            }
4787        }
4788        struct Visitor;
4789        impl<'de> serde::de::Visitor<'de> for Visitor {
4790            type Value = ClusterUser;
4791            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
4792                formatter.write_str("struct ClusterUser")
4793            }
4794            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
4795            where
4796                A: serde::de::MapAccess<'de>,
4797            {
4798                #[allow(unused_imports)]
4799                use serde::de::Error;
4800                use std::option::Option::Some;
4801                let mut fields = std::collections::HashSet::new();
4802                let mut result = Self::Value::new();
4803                while let Some(tag) = map.next_key::<__FieldTag>()? {
4804                    #[allow(clippy::match_single_binding)]
4805                    match tag {
4806                        __FieldTag::__username => {
4807                            if !fields.insert(__FieldTag::__username) {
4808                                return std::result::Result::Err(A::Error::duplicate_field(
4809                                    "multiple values for username",
4810                                ));
4811                            }
4812                            result.username = map
4813                                .next_value::<std::option::Option<std::string::String>>()?
4814                                .unwrap_or_default();
4815                        }
4816                        __FieldTag::Unknown(key) => {
4817                            let value = map.next_value::<serde_json::Value>()?;
4818                            result._unknown_fields.insert(key, value);
4819                        }
4820                    }
4821                }
4822                std::result::Result::Ok(result)
4823            }
4824        }
4825        deserializer.deserialize_any(Visitor)
4826    }
4827}
4828
4829#[doc(hidden)]
4830impl serde::ser::Serialize for ClusterUser {
4831    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4832    where
4833        S: serde::ser::Serializer,
4834    {
4835        use serde::ser::SerializeMap;
4836        #[allow(unused_imports)]
4837        use std::option::Option::Some;
4838        let mut state = serializer.serialize_map(std::option::Option::None)?;
4839        if !self.username.is_empty() {
4840            state.serialize_entry("username", &self.username)?;
4841        }
4842        if !self._unknown_fields.is_empty() {
4843            for (key, value) in self._unknown_fields.iter() {
4844                state.serialize_entry(key, &value)?;
4845            }
4846        }
4847        state.end()
4848    }
4849}
4850
4851impl std::fmt::Debug for ClusterUser {
4852    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4853        let mut debug_struct = f.debug_struct("ClusterUser");
4854        debug_struct.field("username", &self.username);
4855        if !self._unknown_fields.is_empty() {
4856            debug_struct.field("_unknown_fields", &self._unknown_fields);
4857        }
4858        debug_struct.finish()
4859    }
4860}
4861
4862/// RBAC policy that will be applied and managed by GEC.
4863#[derive(Clone, Default, PartialEq)]
4864#[non_exhaustive]
4865pub struct Authorization {
4866    /// Required. User that will be granted the cluster-admin role on the cluster,
4867    /// providing full access to the cluster. Currently, this is a singular field,
4868    /// but will be expanded to allow multiple admins in the future.
4869    pub admin_users: std::option::Option<crate::model::ClusterUser>,
4870
4871    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
4872}
4873
4874impl Authorization {
4875    pub fn new() -> Self {
4876        std::default::Default::default()
4877    }
4878
4879    /// Sets the value of [admin_users][crate::model::Authorization::admin_users].
4880    pub fn set_admin_users<T>(mut self, v: T) -> Self
4881    where
4882        T: std::convert::Into<crate::model::ClusterUser>,
4883    {
4884        self.admin_users = std::option::Option::Some(v.into());
4885        self
4886    }
4887
4888    /// Sets or clears the value of [admin_users][crate::model::Authorization::admin_users].
4889    pub fn set_or_clear_admin_users<T>(mut self, v: std::option::Option<T>) -> Self
4890    where
4891        T: std::convert::Into<crate::model::ClusterUser>,
4892    {
4893        self.admin_users = v.map(|x| x.into());
4894        self
4895    }
4896}
4897
4898impl wkt::message::Message for Authorization {
4899    fn typename() -> &'static str {
4900        "type.googleapis.com/google.cloud.edgecontainer.v1.Authorization"
4901    }
4902}
4903
4904#[doc(hidden)]
4905impl<'de> serde::de::Deserialize<'de> for Authorization {
4906    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4907    where
4908        D: serde::Deserializer<'de>,
4909    {
4910        #[allow(non_camel_case_types)]
4911        #[doc(hidden)]
4912        #[derive(PartialEq, Eq, Hash)]
4913        enum __FieldTag {
4914            __admin_users,
4915            Unknown(std::string::String),
4916        }
4917        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
4918            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4919            where
4920                D: serde::Deserializer<'de>,
4921            {
4922                struct Visitor;
4923                impl<'de> serde::de::Visitor<'de> for Visitor {
4924                    type Value = __FieldTag;
4925                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
4926                        formatter.write_str("a field name for Authorization")
4927                    }
4928                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
4929                    where
4930                        E: serde::de::Error,
4931                    {
4932                        use std::result::Result::Ok;
4933                        use std::string::ToString;
4934                        match value {
4935                            "adminUsers" => Ok(__FieldTag::__admin_users),
4936                            "admin_users" => Ok(__FieldTag::__admin_users),
4937                            _ => Ok(__FieldTag::Unknown(value.to_string())),
4938                        }
4939                    }
4940                }
4941                deserializer.deserialize_identifier(Visitor)
4942            }
4943        }
4944        struct Visitor;
4945        impl<'de> serde::de::Visitor<'de> for Visitor {
4946            type Value = Authorization;
4947            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
4948                formatter.write_str("struct Authorization")
4949            }
4950            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
4951            where
4952                A: serde::de::MapAccess<'de>,
4953            {
4954                #[allow(unused_imports)]
4955                use serde::de::Error;
4956                use std::option::Option::Some;
4957                let mut fields = std::collections::HashSet::new();
4958                let mut result = Self::Value::new();
4959                while let Some(tag) = map.next_key::<__FieldTag>()? {
4960                    #[allow(clippy::match_single_binding)]
4961                    match tag {
4962                        __FieldTag::__admin_users => {
4963                            if !fields.insert(__FieldTag::__admin_users) {
4964                                return std::result::Result::Err(A::Error::duplicate_field(
4965                                    "multiple values for admin_users",
4966                                ));
4967                            }
4968                            result.admin_users =
4969                                map.next_value::<std::option::Option<crate::model::ClusterUser>>()?;
4970                        }
4971                        __FieldTag::Unknown(key) => {
4972                            let value = map.next_value::<serde_json::Value>()?;
4973                            result._unknown_fields.insert(key, value);
4974                        }
4975                    }
4976                }
4977                std::result::Result::Ok(result)
4978            }
4979        }
4980        deserializer.deserialize_any(Visitor)
4981    }
4982}
4983
4984#[doc(hidden)]
4985impl serde::ser::Serialize for Authorization {
4986    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4987    where
4988        S: serde::ser::Serializer,
4989    {
4990        use serde::ser::SerializeMap;
4991        #[allow(unused_imports)]
4992        use std::option::Option::Some;
4993        let mut state = serializer.serialize_map(std::option::Option::None)?;
4994        if self.admin_users.is_some() {
4995            state.serialize_entry("adminUsers", &self.admin_users)?;
4996        }
4997        if !self._unknown_fields.is_empty() {
4998            for (key, value) in self._unknown_fields.iter() {
4999                state.serialize_entry(key, &value)?;
5000            }
5001        }
5002        state.end()
5003    }
5004}
5005
5006impl std::fmt::Debug for Authorization {
5007    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5008        let mut debug_struct = f.debug_struct("Authorization");
5009        debug_struct.field("admin_users", &self.admin_users);
5010        if !self._unknown_fields.is_empty() {
5011            debug_struct.field("_unknown_fields", &self._unknown_fields);
5012        }
5013        debug_struct.finish()
5014    }
5015}
5016
5017/// A set of Kubernetes nodes in a cluster with common configuration and
5018/// specification.
5019#[derive(Clone, Default, PartialEq)]
5020#[non_exhaustive]
5021pub struct NodePool {
5022    /// Required. The resource name of the node pool.
5023    pub name: std::string::String,
5024
5025    /// Output only. The time when the node pool was created.
5026    pub create_time: std::option::Option<wkt::Timestamp>,
5027
5028    /// Output only. The time when the node pool was last updated.
5029    pub update_time: std::option::Option<wkt::Timestamp>,
5030
5031    /// Labels associated with this resource.
5032    pub labels: std::collections::HashMap<std::string::String, std::string::String>,
5033
5034    /// Name of the Google Distributed Cloud Edge zone where this node pool will be
5035    /// created. For example: `us-central1-edge-customer-a`.
5036    pub node_location: std::string::String,
5037
5038    /// Required. The number of nodes in the pool.
5039    pub node_count: i32,
5040
5041    /// Only machines matching this filter will be allowed to join the node pool.
5042    /// The filtering language accepts strings like "name=\<name\>", and is
5043    /// documented in more detail in [AIP-160](https://google.aip.dev/160).
5044    pub machine_filter: std::string::String,
5045
5046    /// Optional. Local disk encryption options. This field is only used when
5047    /// enabling CMEK support.
5048    pub local_disk_encryption: std::option::Option<crate::model::node_pool::LocalDiskEncryption>,
5049
5050    /// Output only. The lowest release version among all worker nodes.
5051    pub node_version: std::string::String,
5052
5053    /// Optional. Configuration for each node in the NodePool
5054    pub node_config: std::option::Option<crate::model::node_pool::NodeConfig>,
5055
5056    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
5057}
5058
5059impl NodePool {
5060    pub fn new() -> Self {
5061        std::default::Default::default()
5062    }
5063
5064    /// Sets the value of [name][crate::model::NodePool::name].
5065    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
5066        self.name = v.into();
5067        self
5068    }
5069
5070    /// Sets the value of [create_time][crate::model::NodePool::create_time].
5071    pub fn set_create_time<T>(mut self, v: T) -> Self
5072    where
5073        T: std::convert::Into<wkt::Timestamp>,
5074    {
5075        self.create_time = std::option::Option::Some(v.into());
5076        self
5077    }
5078
5079    /// Sets or clears the value of [create_time][crate::model::NodePool::create_time].
5080    pub fn set_or_clear_create_time<T>(mut self, v: std::option::Option<T>) -> Self
5081    where
5082        T: std::convert::Into<wkt::Timestamp>,
5083    {
5084        self.create_time = v.map(|x| x.into());
5085        self
5086    }
5087
5088    /// Sets the value of [update_time][crate::model::NodePool::update_time].
5089    pub fn set_update_time<T>(mut self, v: T) -> Self
5090    where
5091        T: std::convert::Into<wkt::Timestamp>,
5092    {
5093        self.update_time = std::option::Option::Some(v.into());
5094        self
5095    }
5096
5097    /// Sets or clears the value of [update_time][crate::model::NodePool::update_time].
5098    pub fn set_or_clear_update_time<T>(mut self, v: std::option::Option<T>) -> Self
5099    where
5100        T: std::convert::Into<wkt::Timestamp>,
5101    {
5102        self.update_time = v.map(|x| x.into());
5103        self
5104    }
5105
5106    /// Sets the value of [labels][crate::model::NodePool::labels].
5107    pub fn set_labels<T, K, V>(mut self, v: T) -> Self
5108    where
5109        T: std::iter::IntoIterator<Item = (K, V)>,
5110        K: std::convert::Into<std::string::String>,
5111        V: std::convert::Into<std::string::String>,
5112    {
5113        use std::iter::Iterator;
5114        self.labels = v.into_iter().map(|(k, v)| (k.into(), v.into())).collect();
5115        self
5116    }
5117
5118    /// Sets the value of [node_location][crate::model::NodePool::node_location].
5119    pub fn set_node_location<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
5120        self.node_location = v.into();
5121        self
5122    }
5123
5124    /// Sets the value of [node_count][crate::model::NodePool::node_count].
5125    pub fn set_node_count<T: std::convert::Into<i32>>(mut self, v: T) -> Self {
5126        self.node_count = v.into();
5127        self
5128    }
5129
5130    /// Sets the value of [machine_filter][crate::model::NodePool::machine_filter].
5131    pub fn set_machine_filter<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
5132        self.machine_filter = v.into();
5133        self
5134    }
5135
5136    /// Sets the value of [local_disk_encryption][crate::model::NodePool::local_disk_encryption].
5137    pub fn set_local_disk_encryption<T>(mut self, v: T) -> Self
5138    where
5139        T: std::convert::Into<crate::model::node_pool::LocalDiskEncryption>,
5140    {
5141        self.local_disk_encryption = std::option::Option::Some(v.into());
5142        self
5143    }
5144
5145    /// Sets or clears the value of [local_disk_encryption][crate::model::NodePool::local_disk_encryption].
5146    pub fn set_or_clear_local_disk_encryption<T>(mut self, v: std::option::Option<T>) -> Self
5147    where
5148        T: std::convert::Into<crate::model::node_pool::LocalDiskEncryption>,
5149    {
5150        self.local_disk_encryption = v.map(|x| x.into());
5151        self
5152    }
5153
5154    /// Sets the value of [node_version][crate::model::NodePool::node_version].
5155    pub fn set_node_version<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
5156        self.node_version = v.into();
5157        self
5158    }
5159
5160    /// Sets the value of [node_config][crate::model::NodePool::node_config].
5161    pub fn set_node_config<T>(mut self, v: T) -> Self
5162    where
5163        T: std::convert::Into<crate::model::node_pool::NodeConfig>,
5164    {
5165        self.node_config = std::option::Option::Some(v.into());
5166        self
5167    }
5168
5169    /// Sets or clears the value of [node_config][crate::model::NodePool::node_config].
5170    pub fn set_or_clear_node_config<T>(mut self, v: std::option::Option<T>) -> Self
5171    where
5172        T: std::convert::Into<crate::model::node_pool::NodeConfig>,
5173    {
5174        self.node_config = v.map(|x| x.into());
5175        self
5176    }
5177}
5178
5179impl wkt::message::Message for NodePool {
5180    fn typename() -> &'static str {
5181        "type.googleapis.com/google.cloud.edgecontainer.v1.NodePool"
5182    }
5183}
5184
5185#[doc(hidden)]
5186impl<'de> serde::de::Deserialize<'de> for NodePool {
5187    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5188    where
5189        D: serde::Deserializer<'de>,
5190    {
5191        #[allow(non_camel_case_types)]
5192        #[doc(hidden)]
5193        #[derive(PartialEq, Eq, Hash)]
5194        enum __FieldTag {
5195            __name,
5196            __create_time,
5197            __update_time,
5198            __labels,
5199            __node_location,
5200            __node_count,
5201            __machine_filter,
5202            __local_disk_encryption,
5203            __node_version,
5204            __node_config,
5205            Unknown(std::string::String),
5206        }
5207        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
5208            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5209            where
5210                D: serde::Deserializer<'de>,
5211            {
5212                struct Visitor;
5213                impl<'de> serde::de::Visitor<'de> for Visitor {
5214                    type Value = __FieldTag;
5215                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
5216                        formatter.write_str("a field name for NodePool")
5217                    }
5218                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
5219                    where
5220                        E: serde::de::Error,
5221                    {
5222                        use std::result::Result::Ok;
5223                        use std::string::ToString;
5224                        match value {
5225                            "name" => Ok(__FieldTag::__name),
5226                            "createTime" => Ok(__FieldTag::__create_time),
5227                            "create_time" => Ok(__FieldTag::__create_time),
5228                            "updateTime" => Ok(__FieldTag::__update_time),
5229                            "update_time" => Ok(__FieldTag::__update_time),
5230                            "labels" => Ok(__FieldTag::__labels),
5231                            "nodeLocation" => Ok(__FieldTag::__node_location),
5232                            "node_location" => Ok(__FieldTag::__node_location),
5233                            "nodeCount" => Ok(__FieldTag::__node_count),
5234                            "node_count" => Ok(__FieldTag::__node_count),
5235                            "machineFilter" => Ok(__FieldTag::__machine_filter),
5236                            "machine_filter" => Ok(__FieldTag::__machine_filter),
5237                            "localDiskEncryption" => Ok(__FieldTag::__local_disk_encryption),
5238                            "local_disk_encryption" => Ok(__FieldTag::__local_disk_encryption),
5239                            "nodeVersion" => Ok(__FieldTag::__node_version),
5240                            "node_version" => Ok(__FieldTag::__node_version),
5241                            "nodeConfig" => Ok(__FieldTag::__node_config),
5242                            "node_config" => Ok(__FieldTag::__node_config),
5243                            _ => Ok(__FieldTag::Unknown(value.to_string())),
5244                        }
5245                    }
5246                }
5247                deserializer.deserialize_identifier(Visitor)
5248            }
5249        }
5250        struct Visitor;
5251        impl<'de> serde::de::Visitor<'de> for Visitor {
5252            type Value = NodePool;
5253            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
5254                formatter.write_str("struct NodePool")
5255            }
5256            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
5257            where
5258                A: serde::de::MapAccess<'de>,
5259            {
5260                #[allow(unused_imports)]
5261                use serde::de::Error;
5262                use std::option::Option::Some;
5263                let mut fields = std::collections::HashSet::new();
5264                let mut result = Self::Value::new();
5265                while let Some(tag) = map.next_key::<__FieldTag>()? {
5266                    #[allow(clippy::match_single_binding)]
5267                    match tag {
5268                        __FieldTag::__name => {
5269                            if !fields.insert(__FieldTag::__name) {
5270                                return std::result::Result::Err(A::Error::duplicate_field(
5271                                    "multiple values for name",
5272                                ));
5273                            }
5274                            result.name = map
5275                                .next_value::<std::option::Option<std::string::String>>()?
5276                                .unwrap_or_default();
5277                        }
5278                        __FieldTag::__create_time => {
5279                            if !fields.insert(__FieldTag::__create_time) {
5280                                return std::result::Result::Err(A::Error::duplicate_field(
5281                                    "multiple values for create_time",
5282                                ));
5283                            }
5284                            result.create_time =
5285                                map.next_value::<std::option::Option<wkt::Timestamp>>()?;
5286                        }
5287                        __FieldTag::__update_time => {
5288                            if !fields.insert(__FieldTag::__update_time) {
5289                                return std::result::Result::Err(A::Error::duplicate_field(
5290                                    "multiple values for update_time",
5291                                ));
5292                            }
5293                            result.update_time =
5294                                map.next_value::<std::option::Option<wkt::Timestamp>>()?;
5295                        }
5296                        __FieldTag::__labels => {
5297                            if !fields.insert(__FieldTag::__labels) {
5298                                return std::result::Result::Err(A::Error::duplicate_field(
5299                                    "multiple values for labels",
5300                                ));
5301                            }
5302                            result.labels = map
5303                                .next_value::<std::option::Option<
5304                                    std::collections::HashMap<
5305                                        std::string::String,
5306                                        std::string::String,
5307                                    >,
5308                                >>()?
5309                                .unwrap_or_default();
5310                        }
5311                        __FieldTag::__node_location => {
5312                            if !fields.insert(__FieldTag::__node_location) {
5313                                return std::result::Result::Err(A::Error::duplicate_field(
5314                                    "multiple values for node_location",
5315                                ));
5316                            }
5317                            result.node_location = map
5318                                .next_value::<std::option::Option<std::string::String>>()?
5319                                .unwrap_or_default();
5320                        }
5321                        __FieldTag::__node_count => {
5322                            if !fields.insert(__FieldTag::__node_count) {
5323                                return std::result::Result::Err(A::Error::duplicate_field(
5324                                    "multiple values for node_count",
5325                                ));
5326                            }
5327                            struct __With(std::option::Option<i32>);
5328                            impl<'de> serde::de::Deserialize<'de> for __With {
5329                                fn deserialize<D>(
5330                                    deserializer: D,
5331                                ) -> std::result::Result<Self, D::Error>
5332                                where
5333                                    D: serde::de::Deserializer<'de>,
5334                                {
5335                                    serde_with::As::< std::option::Option<wkt::internal::I32> >::deserialize(deserializer).map(__With)
5336                                }
5337                            }
5338                            result.node_count = map.next_value::<__With>()?.0.unwrap_or_default();
5339                        }
5340                        __FieldTag::__machine_filter => {
5341                            if !fields.insert(__FieldTag::__machine_filter) {
5342                                return std::result::Result::Err(A::Error::duplicate_field(
5343                                    "multiple values for machine_filter",
5344                                ));
5345                            }
5346                            result.machine_filter = map
5347                                .next_value::<std::option::Option<std::string::String>>()?
5348                                .unwrap_or_default();
5349                        }
5350                        __FieldTag::__local_disk_encryption => {
5351                            if !fields.insert(__FieldTag::__local_disk_encryption) {
5352                                return std::result::Result::Err(A::Error::duplicate_field(
5353                                    "multiple values for local_disk_encryption",
5354                                ));
5355                            }
5356                            result.local_disk_encryption =
5357                                map.next_value::<std::option::Option<
5358                                    crate::model::node_pool::LocalDiskEncryption,
5359                                >>()?;
5360                        }
5361                        __FieldTag::__node_version => {
5362                            if !fields.insert(__FieldTag::__node_version) {
5363                                return std::result::Result::Err(A::Error::duplicate_field(
5364                                    "multiple values for node_version",
5365                                ));
5366                            }
5367                            result.node_version = map
5368                                .next_value::<std::option::Option<std::string::String>>()?
5369                                .unwrap_or_default();
5370                        }
5371                        __FieldTag::__node_config => {
5372                            if !fields.insert(__FieldTag::__node_config) {
5373                                return std::result::Result::Err(A::Error::duplicate_field(
5374                                    "multiple values for node_config",
5375                                ));
5376                            }
5377                            result.node_config = map.next_value::<std::option::Option<crate::model::node_pool::NodeConfig>>()?
5378                                ;
5379                        }
5380                        __FieldTag::Unknown(key) => {
5381                            let value = map.next_value::<serde_json::Value>()?;
5382                            result._unknown_fields.insert(key, value);
5383                        }
5384                    }
5385                }
5386                std::result::Result::Ok(result)
5387            }
5388        }
5389        deserializer.deserialize_any(Visitor)
5390    }
5391}
5392
5393#[doc(hidden)]
5394impl serde::ser::Serialize for NodePool {
5395    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5396    where
5397        S: serde::ser::Serializer,
5398    {
5399        use serde::ser::SerializeMap;
5400        #[allow(unused_imports)]
5401        use std::option::Option::Some;
5402        let mut state = serializer.serialize_map(std::option::Option::None)?;
5403        if !self.name.is_empty() {
5404            state.serialize_entry("name", &self.name)?;
5405        }
5406        if self.create_time.is_some() {
5407            state.serialize_entry("createTime", &self.create_time)?;
5408        }
5409        if self.update_time.is_some() {
5410            state.serialize_entry("updateTime", &self.update_time)?;
5411        }
5412        if !self.labels.is_empty() {
5413            state.serialize_entry("labels", &self.labels)?;
5414        }
5415        if !self.node_location.is_empty() {
5416            state.serialize_entry("nodeLocation", &self.node_location)?;
5417        }
5418        if !wkt::internal::is_default(&self.node_count) {
5419            struct __With<'a>(&'a i32);
5420            impl<'a> serde::ser::Serialize for __With<'a> {
5421                fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5422                where
5423                    S: serde::ser::Serializer,
5424                {
5425                    serde_with::As::<wkt::internal::I32>::serialize(self.0, serializer)
5426                }
5427            }
5428            state.serialize_entry("nodeCount", &__With(&self.node_count))?;
5429        }
5430        if !self.machine_filter.is_empty() {
5431            state.serialize_entry("machineFilter", &self.machine_filter)?;
5432        }
5433        if self.local_disk_encryption.is_some() {
5434            state.serialize_entry("localDiskEncryption", &self.local_disk_encryption)?;
5435        }
5436        if !self.node_version.is_empty() {
5437            state.serialize_entry("nodeVersion", &self.node_version)?;
5438        }
5439        if self.node_config.is_some() {
5440            state.serialize_entry("nodeConfig", &self.node_config)?;
5441        }
5442        if !self._unknown_fields.is_empty() {
5443            for (key, value) in self._unknown_fields.iter() {
5444                state.serialize_entry(key, &value)?;
5445            }
5446        }
5447        state.end()
5448    }
5449}
5450
5451impl std::fmt::Debug for NodePool {
5452    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5453        let mut debug_struct = f.debug_struct("NodePool");
5454        debug_struct.field("name", &self.name);
5455        debug_struct.field("create_time", &self.create_time);
5456        debug_struct.field("update_time", &self.update_time);
5457        debug_struct.field("labels", &self.labels);
5458        debug_struct.field("node_location", &self.node_location);
5459        debug_struct.field("node_count", &self.node_count);
5460        debug_struct.field("machine_filter", &self.machine_filter);
5461        debug_struct.field("local_disk_encryption", &self.local_disk_encryption);
5462        debug_struct.field("node_version", &self.node_version);
5463        debug_struct.field("node_config", &self.node_config);
5464        if !self._unknown_fields.is_empty() {
5465            debug_struct.field("_unknown_fields", &self._unknown_fields);
5466        }
5467        debug_struct.finish()
5468    }
5469}
5470
5471/// Defines additional types related to [NodePool].
5472pub mod node_pool {
5473    #[allow(unused_imports)]
5474    use super::*;
5475
5476    /// Configuration for CMEK support for edge machine local disk encryption.
5477    #[derive(Clone, Default, PartialEq)]
5478    #[non_exhaustive]
5479    pub struct LocalDiskEncryption {
5480        /// Optional. The Cloud KMS CryptoKey e.g.
5481        /// projects/{project}/locations/{location}/keyRings/{keyRing}/cryptoKeys/{cryptoKey}
5482        /// to use for protecting node local disks. If not specified, a
5483        /// Google-managed key will be used instead.
5484        pub kms_key: std::string::String,
5485
5486        /// Output only. The Cloud KMS CryptoKeyVersion currently in use for
5487        /// protecting node local disks. Only applicable if kms_key is set.
5488        pub kms_key_active_version: std::string::String,
5489
5490        /// Output only. Availability of the Cloud KMS CryptoKey. If not
5491        /// `KEY_AVAILABLE`, then nodes may go offline as they cannot access their
5492        /// local data. This can be caused by a lack of permissions to use the key,
5493        /// or if the key is disabled or deleted.
5494        pub kms_key_state: crate::model::KmsKeyState,
5495
5496        /// Output only. Error status returned by Cloud KMS when using this key. This
5497        /// field may be populated only if `kms_key_state` is not
5498        /// `KMS_KEY_STATE_KEY_AVAILABLE`. If populated, this field contains the
5499        /// error status reported by Cloud KMS.
5500        pub kms_status: std::option::Option<rpc::model::Status>,
5501
5502        /// Output only. The current resource state associated with the cmek.
5503        pub resource_state: crate::model::ResourceState,
5504
5505        _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
5506    }
5507
5508    impl LocalDiskEncryption {
5509        pub fn new() -> Self {
5510            std::default::Default::default()
5511        }
5512
5513        /// Sets the value of [kms_key][crate::model::node_pool::LocalDiskEncryption::kms_key].
5514        pub fn set_kms_key<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
5515            self.kms_key = v.into();
5516            self
5517        }
5518
5519        /// Sets the value of [kms_key_active_version][crate::model::node_pool::LocalDiskEncryption::kms_key_active_version].
5520        pub fn set_kms_key_active_version<T: std::convert::Into<std::string::String>>(
5521            mut self,
5522            v: T,
5523        ) -> Self {
5524            self.kms_key_active_version = v.into();
5525            self
5526        }
5527
5528        /// Sets the value of [kms_key_state][crate::model::node_pool::LocalDiskEncryption::kms_key_state].
5529        pub fn set_kms_key_state<T: std::convert::Into<crate::model::KmsKeyState>>(
5530            mut self,
5531            v: T,
5532        ) -> Self {
5533            self.kms_key_state = v.into();
5534            self
5535        }
5536
5537        /// Sets the value of [kms_status][crate::model::node_pool::LocalDiskEncryption::kms_status].
5538        pub fn set_kms_status<T>(mut self, v: T) -> Self
5539        where
5540            T: std::convert::Into<rpc::model::Status>,
5541        {
5542            self.kms_status = std::option::Option::Some(v.into());
5543            self
5544        }
5545
5546        /// Sets or clears the value of [kms_status][crate::model::node_pool::LocalDiskEncryption::kms_status].
5547        pub fn set_or_clear_kms_status<T>(mut self, v: std::option::Option<T>) -> Self
5548        where
5549            T: std::convert::Into<rpc::model::Status>,
5550        {
5551            self.kms_status = v.map(|x| x.into());
5552            self
5553        }
5554
5555        /// Sets the value of [resource_state][crate::model::node_pool::LocalDiskEncryption::resource_state].
5556        pub fn set_resource_state<T: std::convert::Into<crate::model::ResourceState>>(
5557            mut self,
5558            v: T,
5559        ) -> Self {
5560            self.resource_state = v.into();
5561            self
5562        }
5563    }
5564
5565    impl wkt::message::Message for LocalDiskEncryption {
5566        fn typename() -> &'static str {
5567            "type.googleapis.com/google.cloud.edgecontainer.v1.NodePool.LocalDiskEncryption"
5568        }
5569    }
5570
5571    #[doc(hidden)]
5572    impl<'de> serde::de::Deserialize<'de> for LocalDiskEncryption {
5573        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5574        where
5575            D: serde::Deserializer<'de>,
5576        {
5577            #[allow(non_camel_case_types)]
5578            #[doc(hidden)]
5579            #[derive(PartialEq, Eq, Hash)]
5580            enum __FieldTag {
5581                __kms_key,
5582                __kms_key_active_version,
5583                __kms_key_state,
5584                __kms_status,
5585                __resource_state,
5586                Unknown(std::string::String),
5587            }
5588            impl<'de> serde::de::Deserialize<'de> for __FieldTag {
5589                fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5590                where
5591                    D: serde::Deserializer<'de>,
5592                {
5593                    struct Visitor;
5594                    impl<'de> serde::de::Visitor<'de> for Visitor {
5595                        type Value = __FieldTag;
5596                        fn expecting(
5597                            &self,
5598                            formatter: &mut std::fmt::Formatter,
5599                        ) -> std::fmt::Result {
5600                            formatter.write_str("a field name for LocalDiskEncryption")
5601                        }
5602                        fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
5603                        where
5604                            E: serde::de::Error,
5605                        {
5606                            use std::result::Result::Ok;
5607                            use std::string::ToString;
5608                            match value {
5609                                "kmsKey" => Ok(__FieldTag::__kms_key),
5610                                "kms_key" => Ok(__FieldTag::__kms_key),
5611                                "kmsKeyActiveVersion" => Ok(__FieldTag::__kms_key_active_version),
5612                                "kms_key_active_version" => {
5613                                    Ok(__FieldTag::__kms_key_active_version)
5614                                }
5615                                "kmsKeyState" => Ok(__FieldTag::__kms_key_state),
5616                                "kms_key_state" => Ok(__FieldTag::__kms_key_state),
5617                                "kmsStatus" => Ok(__FieldTag::__kms_status),
5618                                "kms_status" => Ok(__FieldTag::__kms_status),
5619                                "resourceState" => Ok(__FieldTag::__resource_state),
5620                                "resource_state" => Ok(__FieldTag::__resource_state),
5621                                _ => Ok(__FieldTag::Unknown(value.to_string())),
5622                            }
5623                        }
5624                    }
5625                    deserializer.deserialize_identifier(Visitor)
5626                }
5627            }
5628            struct Visitor;
5629            impl<'de> serde::de::Visitor<'de> for Visitor {
5630                type Value = LocalDiskEncryption;
5631                fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
5632                    formatter.write_str("struct LocalDiskEncryption")
5633                }
5634                fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
5635                where
5636                    A: serde::de::MapAccess<'de>,
5637                {
5638                    #[allow(unused_imports)]
5639                    use serde::de::Error;
5640                    use std::option::Option::Some;
5641                    let mut fields = std::collections::HashSet::new();
5642                    let mut result = Self::Value::new();
5643                    while let Some(tag) = map.next_key::<__FieldTag>()? {
5644                        #[allow(clippy::match_single_binding)]
5645                        match tag {
5646                            __FieldTag::__kms_key => {
5647                                if !fields.insert(__FieldTag::__kms_key) {
5648                                    return std::result::Result::Err(A::Error::duplicate_field(
5649                                        "multiple values for kms_key",
5650                                    ));
5651                                }
5652                                result.kms_key = map
5653                                    .next_value::<std::option::Option<std::string::String>>()?
5654                                    .unwrap_or_default();
5655                            }
5656                            __FieldTag::__kms_key_active_version => {
5657                                if !fields.insert(__FieldTag::__kms_key_active_version) {
5658                                    return std::result::Result::Err(A::Error::duplicate_field(
5659                                        "multiple values for kms_key_active_version",
5660                                    ));
5661                                }
5662                                result.kms_key_active_version = map
5663                                    .next_value::<std::option::Option<std::string::String>>()?
5664                                    .unwrap_or_default();
5665                            }
5666                            __FieldTag::__kms_key_state => {
5667                                if !fields.insert(__FieldTag::__kms_key_state) {
5668                                    return std::result::Result::Err(A::Error::duplicate_field(
5669                                        "multiple values for kms_key_state",
5670                                    ));
5671                                }
5672                                result.kms_key_state = map
5673                                    .next_value::<std::option::Option<crate::model::KmsKeyState>>()?
5674                                    .unwrap_or_default();
5675                            }
5676                            __FieldTag::__kms_status => {
5677                                if !fields.insert(__FieldTag::__kms_status) {
5678                                    return std::result::Result::Err(A::Error::duplicate_field(
5679                                        "multiple values for kms_status",
5680                                    ));
5681                                }
5682                                result.kms_status =
5683                                    map.next_value::<std::option::Option<rpc::model::Status>>()?;
5684                            }
5685                            __FieldTag::__resource_state => {
5686                                if !fields.insert(__FieldTag::__resource_state) {
5687                                    return std::result::Result::Err(A::Error::duplicate_field(
5688                                        "multiple values for resource_state",
5689                                    ));
5690                                }
5691                                result.resource_state = map
5692                                    .next_value::<std::option::Option<crate::model::ResourceState>>(
5693                                    )?
5694                                    .unwrap_or_default();
5695                            }
5696                            __FieldTag::Unknown(key) => {
5697                                let value = map.next_value::<serde_json::Value>()?;
5698                                result._unknown_fields.insert(key, value);
5699                            }
5700                        }
5701                    }
5702                    std::result::Result::Ok(result)
5703                }
5704            }
5705            deserializer.deserialize_any(Visitor)
5706        }
5707    }
5708
5709    #[doc(hidden)]
5710    impl serde::ser::Serialize for LocalDiskEncryption {
5711        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5712        where
5713            S: serde::ser::Serializer,
5714        {
5715            use serde::ser::SerializeMap;
5716            #[allow(unused_imports)]
5717            use std::option::Option::Some;
5718            let mut state = serializer.serialize_map(std::option::Option::None)?;
5719            if !self.kms_key.is_empty() {
5720                state.serialize_entry("kmsKey", &self.kms_key)?;
5721            }
5722            if !self.kms_key_active_version.is_empty() {
5723                state.serialize_entry("kmsKeyActiveVersion", &self.kms_key_active_version)?;
5724            }
5725            if !wkt::internal::is_default(&self.kms_key_state) {
5726                state.serialize_entry("kmsKeyState", &self.kms_key_state)?;
5727            }
5728            if self.kms_status.is_some() {
5729                state.serialize_entry("kmsStatus", &self.kms_status)?;
5730            }
5731            if !wkt::internal::is_default(&self.resource_state) {
5732                state.serialize_entry("resourceState", &self.resource_state)?;
5733            }
5734            if !self._unknown_fields.is_empty() {
5735                for (key, value) in self._unknown_fields.iter() {
5736                    state.serialize_entry(key, &value)?;
5737                }
5738            }
5739            state.end()
5740        }
5741    }
5742
5743    impl std::fmt::Debug for LocalDiskEncryption {
5744        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5745            let mut debug_struct = f.debug_struct("LocalDiskEncryption");
5746            debug_struct.field("kms_key", &self.kms_key);
5747            debug_struct.field("kms_key_active_version", &self.kms_key_active_version);
5748            debug_struct.field("kms_key_state", &self.kms_key_state);
5749            debug_struct.field("kms_status", &self.kms_status);
5750            debug_struct.field("resource_state", &self.resource_state);
5751            if !self._unknown_fields.is_empty() {
5752                debug_struct.field("_unknown_fields", &self._unknown_fields);
5753            }
5754            debug_struct.finish()
5755        }
5756    }
5757
5758    /// Configuration for each node in the NodePool
5759    #[derive(Clone, Default, PartialEq)]
5760    #[non_exhaustive]
5761    pub struct NodeConfig {
5762        /// Optional. The Kubernetes node labels
5763        pub labels: std::collections::HashMap<std::string::String, std::string::String>,
5764
5765        /// Optional. Name for the storage schema of worker nodes.
5766        ///
5767        /// Warning: Configurable node local storage schema feature is an
5768        /// experimental feature, and is not recommended for general use
5769        /// in production clusters/nodepools.
5770        pub node_storage_schema: std::string::String,
5771
5772        _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
5773    }
5774
5775    impl NodeConfig {
5776        pub fn new() -> Self {
5777            std::default::Default::default()
5778        }
5779
5780        /// Sets the value of [labels][crate::model::node_pool::NodeConfig::labels].
5781        pub fn set_labels<T, K, V>(mut self, v: T) -> Self
5782        where
5783            T: std::iter::IntoIterator<Item = (K, V)>,
5784            K: std::convert::Into<std::string::String>,
5785            V: std::convert::Into<std::string::String>,
5786        {
5787            use std::iter::Iterator;
5788            self.labels = v.into_iter().map(|(k, v)| (k.into(), v.into())).collect();
5789            self
5790        }
5791
5792        /// Sets the value of [node_storage_schema][crate::model::node_pool::NodeConfig::node_storage_schema].
5793        pub fn set_node_storage_schema<T: std::convert::Into<std::string::String>>(
5794            mut self,
5795            v: T,
5796        ) -> Self {
5797            self.node_storage_schema = v.into();
5798            self
5799        }
5800    }
5801
5802    impl wkt::message::Message for NodeConfig {
5803        fn typename() -> &'static str {
5804            "type.googleapis.com/google.cloud.edgecontainer.v1.NodePool.NodeConfig"
5805        }
5806    }
5807
5808    #[doc(hidden)]
5809    impl<'de> serde::de::Deserialize<'de> for NodeConfig {
5810        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5811        where
5812            D: serde::Deserializer<'de>,
5813        {
5814            #[allow(non_camel_case_types)]
5815            #[doc(hidden)]
5816            #[derive(PartialEq, Eq, Hash)]
5817            enum __FieldTag {
5818                __labels,
5819                __node_storage_schema,
5820                Unknown(std::string::String),
5821            }
5822            impl<'de> serde::de::Deserialize<'de> for __FieldTag {
5823                fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5824                where
5825                    D: serde::Deserializer<'de>,
5826                {
5827                    struct Visitor;
5828                    impl<'de> serde::de::Visitor<'de> for Visitor {
5829                        type Value = __FieldTag;
5830                        fn expecting(
5831                            &self,
5832                            formatter: &mut std::fmt::Formatter,
5833                        ) -> std::fmt::Result {
5834                            formatter.write_str("a field name for NodeConfig")
5835                        }
5836                        fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
5837                        where
5838                            E: serde::de::Error,
5839                        {
5840                            use std::result::Result::Ok;
5841                            use std::string::ToString;
5842                            match value {
5843                                "labels" => Ok(__FieldTag::__labels),
5844                                "nodeStorageSchema" => Ok(__FieldTag::__node_storage_schema),
5845                                "node_storage_schema" => Ok(__FieldTag::__node_storage_schema),
5846                                _ => Ok(__FieldTag::Unknown(value.to_string())),
5847                            }
5848                        }
5849                    }
5850                    deserializer.deserialize_identifier(Visitor)
5851                }
5852            }
5853            struct Visitor;
5854            impl<'de> serde::de::Visitor<'de> for Visitor {
5855                type Value = NodeConfig;
5856                fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
5857                    formatter.write_str("struct NodeConfig")
5858                }
5859                fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
5860                where
5861                    A: serde::de::MapAccess<'de>,
5862                {
5863                    #[allow(unused_imports)]
5864                    use serde::de::Error;
5865                    use std::option::Option::Some;
5866                    let mut fields = std::collections::HashSet::new();
5867                    let mut result = Self::Value::new();
5868                    while let Some(tag) = map.next_key::<__FieldTag>()? {
5869                        #[allow(clippy::match_single_binding)]
5870                        match tag {
5871                            __FieldTag::__labels => {
5872                                if !fields.insert(__FieldTag::__labels) {
5873                                    return std::result::Result::Err(A::Error::duplicate_field(
5874                                        "multiple values for labels",
5875                                    ));
5876                                }
5877                                result.labels = map
5878                                    .next_value::<std::option::Option<
5879                                        std::collections::HashMap<
5880                                            std::string::String,
5881                                            std::string::String,
5882                                        >,
5883                                    >>()?
5884                                    .unwrap_or_default();
5885                            }
5886                            __FieldTag::__node_storage_schema => {
5887                                if !fields.insert(__FieldTag::__node_storage_schema) {
5888                                    return std::result::Result::Err(A::Error::duplicate_field(
5889                                        "multiple values for node_storage_schema",
5890                                    ));
5891                                }
5892                                result.node_storage_schema = map
5893                                    .next_value::<std::option::Option<std::string::String>>()?
5894                                    .unwrap_or_default();
5895                            }
5896                            __FieldTag::Unknown(key) => {
5897                                let value = map.next_value::<serde_json::Value>()?;
5898                                result._unknown_fields.insert(key, value);
5899                            }
5900                        }
5901                    }
5902                    std::result::Result::Ok(result)
5903                }
5904            }
5905            deserializer.deserialize_any(Visitor)
5906        }
5907    }
5908
5909    #[doc(hidden)]
5910    impl serde::ser::Serialize for NodeConfig {
5911        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5912        where
5913            S: serde::ser::Serializer,
5914        {
5915            use serde::ser::SerializeMap;
5916            #[allow(unused_imports)]
5917            use std::option::Option::Some;
5918            let mut state = serializer.serialize_map(std::option::Option::None)?;
5919            if !self.labels.is_empty() {
5920                state.serialize_entry("labels", &self.labels)?;
5921            }
5922            if !self.node_storage_schema.is_empty() {
5923                state.serialize_entry("nodeStorageSchema", &self.node_storage_schema)?;
5924            }
5925            if !self._unknown_fields.is_empty() {
5926                for (key, value) in self._unknown_fields.iter() {
5927                    state.serialize_entry(key, &value)?;
5928                }
5929            }
5930            state.end()
5931        }
5932    }
5933
5934    impl std::fmt::Debug for NodeConfig {
5935        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5936            let mut debug_struct = f.debug_struct("NodeConfig");
5937            debug_struct.field("labels", &self.labels);
5938            debug_struct.field("node_storage_schema", &self.node_storage_schema);
5939            if !self._unknown_fields.is_empty() {
5940                debug_struct.field("_unknown_fields", &self._unknown_fields);
5941            }
5942            debug_struct.finish()
5943        }
5944    }
5945}
5946
5947/// A Google Distributed Cloud Edge machine capable of acting as a Kubernetes
5948/// node.
5949#[derive(Clone, Default, PartialEq)]
5950#[non_exhaustive]
5951pub struct Machine {
5952    /// Required. The resource name of the machine.
5953    pub name: std::string::String,
5954
5955    /// Output only. The time when the node pool was created.
5956    pub create_time: std::option::Option<wkt::Timestamp>,
5957
5958    /// Output only. The time when the node pool was last updated.
5959    pub update_time: std::option::Option<wkt::Timestamp>,
5960
5961    /// Labels associated with this resource.
5962    pub labels: std::collections::HashMap<std::string::String, std::string::String>,
5963
5964    /// Canonical resource name of the node that this machine is responsible for
5965    /// hosting e.g.
5966    /// projects/{project}/locations/{location}/clusters/{cluster_id}/nodePools/{pool_id}/{node},
5967    /// Or empty if the machine is not assigned to assume the role of a node.
5968    ///
5969    /// For control plane nodes hosted on edge machines, this will return
5970    /// the following format:
5971    /// "projects/{project}/locations/{location}/clusters/{cluster_id}/controlPlaneNodes/{node}".
5972    pub hosted_node: std::string::String,
5973
5974    /// The Google Distributed Cloud Edge zone of this machine.
5975    pub zone: std::string::String,
5976
5977    /// Output only. The software version of the machine.
5978    pub version: std::string::String,
5979
5980    /// Output only. Whether the machine is disabled. If disabled, the machine is
5981    /// unable to enter service.
5982    pub disabled: bool,
5983
5984    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
5985}
5986
5987impl Machine {
5988    pub fn new() -> Self {
5989        std::default::Default::default()
5990    }
5991
5992    /// Sets the value of [name][crate::model::Machine::name].
5993    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
5994        self.name = v.into();
5995        self
5996    }
5997
5998    /// Sets the value of [create_time][crate::model::Machine::create_time].
5999    pub fn set_create_time<T>(mut self, v: T) -> Self
6000    where
6001        T: std::convert::Into<wkt::Timestamp>,
6002    {
6003        self.create_time = std::option::Option::Some(v.into());
6004        self
6005    }
6006
6007    /// Sets or clears the value of [create_time][crate::model::Machine::create_time].
6008    pub fn set_or_clear_create_time<T>(mut self, v: std::option::Option<T>) -> Self
6009    where
6010        T: std::convert::Into<wkt::Timestamp>,
6011    {
6012        self.create_time = v.map(|x| x.into());
6013        self
6014    }
6015
6016    /// Sets the value of [update_time][crate::model::Machine::update_time].
6017    pub fn set_update_time<T>(mut self, v: T) -> Self
6018    where
6019        T: std::convert::Into<wkt::Timestamp>,
6020    {
6021        self.update_time = std::option::Option::Some(v.into());
6022        self
6023    }
6024
6025    /// Sets or clears the value of [update_time][crate::model::Machine::update_time].
6026    pub fn set_or_clear_update_time<T>(mut self, v: std::option::Option<T>) -> Self
6027    where
6028        T: std::convert::Into<wkt::Timestamp>,
6029    {
6030        self.update_time = v.map(|x| x.into());
6031        self
6032    }
6033
6034    /// Sets the value of [labels][crate::model::Machine::labels].
6035    pub fn set_labels<T, K, V>(mut self, v: T) -> Self
6036    where
6037        T: std::iter::IntoIterator<Item = (K, V)>,
6038        K: std::convert::Into<std::string::String>,
6039        V: std::convert::Into<std::string::String>,
6040    {
6041        use std::iter::Iterator;
6042        self.labels = v.into_iter().map(|(k, v)| (k.into(), v.into())).collect();
6043        self
6044    }
6045
6046    /// Sets the value of [hosted_node][crate::model::Machine::hosted_node].
6047    pub fn set_hosted_node<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
6048        self.hosted_node = v.into();
6049        self
6050    }
6051
6052    /// Sets the value of [zone][crate::model::Machine::zone].
6053    pub fn set_zone<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
6054        self.zone = v.into();
6055        self
6056    }
6057
6058    /// Sets the value of [version][crate::model::Machine::version].
6059    pub fn set_version<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
6060        self.version = v.into();
6061        self
6062    }
6063
6064    /// Sets the value of [disabled][crate::model::Machine::disabled].
6065    pub fn set_disabled<T: std::convert::Into<bool>>(mut self, v: T) -> Self {
6066        self.disabled = v.into();
6067        self
6068    }
6069}
6070
6071impl wkt::message::Message for Machine {
6072    fn typename() -> &'static str {
6073        "type.googleapis.com/google.cloud.edgecontainer.v1.Machine"
6074    }
6075}
6076
6077#[doc(hidden)]
6078impl<'de> serde::de::Deserialize<'de> for Machine {
6079    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6080    where
6081        D: serde::Deserializer<'de>,
6082    {
6083        #[allow(non_camel_case_types)]
6084        #[doc(hidden)]
6085        #[derive(PartialEq, Eq, Hash)]
6086        enum __FieldTag {
6087            __name,
6088            __create_time,
6089            __update_time,
6090            __labels,
6091            __hosted_node,
6092            __zone,
6093            __version,
6094            __disabled,
6095            Unknown(std::string::String),
6096        }
6097        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
6098            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6099            where
6100                D: serde::Deserializer<'de>,
6101            {
6102                struct Visitor;
6103                impl<'de> serde::de::Visitor<'de> for Visitor {
6104                    type Value = __FieldTag;
6105                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
6106                        formatter.write_str("a field name for Machine")
6107                    }
6108                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
6109                    where
6110                        E: serde::de::Error,
6111                    {
6112                        use std::result::Result::Ok;
6113                        use std::string::ToString;
6114                        match value {
6115                            "name" => Ok(__FieldTag::__name),
6116                            "createTime" => Ok(__FieldTag::__create_time),
6117                            "create_time" => Ok(__FieldTag::__create_time),
6118                            "updateTime" => Ok(__FieldTag::__update_time),
6119                            "update_time" => Ok(__FieldTag::__update_time),
6120                            "labels" => Ok(__FieldTag::__labels),
6121                            "hostedNode" => Ok(__FieldTag::__hosted_node),
6122                            "hosted_node" => Ok(__FieldTag::__hosted_node),
6123                            "zone" => Ok(__FieldTag::__zone),
6124                            "version" => Ok(__FieldTag::__version),
6125                            "disabled" => Ok(__FieldTag::__disabled),
6126                            _ => Ok(__FieldTag::Unknown(value.to_string())),
6127                        }
6128                    }
6129                }
6130                deserializer.deserialize_identifier(Visitor)
6131            }
6132        }
6133        struct Visitor;
6134        impl<'de> serde::de::Visitor<'de> for Visitor {
6135            type Value = Machine;
6136            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
6137                formatter.write_str("struct Machine")
6138            }
6139            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
6140            where
6141                A: serde::de::MapAccess<'de>,
6142            {
6143                #[allow(unused_imports)]
6144                use serde::de::Error;
6145                use std::option::Option::Some;
6146                let mut fields = std::collections::HashSet::new();
6147                let mut result = Self::Value::new();
6148                while let Some(tag) = map.next_key::<__FieldTag>()? {
6149                    #[allow(clippy::match_single_binding)]
6150                    match tag {
6151                        __FieldTag::__name => {
6152                            if !fields.insert(__FieldTag::__name) {
6153                                return std::result::Result::Err(A::Error::duplicate_field(
6154                                    "multiple values for name",
6155                                ));
6156                            }
6157                            result.name = map
6158                                .next_value::<std::option::Option<std::string::String>>()?
6159                                .unwrap_or_default();
6160                        }
6161                        __FieldTag::__create_time => {
6162                            if !fields.insert(__FieldTag::__create_time) {
6163                                return std::result::Result::Err(A::Error::duplicate_field(
6164                                    "multiple values for create_time",
6165                                ));
6166                            }
6167                            result.create_time =
6168                                map.next_value::<std::option::Option<wkt::Timestamp>>()?;
6169                        }
6170                        __FieldTag::__update_time => {
6171                            if !fields.insert(__FieldTag::__update_time) {
6172                                return std::result::Result::Err(A::Error::duplicate_field(
6173                                    "multiple values for update_time",
6174                                ));
6175                            }
6176                            result.update_time =
6177                                map.next_value::<std::option::Option<wkt::Timestamp>>()?;
6178                        }
6179                        __FieldTag::__labels => {
6180                            if !fields.insert(__FieldTag::__labels) {
6181                                return std::result::Result::Err(A::Error::duplicate_field(
6182                                    "multiple values for labels",
6183                                ));
6184                            }
6185                            result.labels = map
6186                                .next_value::<std::option::Option<
6187                                    std::collections::HashMap<
6188                                        std::string::String,
6189                                        std::string::String,
6190                                    >,
6191                                >>()?
6192                                .unwrap_or_default();
6193                        }
6194                        __FieldTag::__hosted_node => {
6195                            if !fields.insert(__FieldTag::__hosted_node) {
6196                                return std::result::Result::Err(A::Error::duplicate_field(
6197                                    "multiple values for hosted_node",
6198                                ));
6199                            }
6200                            result.hosted_node = map
6201                                .next_value::<std::option::Option<std::string::String>>()?
6202                                .unwrap_or_default();
6203                        }
6204                        __FieldTag::__zone => {
6205                            if !fields.insert(__FieldTag::__zone) {
6206                                return std::result::Result::Err(A::Error::duplicate_field(
6207                                    "multiple values for zone",
6208                                ));
6209                            }
6210                            result.zone = map
6211                                .next_value::<std::option::Option<std::string::String>>()?
6212                                .unwrap_or_default();
6213                        }
6214                        __FieldTag::__version => {
6215                            if !fields.insert(__FieldTag::__version) {
6216                                return std::result::Result::Err(A::Error::duplicate_field(
6217                                    "multiple values for version",
6218                                ));
6219                            }
6220                            result.version = map
6221                                .next_value::<std::option::Option<std::string::String>>()?
6222                                .unwrap_or_default();
6223                        }
6224                        __FieldTag::__disabled => {
6225                            if !fields.insert(__FieldTag::__disabled) {
6226                                return std::result::Result::Err(A::Error::duplicate_field(
6227                                    "multiple values for disabled",
6228                                ));
6229                            }
6230                            result.disabled = map
6231                                .next_value::<std::option::Option<bool>>()?
6232                                .unwrap_or_default();
6233                        }
6234                        __FieldTag::Unknown(key) => {
6235                            let value = map.next_value::<serde_json::Value>()?;
6236                            result._unknown_fields.insert(key, value);
6237                        }
6238                    }
6239                }
6240                std::result::Result::Ok(result)
6241            }
6242        }
6243        deserializer.deserialize_any(Visitor)
6244    }
6245}
6246
6247#[doc(hidden)]
6248impl serde::ser::Serialize for Machine {
6249    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
6250    where
6251        S: serde::ser::Serializer,
6252    {
6253        use serde::ser::SerializeMap;
6254        #[allow(unused_imports)]
6255        use std::option::Option::Some;
6256        let mut state = serializer.serialize_map(std::option::Option::None)?;
6257        if !self.name.is_empty() {
6258            state.serialize_entry("name", &self.name)?;
6259        }
6260        if self.create_time.is_some() {
6261            state.serialize_entry("createTime", &self.create_time)?;
6262        }
6263        if self.update_time.is_some() {
6264            state.serialize_entry("updateTime", &self.update_time)?;
6265        }
6266        if !self.labels.is_empty() {
6267            state.serialize_entry("labels", &self.labels)?;
6268        }
6269        if !self.hosted_node.is_empty() {
6270            state.serialize_entry("hostedNode", &self.hosted_node)?;
6271        }
6272        if !self.zone.is_empty() {
6273            state.serialize_entry("zone", &self.zone)?;
6274        }
6275        if !self.version.is_empty() {
6276            state.serialize_entry("version", &self.version)?;
6277        }
6278        if !wkt::internal::is_default(&self.disabled) {
6279            state.serialize_entry("disabled", &self.disabled)?;
6280        }
6281        if !self._unknown_fields.is_empty() {
6282            for (key, value) in self._unknown_fields.iter() {
6283                state.serialize_entry(key, &value)?;
6284            }
6285        }
6286        state.end()
6287    }
6288}
6289
6290impl std::fmt::Debug for Machine {
6291    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6292        let mut debug_struct = f.debug_struct("Machine");
6293        debug_struct.field("name", &self.name);
6294        debug_struct.field("create_time", &self.create_time);
6295        debug_struct.field("update_time", &self.update_time);
6296        debug_struct.field("labels", &self.labels);
6297        debug_struct.field("hosted_node", &self.hosted_node);
6298        debug_struct.field("zone", &self.zone);
6299        debug_struct.field("version", &self.version);
6300        debug_struct.field("disabled", &self.disabled);
6301        if !self._unknown_fields.is_empty() {
6302            debug_struct.field("_unknown_fields", &self._unknown_fields);
6303        }
6304        debug_struct.finish()
6305    }
6306}
6307
6308/// A VPN connection .
6309#[derive(Clone, Default, PartialEq)]
6310#[non_exhaustive]
6311pub struct VpnConnection {
6312    /// Required. The resource name of VPN connection
6313    pub name: std::string::String,
6314
6315    /// Output only. The time when the VPN connection was created.
6316    pub create_time: std::option::Option<wkt::Timestamp>,
6317
6318    /// Output only. The time when the VPN connection was last updated.
6319    pub update_time: std::option::Option<wkt::Timestamp>,
6320
6321    /// Labels associated with this resource.
6322    pub labels: std::collections::HashMap<std::string::String, std::string::String>,
6323
6324    /// NAT gateway IP, or WAN IP address. If a customer has multiple NAT IPs, the
6325    /// customer needs to configure NAT such that only one external IP maps to the
6326    /// GMEC Anthos cluster. This is empty if NAT is not used.
6327    pub nat_gateway_ip: std::string::String,
6328
6329    /// Dynamic routing mode of the VPC network, `regional` or `global`.
6330    #[deprecated]
6331    pub bgp_routing_mode: crate::model::vpn_connection::BgpRoutingMode,
6332
6333    /// The canonical Cluster name to connect to. It is in the form of
6334    /// projects/{project}/locations/{location}/clusters/{cluster}.
6335    pub cluster: std::string::String,
6336
6337    /// The network ID of VPC to connect to.
6338    pub vpc: std::string::String,
6339
6340    /// Optional. Project detail of the VPC network. Required if VPC is in a
6341    /// different project than the cluster project.
6342    pub vpc_project: std::option::Option<crate::model::vpn_connection::VpcProject>,
6343
6344    /// Whether this VPN connection has HA enabled on cluster side. If enabled,
6345    /// when creating VPN connection we will attempt to use 2 ANG floating IPs.
6346    pub enable_high_availability: bool,
6347
6348    /// Optional. The VPN connection Cloud Router name.
6349    pub router: std::string::String,
6350
6351    /// Output only. The created connection details.
6352    pub details: std::option::Option<crate::model::vpn_connection::Details>,
6353
6354    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
6355}
6356
6357impl VpnConnection {
6358    pub fn new() -> Self {
6359        std::default::Default::default()
6360    }
6361
6362    /// Sets the value of [name][crate::model::VpnConnection::name].
6363    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
6364        self.name = v.into();
6365        self
6366    }
6367
6368    /// Sets the value of [create_time][crate::model::VpnConnection::create_time].
6369    pub fn set_create_time<T>(mut self, v: T) -> Self
6370    where
6371        T: std::convert::Into<wkt::Timestamp>,
6372    {
6373        self.create_time = std::option::Option::Some(v.into());
6374        self
6375    }
6376
6377    /// Sets or clears the value of [create_time][crate::model::VpnConnection::create_time].
6378    pub fn set_or_clear_create_time<T>(mut self, v: std::option::Option<T>) -> Self
6379    where
6380        T: std::convert::Into<wkt::Timestamp>,
6381    {
6382        self.create_time = v.map(|x| x.into());
6383        self
6384    }
6385
6386    /// Sets the value of [update_time][crate::model::VpnConnection::update_time].
6387    pub fn set_update_time<T>(mut self, v: T) -> Self
6388    where
6389        T: std::convert::Into<wkt::Timestamp>,
6390    {
6391        self.update_time = std::option::Option::Some(v.into());
6392        self
6393    }
6394
6395    /// Sets or clears the value of [update_time][crate::model::VpnConnection::update_time].
6396    pub fn set_or_clear_update_time<T>(mut self, v: std::option::Option<T>) -> Self
6397    where
6398        T: std::convert::Into<wkt::Timestamp>,
6399    {
6400        self.update_time = v.map(|x| x.into());
6401        self
6402    }
6403
6404    /// Sets the value of [labels][crate::model::VpnConnection::labels].
6405    pub fn set_labels<T, K, V>(mut self, v: T) -> Self
6406    where
6407        T: std::iter::IntoIterator<Item = (K, V)>,
6408        K: std::convert::Into<std::string::String>,
6409        V: std::convert::Into<std::string::String>,
6410    {
6411        use std::iter::Iterator;
6412        self.labels = v.into_iter().map(|(k, v)| (k.into(), v.into())).collect();
6413        self
6414    }
6415
6416    /// Sets the value of [nat_gateway_ip][crate::model::VpnConnection::nat_gateway_ip].
6417    pub fn set_nat_gateway_ip<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
6418        self.nat_gateway_ip = v.into();
6419        self
6420    }
6421
6422    /// Sets the value of [bgp_routing_mode][crate::model::VpnConnection::bgp_routing_mode].
6423    #[deprecated]
6424    pub fn set_bgp_routing_mode<
6425        T: std::convert::Into<crate::model::vpn_connection::BgpRoutingMode>,
6426    >(
6427        mut self,
6428        v: T,
6429    ) -> Self {
6430        self.bgp_routing_mode = v.into();
6431        self
6432    }
6433
6434    /// Sets the value of [cluster][crate::model::VpnConnection::cluster].
6435    pub fn set_cluster<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
6436        self.cluster = v.into();
6437        self
6438    }
6439
6440    /// Sets the value of [vpc][crate::model::VpnConnection::vpc].
6441    pub fn set_vpc<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
6442        self.vpc = v.into();
6443        self
6444    }
6445
6446    /// Sets the value of [vpc_project][crate::model::VpnConnection::vpc_project].
6447    pub fn set_vpc_project<T>(mut self, v: T) -> Self
6448    where
6449        T: std::convert::Into<crate::model::vpn_connection::VpcProject>,
6450    {
6451        self.vpc_project = std::option::Option::Some(v.into());
6452        self
6453    }
6454
6455    /// Sets or clears the value of [vpc_project][crate::model::VpnConnection::vpc_project].
6456    pub fn set_or_clear_vpc_project<T>(mut self, v: std::option::Option<T>) -> Self
6457    where
6458        T: std::convert::Into<crate::model::vpn_connection::VpcProject>,
6459    {
6460        self.vpc_project = v.map(|x| x.into());
6461        self
6462    }
6463
6464    /// Sets the value of [enable_high_availability][crate::model::VpnConnection::enable_high_availability].
6465    pub fn set_enable_high_availability<T: std::convert::Into<bool>>(mut self, v: T) -> Self {
6466        self.enable_high_availability = v.into();
6467        self
6468    }
6469
6470    /// Sets the value of [router][crate::model::VpnConnection::router].
6471    pub fn set_router<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
6472        self.router = v.into();
6473        self
6474    }
6475
6476    /// Sets the value of [details][crate::model::VpnConnection::details].
6477    pub fn set_details<T>(mut self, v: T) -> Self
6478    where
6479        T: std::convert::Into<crate::model::vpn_connection::Details>,
6480    {
6481        self.details = std::option::Option::Some(v.into());
6482        self
6483    }
6484
6485    /// Sets or clears the value of [details][crate::model::VpnConnection::details].
6486    pub fn set_or_clear_details<T>(mut self, v: std::option::Option<T>) -> Self
6487    where
6488        T: std::convert::Into<crate::model::vpn_connection::Details>,
6489    {
6490        self.details = v.map(|x| x.into());
6491        self
6492    }
6493}
6494
6495impl wkt::message::Message for VpnConnection {
6496    fn typename() -> &'static str {
6497        "type.googleapis.com/google.cloud.edgecontainer.v1.VpnConnection"
6498    }
6499}
6500
6501#[doc(hidden)]
6502impl<'de> serde::de::Deserialize<'de> for VpnConnection {
6503    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6504    where
6505        D: serde::Deserializer<'de>,
6506    {
6507        #[allow(non_camel_case_types)]
6508        #[doc(hidden)]
6509        #[derive(PartialEq, Eq, Hash)]
6510        enum __FieldTag {
6511            __name,
6512            __create_time,
6513            __update_time,
6514            __labels,
6515            __nat_gateway_ip,
6516            __bgp_routing_mode,
6517            __cluster,
6518            __vpc,
6519            __vpc_project,
6520            __enable_high_availability,
6521            __router,
6522            __details,
6523            Unknown(std::string::String),
6524        }
6525        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
6526            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6527            where
6528                D: serde::Deserializer<'de>,
6529            {
6530                struct Visitor;
6531                impl<'de> serde::de::Visitor<'de> for Visitor {
6532                    type Value = __FieldTag;
6533                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
6534                        formatter.write_str("a field name for VpnConnection")
6535                    }
6536                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
6537                    where
6538                        E: serde::de::Error,
6539                    {
6540                        use std::result::Result::Ok;
6541                        use std::string::ToString;
6542                        match value {
6543                            "name" => Ok(__FieldTag::__name),
6544                            "createTime" => Ok(__FieldTag::__create_time),
6545                            "create_time" => Ok(__FieldTag::__create_time),
6546                            "updateTime" => Ok(__FieldTag::__update_time),
6547                            "update_time" => Ok(__FieldTag::__update_time),
6548                            "labels" => Ok(__FieldTag::__labels),
6549                            "natGatewayIp" => Ok(__FieldTag::__nat_gateway_ip),
6550                            "nat_gateway_ip" => Ok(__FieldTag::__nat_gateway_ip),
6551                            "bgpRoutingMode" => Ok(__FieldTag::__bgp_routing_mode),
6552                            "bgp_routing_mode" => Ok(__FieldTag::__bgp_routing_mode),
6553                            "cluster" => Ok(__FieldTag::__cluster),
6554                            "vpc" => Ok(__FieldTag::__vpc),
6555                            "vpcProject" => Ok(__FieldTag::__vpc_project),
6556                            "vpc_project" => Ok(__FieldTag::__vpc_project),
6557                            "enableHighAvailability" => Ok(__FieldTag::__enable_high_availability),
6558                            "enable_high_availability" => {
6559                                Ok(__FieldTag::__enable_high_availability)
6560                            }
6561                            "router" => Ok(__FieldTag::__router),
6562                            "details" => Ok(__FieldTag::__details),
6563                            _ => Ok(__FieldTag::Unknown(value.to_string())),
6564                        }
6565                    }
6566                }
6567                deserializer.deserialize_identifier(Visitor)
6568            }
6569        }
6570        struct Visitor;
6571        impl<'de> serde::de::Visitor<'de> for Visitor {
6572            type Value = VpnConnection;
6573            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
6574                formatter.write_str("struct VpnConnection")
6575            }
6576            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
6577            where
6578                A: serde::de::MapAccess<'de>,
6579            {
6580                #[allow(unused_imports)]
6581                use serde::de::Error;
6582                use std::option::Option::Some;
6583                let mut fields = std::collections::HashSet::new();
6584                let mut result = Self::Value::new();
6585                while let Some(tag) = map.next_key::<__FieldTag>()? {
6586                    #[allow(clippy::match_single_binding)]
6587                    match tag {
6588                        __FieldTag::__name => {
6589                            if !fields.insert(__FieldTag::__name) {
6590                                return std::result::Result::Err(A::Error::duplicate_field(
6591                                    "multiple values for name",
6592                                ));
6593                            }
6594                            result.name = map
6595                                .next_value::<std::option::Option<std::string::String>>()?
6596                                .unwrap_or_default();
6597                        }
6598                        __FieldTag::__create_time => {
6599                            if !fields.insert(__FieldTag::__create_time) {
6600                                return std::result::Result::Err(A::Error::duplicate_field(
6601                                    "multiple values for create_time",
6602                                ));
6603                            }
6604                            result.create_time =
6605                                map.next_value::<std::option::Option<wkt::Timestamp>>()?;
6606                        }
6607                        __FieldTag::__update_time => {
6608                            if !fields.insert(__FieldTag::__update_time) {
6609                                return std::result::Result::Err(A::Error::duplicate_field(
6610                                    "multiple values for update_time",
6611                                ));
6612                            }
6613                            result.update_time =
6614                                map.next_value::<std::option::Option<wkt::Timestamp>>()?;
6615                        }
6616                        __FieldTag::__labels => {
6617                            if !fields.insert(__FieldTag::__labels) {
6618                                return std::result::Result::Err(A::Error::duplicate_field(
6619                                    "multiple values for labels",
6620                                ));
6621                            }
6622                            result.labels = map
6623                                .next_value::<std::option::Option<
6624                                    std::collections::HashMap<
6625                                        std::string::String,
6626                                        std::string::String,
6627                                    >,
6628                                >>()?
6629                                .unwrap_or_default();
6630                        }
6631                        __FieldTag::__nat_gateway_ip => {
6632                            if !fields.insert(__FieldTag::__nat_gateway_ip) {
6633                                return std::result::Result::Err(A::Error::duplicate_field(
6634                                    "multiple values for nat_gateway_ip",
6635                                ));
6636                            }
6637                            result.nat_gateway_ip = map
6638                                .next_value::<std::option::Option<std::string::String>>()?
6639                                .unwrap_or_default();
6640                        }
6641                        __FieldTag::__bgp_routing_mode => {
6642                            if !fields.insert(__FieldTag::__bgp_routing_mode) {
6643                                return std::result::Result::Err(A::Error::duplicate_field(
6644                                    "multiple values for bgp_routing_mode",
6645                                ));
6646                            }
6647                            result.bgp_routing_mode =
6648                                map.next_value::<std::option::Option<
6649                                    crate::model::vpn_connection::BgpRoutingMode,
6650                                >>()?
6651                                .unwrap_or_default();
6652                        }
6653                        __FieldTag::__cluster => {
6654                            if !fields.insert(__FieldTag::__cluster) {
6655                                return std::result::Result::Err(A::Error::duplicate_field(
6656                                    "multiple values for cluster",
6657                                ));
6658                            }
6659                            result.cluster = map
6660                                .next_value::<std::option::Option<std::string::String>>()?
6661                                .unwrap_or_default();
6662                        }
6663                        __FieldTag::__vpc => {
6664                            if !fields.insert(__FieldTag::__vpc) {
6665                                return std::result::Result::Err(A::Error::duplicate_field(
6666                                    "multiple values for vpc",
6667                                ));
6668                            }
6669                            result.vpc = map
6670                                .next_value::<std::option::Option<std::string::String>>()?
6671                                .unwrap_or_default();
6672                        }
6673                        __FieldTag::__vpc_project => {
6674                            if !fields.insert(__FieldTag::__vpc_project) {
6675                                return std::result::Result::Err(A::Error::duplicate_field(
6676                                    "multiple values for vpc_project",
6677                                ));
6678                            }
6679                            result.vpc_project = map.next_value::<std::option::Option<crate::model::vpn_connection::VpcProject>>()?
6680                                ;
6681                        }
6682                        __FieldTag::__enable_high_availability => {
6683                            if !fields.insert(__FieldTag::__enable_high_availability) {
6684                                return std::result::Result::Err(A::Error::duplicate_field(
6685                                    "multiple values for enable_high_availability",
6686                                ));
6687                            }
6688                            result.enable_high_availability = map
6689                                .next_value::<std::option::Option<bool>>()?
6690                                .unwrap_or_default();
6691                        }
6692                        __FieldTag::__router => {
6693                            if !fields.insert(__FieldTag::__router) {
6694                                return std::result::Result::Err(A::Error::duplicate_field(
6695                                    "multiple values for router",
6696                                ));
6697                            }
6698                            result.router = map
6699                                .next_value::<std::option::Option<std::string::String>>()?
6700                                .unwrap_or_default();
6701                        }
6702                        __FieldTag::__details => {
6703                            if !fields.insert(__FieldTag::__details) {
6704                                return std::result::Result::Err(A::Error::duplicate_field(
6705                                    "multiple values for details",
6706                                ));
6707                            }
6708                            result.details = map.next_value::<std::option::Option<crate::model::vpn_connection::Details>>()?
6709                                ;
6710                        }
6711                        __FieldTag::Unknown(key) => {
6712                            let value = map.next_value::<serde_json::Value>()?;
6713                            result._unknown_fields.insert(key, value);
6714                        }
6715                    }
6716                }
6717                std::result::Result::Ok(result)
6718            }
6719        }
6720        deserializer.deserialize_any(Visitor)
6721    }
6722}
6723
6724#[doc(hidden)]
6725impl serde::ser::Serialize for VpnConnection {
6726    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
6727    where
6728        S: serde::ser::Serializer,
6729    {
6730        use serde::ser::SerializeMap;
6731        #[allow(unused_imports)]
6732        use std::option::Option::Some;
6733        let mut state = serializer.serialize_map(std::option::Option::None)?;
6734        if !self.name.is_empty() {
6735            state.serialize_entry("name", &self.name)?;
6736        }
6737        if self.create_time.is_some() {
6738            state.serialize_entry("createTime", &self.create_time)?;
6739        }
6740        if self.update_time.is_some() {
6741            state.serialize_entry("updateTime", &self.update_time)?;
6742        }
6743        if !self.labels.is_empty() {
6744            state.serialize_entry("labels", &self.labels)?;
6745        }
6746        if !self.nat_gateway_ip.is_empty() {
6747            state.serialize_entry("natGatewayIp", &self.nat_gateway_ip)?;
6748        }
6749        if !wkt::internal::is_default(&self.bgp_routing_mode) {
6750            state.serialize_entry("bgpRoutingMode", &self.bgp_routing_mode)?;
6751        }
6752        if !self.cluster.is_empty() {
6753            state.serialize_entry("cluster", &self.cluster)?;
6754        }
6755        if !self.vpc.is_empty() {
6756            state.serialize_entry("vpc", &self.vpc)?;
6757        }
6758        if self.vpc_project.is_some() {
6759            state.serialize_entry("vpcProject", &self.vpc_project)?;
6760        }
6761        if !wkt::internal::is_default(&self.enable_high_availability) {
6762            state.serialize_entry("enableHighAvailability", &self.enable_high_availability)?;
6763        }
6764        if !self.router.is_empty() {
6765            state.serialize_entry("router", &self.router)?;
6766        }
6767        if self.details.is_some() {
6768            state.serialize_entry("details", &self.details)?;
6769        }
6770        if !self._unknown_fields.is_empty() {
6771            for (key, value) in self._unknown_fields.iter() {
6772                state.serialize_entry(key, &value)?;
6773            }
6774        }
6775        state.end()
6776    }
6777}
6778
6779impl std::fmt::Debug for VpnConnection {
6780    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6781        let mut debug_struct = f.debug_struct("VpnConnection");
6782        debug_struct.field("name", &self.name);
6783        debug_struct.field("create_time", &self.create_time);
6784        debug_struct.field("update_time", &self.update_time);
6785        debug_struct.field("labels", &self.labels);
6786        debug_struct.field("nat_gateway_ip", &self.nat_gateway_ip);
6787        debug_struct.field("bgp_routing_mode", &self.bgp_routing_mode);
6788        debug_struct.field("cluster", &self.cluster);
6789        debug_struct.field("vpc", &self.vpc);
6790        debug_struct.field("vpc_project", &self.vpc_project);
6791        debug_struct.field("enable_high_availability", &self.enable_high_availability);
6792        debug_struct.field("router", &self.router);
6793        debug_struct.field("details", &self.details);
6794        if !self._unknown_fields.is_empty() {
6795            debug_struct.field("_unknown_fields", &self._unknown_fields);
6796        }
6797        debug_struct.finish()
6798    }
6799}
6800
6801/// Defines additional types related to [VpnConnection].
6802pub mod vpn_connection {
6803    #[allow(unused_imports)]
6804    use super::*;
6805
6806    /// Project detail of the VPC network.
6807    #[derive(Clone, Default, PartialEq)]
6808    #[non_exhaustive]
6809    pub struct VpcProject {
6810        /// The project of the VPC to connect to. If not specified, it is the same as
6811        /// the cluster project.
6812        pub project_id: std::string::String,
6813
6814        /// Optional. Deprecated: do not use.
6815        #[deprecated]
6816        pub service_account: std::string::String,
6817
6818        _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
6819    }
6820
6821    impl VpcProject {
6822        pub fn new() -> Self {
6823            std::default::Default::default()
6824        }
6825
6826        /// Sets the value of [project_id][crate::model::vpn_connection::VpcProject::project_id].
6827        pub fn set_project_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
6828            self.project_id = v.into();
6829            self
6830        }
6831
6832        /// Sets the value of [service_account][crate::model::vpn_connection::VpcProject::service_account].
6833        #[deprecated]
6834        pub fn set_service_account<T: std::convert::Into<std::string::String>>(
6835            mut self,
6836            v: T,
6837        ) -> Self {
6838            self.service_account = v.into();
6839            self
6840        }
6841    }
6842
6843    impl wkt::message::Message for VpcProject {
6844        fn typename() -> &'static str {
6845            "type.googleapis.com/google.cloud.edgecontainer.v1.VpnConnection.VpcProject"
6846        }
6847    }
6848
6849    #[doc(hidden)]
6850    impl<'de> serde::de::Deserialize<'de> for VpcProject {
6851        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6852        where
6853            D: serde::Deserializer<'de>,
6854        {
6855            #[allow(non_camel_case_types)]
6856            #[doc(hidden)]
6857            #[derive(PartialEq, Eq, Hash)]
6858            enum __FieldTag {
6859                __project_id,
6860                __service_account,
6861                Unknown(std::string::String),
6862            }
6863            impl<'de> serde::de::Deserialize<'de> for __FieldTag {
6864                fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6865                where
6866                    D: serde::Deserializer<'de>,
6867                {
6868                    struct Visitor;
6869                    impl<'de> serde::de::Visitor<'de> for Visitor {
6870                        type Value = __FieldTag;
6871                        fn expecting(
6872                            &self,
6873                            formatter: &mut std::fmt::Formatter,
6874                        ) -> std::fmt::Result {
6875                            formatter.write_str("a field name for VpcProject")
6876                        }
6877                        fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
6878                        where
6879                            E: serde::de::Error,
6880                        {
6881                            use std::result::Result::Ok;
6882                            use std::string::ToString;
6883                            match value {
6884                                "projectId" => Ok(__FieldTag::__project_id),
6885                                "project_id" => Ok(__FieldTag::__project_id),
6886                                "serviceAccount" => Ok(__FieldTag::__service_account),
6887                                "service_account" => Ok(__FieldTag::__service_account),
6888                                _ => Ok(__FieldTag::Unknown(value.to_string())),
6889                            }
6890                        }
6891                    }
6892                    deserializer.deserialize_identifier(Visitor)
6893                }
6894            }
6895            struct Visitor;
6896            impl<'de> serde::de::Visitor<'de> for Visitor {
6897                type Value = VpcProject;
6898                fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
6899                    formatter.write_str("struct VpcProject")
6900                }
6901                fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
6902                where
6903                    A: serde::de::MapAccess<'de>,
6904                {
6905                    #[allow(unused_imports)]
6906                    use serde::de::Error;
6907                    use std::option::Option::Some;
6908                    let mut fields = std::collections::HashSet::new();
6909                    let mut result = Self::Value::new();
6910                    while let Some(tag) = map.next_key::<__FieldTag>()? {
6911                        #[allow(clippy::match_single_binding)]
6912                        match tag {
6913                            __FieldTag::__project_id => {
6914                                if !fields.insert(__FieldTag::__project_id) {
6915                                    return std::result::Result::Err(A::Error::duplicate_field(
6916                                        "multiple values for project_id",
6917                                    ));
6918                                }
6919                                result.project_id = map
6920                                    .next_value::<std::option::Option<std::string::String>>()?
6921                                    .unwrap_or_default();
6922                            }
6923                            __FieldTag::__service_account => {
6924                                if !fields.insert(__FieldTag::__service_account) {
6925                                    return std::result::Result::Err(A::Error::duplicate_field(
6926                                        "multiple values for service_account",
6927                                    ));
6928                                }
6929                                result.service_account = map
6930                                    .next_value::<std::option::Option<std::string::String>>()?
6931                                    .unwrap_or_default();
6932                            }
6933                            __FieldTag::Unknown(key) => {
6934                                let value = map.next_value::<serde_json::Value>()?;
6935                                result._unknown_fields.insert(key, value);
6936                            }
6937                        }
6938                    }
6939                    std::result::Result::Ok(result)
6940                }
6941            }
6942            deserializer.deserialize_any(Visitor)
6943        }
6944    }
6945
6946    #[doc(hidden)]
6947    impl serde::ser::Serialize for VpcProject {
6948        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
6949        where
6950            S: serde::ser::Serializer,
6951        {
6952            use serde::ser::SerializeMap;
6953            #[allow(unused_imports)]
6954            use std::option::Option::Some;
6955            let mut state = serializer.serialize_map(std::option::Option::None)?;
6956            if !self.project_id.is_empty() {
6957                state.serialize_entry("projectId", &self.project_id)?;
6958            }
6959            if !self.service_account.is_empty() {
6960                state.serialize_entry("serviceAccount", &self.service_account)?;
6961            }
6962            if !self._unknown_fields.is_empty() {
6963                for (key, value) in self._unknown_fields.iter() {
6964                    state.serialize_entry(key, &value)?;
6965                }
6966            }
6967            state.end()
6968        }
6969    }
6970
6971    impl std::fmt::Debug for VpcProject {
6972        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6973            let mut debug_struct = f.debug_struct("VpcProject");
6974            debug_struct.field("project_id", &self.project_id);
6975            debug_struct.field("service_account", &self.service_account);
6976            if !self._unknown_fields.is_empty() {
6977                debug_struct.field("_unknown_fields", &self._unknown_fields);
6978            }
6979            debug_struct.finish()
6980        }
6981    }
6982
6983    /// The created connection details.
6984    #[derive(Clone, Default, PartialEq)]
6985    #[non_exhaustive]
6986    pub struct Details {
6987        /// The state of this connection.
6988        pub state: crate::model::vpn_connection::details::State,
6989
6990        /// The error message. This is only populated when state=ERROR.
6991        pub error: std::string::String,
6992
6993        /// The Cloud Router info.
6994        pub cloud_router: std::option::Option<crate::model::vpn_connection::details::CloudRouter>,
6995
6996        /// Each connection has multiple Cloud VPN gateways.
6997        pub cloud_vpns: std::vec::Vec<crate::model::vpn_connection::details::CloudVpn>,
6998
6999        _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
7000    }
7001
7002    impl Details {
7003        pub fn new() -> Self {
7004            std::default::Default::default()
7005        }
7006
7007        /// Sets the value of [state][crate::model::vpn_connection::Details::state].
7008        pub fn set_state<T: std::convert::Into<crate::model::vpn_connection::details::State>>(
7009            mut self,
7010            v: T,
7011        ) -> Self {
7012            self.state = v.into();
7013            self
7014        }
7015
7016        /// Sets the value of [error][crate::model::vpn_connection::Details::error].
7017        pub fn set_error<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
7018            self.error = v.into();
7019            self
7020        }
7021
7022        /// Sets the value of [cloud_router][crate::model::vpn_connection::Details::cloud_router].
7023        pub fn set_cloud_router<T>(mut self, v: T) -> Self
7024        where
7025            T: std::convert::Into<crate::model::vpn_connection::details::CloudRouter>,
7026        {
7027            self.cloud_router = std::option::Option::Some(v.into());
7028            self
7029        }
7030
7031        /// Sets or clears the value of [cloud_router][crate::model::vpn_connection::Details::cloud_router].
7032        pub fn set_or_clear_cloud_router<T>(mut self, v: std::option::Option<T>) -> Self
7033        where
7034            T: std::convert::Into<crate::model::vpn_connection::details::CloudRouter>,
7035        {
7036            self.cloud_router = v.map(|x| x.into());
7037            self
7038        }
7039
7040        /// Sets the value of [cloud_vpns][crate::model::vpn_connection::Details::cloud_vpns].
7041        pub fn set_cloud_vpns<T, V>(mut self, v: T) -> Self
7042        where
7043            T: std::iter::IntoIterator<Item = V>,
7044            V: std::convert::Into<crate::model::vpn_connection::details::CloudVpn>,
7045        {
7046            use std::iter::Iterator;
7047            self.cloud_vpns = v.into_iter().map(|i| i.into()).collect();
7048            self
7049        }
7050    }
7051
7052    impl wkt::message::Message for Details {
7053        fn typename() -> &'static str {
7054            "type.googleapis.com/google.cloud.edgecontainer.v1.VpnConnection.Details"
7055        }
7056    }
7057
7058    #[doc(hidden)]
7059    impl<'de> serde::de::Deserialize<'de> for Details {
7060        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7061        where
7062            D: serde::Deserializer<'de>,
7063        {
7064            #[allow(non_camel_case_types)]
7065            #[doc(hidden)]
7066            #[derive(PartialEq, Eq, Hash)]
7067            enum __FieldTag {
7068                __state,
7069                __error,
7070                __cloud_router,
7071                __cloud_vpns,
7072                Unknown(std::string::String),
7073            }
7074            impl<'de> serde::de::Deserialize<'de> for __FieldTag {
7075                fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7076                where
7077                    D: serde::Deserializer<'de>,
7078                {
7079                    struct Visitor;
7080                    impl<'de> serde::de::Visitor<'de> for Visitor {
7081                        type Value = __FieldTag;
7082                        fn expecting(
7083                            &self,
7084                            formatter: &mut std::fmt::Formatter,
7085                        ) -> std::fmt::Result {
7086                            formatter.write_str("a field name for Details")
7087                        }
7088                        fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
7089                        where
7090                            E: serde::de::Error,
7091                        {
7092                            use std::result::Result::Ok;
7093                            use std::string::ToString;
7094                            match value {
7095                                "state" => Ok(__FieldTag::__state),
7096                                "error" => Ok(__FieldTag::__error),
7097                                "cloudRouter" => Ok(__FieldTag::__cloud_router),
7098                                "cloud_router" => Ok(__FieldTag::__cloud_router),
7099                                "cloudVpns" => Ok(__FieldTag::__cloud_vpns),
7100                                "cloud_vpns" => Ok(__FieldTag::__cloud_vpns),
7101                                _ => Ok(__FieldTag::Unknown(value.to_string())),
7102                            }
7103                        }
7104                    }
7105                    deserializer.deserialize_identifier(Visitor)
7106                }
7107            }
7108            struct Visitor;
7109            impl<'de> serde::de::Visitor<'de> for Visitor {
7110                type Value = Details;
7111                fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
7112                    formatter.write_str("struct Details")
7113                }
7114                fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
7115                where
7116                    A: serde::de::MapAccess<'de>,
7117                {
7118                    #[allow(unused_imports)]
7119                    use serde::de::Error;
7120                    use std::option::Option::Some;
7121                    let mut fields = std::collections::HashSet::new();
7122                    let mut result = Self::Value::new();
7123                    while let Some(tag) = map.next_key::<__FieldTag>()? {
7124                        #[allow(clippy::match_single_binding)]
7125                        match tag {
7126                            __FieldTag::__state => {
7127                                if !fields.insert(__FieldTag::__state) {
7128                                    return std::result::Result::Err(A::Error::duplicate_field(
7129                                        "multiple values for state",
7130                                    ));
7131                                }
7132                                result.state = map
7133                                    .next_value::<std::option::Option<
7134                                        crate::model::vpn_connection::details::State,
7135                                    >>()?
7136                                    .unwrap_or_default();
7137                            }
7138                            __FieldTag::__error => {
7139                                if !fields.insert(__FieldTag::__error) {
7140                                    return std::result::Result::Err(A::Error::duplicate_field(
7141                                        "multiple values for error",
7142                                    ));
7143                                }
7144                                result.error = map
7145                                    .next_value::<std::option::Option<std::string::String>>()?
7146                                    .unwrap_or_default();
7147                            }
7148                            __FieldTag::__cloud_router => {
7149                                if !fields.insert(__FieldTag::__cloud_router) {
7150                                    return std::result::Result::Err(A::Error::duplicate_field(
7151                                        "multiple values for cloud_router",
7152                                    ));
7153                                }
7154                                result.cloud_router = map.next_value::<std::option::Option<
7155                                    crate::model::vpn_connection::details::CloudRouter,
7156                                >>()?;
7157                            }
7158                            __FieldTag::__cloud_vpns => {
7159                                if !fields.insert(__FieldTag::__cloud_vpns) {
7160                                    return std::result::Result::Err(A::Error::duplicate_field(
7161                                        "multiple values for cloud_vpns",
7162                                    ));
7163                                }
7164                                result.cloud_vpns = map
7165                                    .next_value::<std::option::Option<
7166                                        std::vec::Vec<
7167                                            crate::model::vpn_connection::details::CloudVpn,
7168                                        >,
7169                                    >>()?
7170                                    .unwrap_or_default();
7171                            }
7172                            __FieldTag::Unknown(key) => {
7173                                let value = map.next_value::<serde_json::Value>()?;
7174                                result._unknown_fields.insert(key, value);
7175                            }
7176                        }
7177                    }
7178                    std::result::Result::Ok(result)
7179                }
7180            }
7181            deserializer.deserialize_any(Visitor)
7182        }
7183    }
7184
7185    #[doc(hidden)]
7186    impl serde::ser::Serialize for Details {
7187        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
7188        where
7189            S: serde::ser::Serializer,
7190        {
7191            use serde::ser::SerializeMap;
7192            #[allow(unused_imports)]
7193            use std::option::Option::Some;
7194            let mut state = serializer.serialize_map(std::option::Option::None)?;
7195            if !wkt::internal::is_default(&self.state) {
7196                state.serialize_entry("state", &self.state)?;
7197            }
7198            if !self.error.is_empty() {
7199                state.serialize_entry("error", &self.error)?;
7200            }
7201            if self.cloud_router.is_some() {
7202                state.serialize_entry("cloudRouter", &self.cloud_router)?;
7203            }
7204            if !self.cloud_vpns.is_empty() {
7205                state.serialize_entry("cloudVpns", &self.cloud_vpns)?;
7206            }
7207            if !self._unknown_fields.is_empty() {
7208                for (key, value) in self._unknown_fields.iter() {
7209                    state.serialize_entry(key, &value)?;
7210                }
7211            }
7212            state.end()
7213        }
7214    }
7215
7216    impl std::fmt::Debug for Details {
7217        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7218            let mut debug_struct = f.debug_struct("Details");
7219            debug_struct.field("state", &self.state);
7220            debug_struct.field("error", &self.error);
7221            debug_struct.field("cloud_router", &self.cloud_router);
7222            debug_struct.field("cloud_vpns", &self.cloud_vpns);
7223            if !self._unknown_fields.is_empty() {
7224                debug_struct.field("_unknown_fields", &self._unknown_fields);
7225            }
7226            debug_struct.finish()
7227        }
7228    }
7229
7230    /// Defines additional types related to [Details].
7231    pub mod details {
7232        #[allow(unused_imports)]
7233        use super::*;
7234
7235        /// The Cloud Router info.
7236        #[derive(Clone, Default, PartialEq)]
7237        #[non_exhaustive]
7238        pub struct CloudRouter {
7239            /// The associated Cloud Router name.
7240            pub name: std::string::String,
7241
7242            _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
7243        }
7244
7245        impl CloudRouter {
7246            pub fn new() -> Self {
7247                std::default::Default::default()
7248            }
7249
7250            /// Sets the value of [name][crate::model::vpn_connection::details::CloudRouter::name].
7251            pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
7252                self.name = v.into();
7253                self
7254            }
7255        }
7256
7257        impl wkt::message::Message for CloudRouter {
7258            fn typename() -> &'static str {
7259                "type.googleapis.com/google.cloud.edgecontainer.v1.VpnConnection.Details.CloudRouter"
7260            }
7261        }
7262
7263        #[doc(hidden)]
7264        impl<'de> serde::de::Deserialize<'de> for CloudRouter {
7265            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7266            where
7267                D: serde::Deserializer<'de>,
7268            {
7269                #[allow(non_camel_case_types)]
7270                #[doc(hidden)]
7271                #[derive(PartialEq, Eq, Hash)]
7272                enum __FieldTag {
7273                    __name,
7274                    Unknown(std::string::String),
7275                }
7276                impl<'de> serde::de::Deserialize<'de> for __FieldTag {
7277                    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7278                    where
7279                        D: serde::Deserializer<'de>,
7280                    {
7281                        struct Visitor;
7282                        impl<'de> serde::de::Visitor<'de> for Visitor {
7283                            type Value = __FieldTag;
7284                            fn expecting(
7285                                &self,
7286                                formatter: &mut std::fmt::Formatter,
7287                            ) -> std::fmt::Result {
7288                                formatter.write_str("a field name for CloudRouter")
7289                            }
7290                            fn visit_str<E>(
7291                                self,
7292                                value: &str,
7293                            ) -> std::result::Result<Self::Value, E>
7294                            where
7295                                E: serde::de::Error,
7296                            {
7297                                use std::result::Result::Ok;
7298                                use std::string::ToString;
7299                                match value {
7300                                    "name" => Ok(__FieldTag::__name),
7301                                    _ => Ok(__FieldTag::Unknown(value.to_string())),
7302                                }
7303                            }
7304                        }
7305                        deserializer.deserialize_identifier(Visitor)
7306                    }
7307                }
7308                struct Visitor;
7309                impl<'de> serde::de::Visitor<'de> for Visitor {
7310                    type Value = CloudRouter;
7311                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
7312                        formatter.write_str("struct CloudRouter")
7313                    }
7314                    fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
7315                    where
7316                        A: serde::de::MapAccess<'de>,
7317                    {
7318                        #[allow(unused_imports)]
7319                        use serde::de::Error;
7320                        use std::option::Option::Some;
7321                        let mut fields = std::collections::HashSet::new();
7322                        let mut result = Self::Value::new();
7323                        while let Some(tag) = map.next_key::<__FieldTag>()? {
7324                            #[allow(clippy::match_single_binding)]
7325                            match tag {
7326                                __FieldTag::__name => {
7327                                    if !fields.insert(__FieldTag::__name) {
7328                                        return std::result::Result::Err(
7329                                            A::Error::duplicate_field("multiple values for name"),
7330                                        );
7331                                    }
7332                                    result.name = map
7333                                        .next_value::<std::option::Option<std::string::String>>()?
7334                                        .unwrap_or_default();
7335                                }
7336                                __FieldTag::Unknown(key) => {
7337                                    let value = map.next_value::<serde_json::Value>()?;
7338                                    result._unknown_fields.insert(key, value);
7339                                }
7340                            }
7341                        }
7342                        std::result::Result::Ok(result)
7343                    }
7344                }
7345                deserializer.deserialize_any(Visitor)
7346            }
7347        }
7348
7349        #[doc(hidden)]
7350        impl serde::ser::Serialize for CloudRouter {
7351            fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
7352            where
7353                S: serde::ser::Serializer,
7354            {
7355                use serde::ser::SerializeMap;
7356                #[allow(unused_imports)]
7357                use std::option::Option::Some;
7358                let mut state = serializer.serialize_map(std::option::Option::None)?;
7359                if !self.name.is_empty() {
7360                    state.serialize_entry("name", &self.name)?;
7361                }
7362                if !self._unknown_fields.is_empty() {
7363                    for (key, value) in self._unknown_fields.iter() {
7364                        state.serialize_entry(key, &value)?;
7365                    }
7366                }
7367                state.end()
7368            }
7369        }
7370
7371        impl std::fmt::Debug for CloudRouter {
7372            fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7373                let mut debug_struct = f.debug_struct("CloudRouter");
7374                debug_struct.field("name", &self.name);
7375                if !self._unknown_fields.is_empty() {
7376                    debug_struct.field("_unknown_fields", &self._unknown_fields);
7377                }
7378                debug_struct.finish()
7379            }
7380        }
7381
7382        /// The Cloud VPN info.
7383        #[derive(Clone, Default, PartialEq)]
7384        #[non_exhaustive]
7385        pub struct CloudVpn {
7386            /// The created Cloud VPN gateway name.
7387            pub gateway: std::string::String,
7388
7389            _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
7390        }
7391
7392        impl CloudVpn {
7393            pub fn new() -> Self {
7394                std::default::Default::default()
7395            }
7396
7397            /// Sets the value of [gateway][crate::model::vpn_connection::details::CloudVpn::gateway].
7398            pub fn set_gateway<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
7399                self.gateway = v.into();
7400                self
7401            }
7402        }
7403
7404        impl wkt::message::Message for CloudVpn {
7405            fn typename() -> &'static str {
7406                "type.googleapis.com/google.cloud.edgecontainer.v1.VpnConnection.Details.CloudVpn"
7407            }
7408        }
7409
7410        #[doc(hidden)]
7411        impl<'de> serde::de::Deserialize<'de> for CloudVpn {
7412            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7413            where
7414                D: serde::Deserializer<'de>,
7415            {
7416                #[allow(non_camel_case_types)]
7417                #[doc(hidden)]
7418                #[derive(PartialEq, Eq, Hash)]
7419                enum __FieldTag {
7420                    __gateway,
7421                    Unknown(std::string::String),
7422                }
7423                impl<'de> serde::de::Deserialize<'de> for __FieldTag {
7424                    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7425                    where
7426                        D: serde::Deserializer<'de>,
7427                    {
7428                        struct Visitor;
7429                        impl<'de> serde::de::Visitor<'de> for Visitor {
7430                            type Value = __FieldTag;
7431                            fn expecting(
7432                                &self,
7433                                formatter: &mut std::fmt::Formatter,
7434                            ) -> std::fmt::Result {
7435                                formatter.write_str("a field name for CloudVpn")
7436                            }
7437                            fn visit_str<E>(
7438                                self,
7439                                value: &str,
7440                            ) -> std::result::Result<Self::Value, E>
7441                            where
7442                                E: serde::de::Error,
7443                            {
7444                                use std::result::Result::Ok;
7445                                use std::string::ToString;
7446                                match value {
7447                                    "gateway" => Ok(__FieldTag::__gateway),
7448                                    _ => Ok(__FieldTag::Unknown(value.to_string())),
7449                                }
7450                            }
7451                        }
7452                        deserializer.deserialize_identifier(Visitor)
7453                    }
7454                }
7455                struct Visitor;
7456                impl<'de> serde::de::Visitor<'de> for Visitor {
7457                    type Value = CloudVpn;
7458                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
7459                        formatter.write_str("struct CloudVpn")
7460                    }
7461                    fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
7462                    where
7463                        A: serde::de::MapAccess<'de>,
7464                    {
7465                        #[allow(unused_imports)]
7466                        use serde::de::Error;
7467                        use std::option::Option::Some;
7468                        let mut fields = std::collections::HashSet::new();
7469                        let mut result = Self::Value::new();
7470                        while let Some(tag) = map.next_key::<__FieldTag>()? {
7471                            #[allow(clippy::match_single_binding)]
7472                            match tag {
7473                                __FieldTag::__gateway => {
7474                                    if !fields.insert(__FieldTag::__gateway) {
7475                                        return std::result::Result::Err(
7476                                            A::Error::duplicate_field(
7477                                                "multiple values for gateway",
7478                                            ),
7479                                        );
7480                                    }
7481                                    result.gateway = map
7482                                        .next_value::<std::option::Option<std::string::String>>()?
7483                                        .unwrap_or_default();
7484                                }
7485                                __FieldTag::Unknown(key) => {
7486                                    let value = map.next_value::<serde_json::Value>()?;
7487                                    result._unknown_fields.insert(key, value);
7488                                }
7489                            }
7490                        }
7491                        std::result::Result::Ok(result)
7492                    }
7493                }
7494                deserializer.deserialize_any(Visitor)
7495            }
7496        }
7497
7498        #[doc(hidden)]
7499        impl serde::ser::Serialize for CloudVpn {
7500            fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
7501            where
7502                S: serde::ser::Serializer,
7503            {
7504                use serde::ser::SerializeMap;
7505                #[allow(unused_imports)]
7506                use std::option::Option::Some;
7507                let mut state = serializer.serialize_map(std::option::Option::None)?;
7508                if !self.gateway.is_empty() {
7509                    state.serialize_entry("gateway", &self.gateway)?;
7510                }
7511                if !self._unknown_fields.is_empty() {
7512                    for (key, value) in self._unknown_fields.iter() {
7513                        state.serialize_entry(key, &value)?;
7514                    }
7515                }
7516                state.end()
7517            }
7518        }
7519
7520        impl std::fmt::Debug for CloudVpn {
7521            fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7522                let mut debug_struct = f.debug_struct("CloudVpn");
7523                debug_struct.field("gateway", &self.gateway);
7524                if !self._unknown_fields.is_empty() {
7525                    debug_struct.field("_unknown_fields", &self._unknown_fields);
7526                }
7527                debug_struct.finish()
7528            }
7529        }
7530
7531        /// The current connection state.
7532        ///
7533        /// # Working with unknown values
7534        ///
7535        /// This enum is defined as `#[non_exhaustive]` because Google Cloud may add
7536        /// additional enum variants at any time. Adding new variants is not considered
7537        /// a breaking change. Applications should write their code in anticipation of:
7538        ///
7539        /// - New values appearing in future releases of the client library, **and**
7540        /// - New values received dynamically, without application changes.
7541        ///
7542        /// Please consult the [Working with enums] section in the user guide for some
7543        /// guidelines.
7544        ///
7545        /// [Working with enums]: https://google-cloud-rust.github.io/working_with_enums.html
7546        #[derive(Clone, Debug, PartialEq)]
7547        #[non_exhaustive]
7548        pub enum State {
7549            /// Unknown.
7550            Unspecified,
7551            /// Connected.
7552            Connected,
7553            /// Still connecting.
7554            Connecting,
7555            /// Error occurred.
7556            Error,
7557            /// If set, the enum was initialized with an unknown value.
7558            ///
7559            /// Applications can examine the value using [State::value] or
7560            /// [State::name].
7561            UnknownValue(state::UnknownValue),
7562        }
7563
7564        #[doc(hidden)]
7565        pub mod state {
7566            #[allow(unused_imports)]
7567            use super::*;
7568            #[derive(Clone, Debug, PartialEq)]
7569            pub struct UnknownValue(pub(crate) wkt::internal::UnknownEnumValue);
7570        }
7571
7572        impl State {
7573            /// Gets the enum value.
7574            ///
7575            /// Returns `None` if the enum contains an unknown value deserialized from
7576            /// the string representation of enums.
7577            pub fn value(&self) -> std::option::Option<i32> {
7578                match self {
7579                    Self::Unspecified => std::option::Option::Some(0),
7580                    Self::Connected => std::option::Option::Some(1),
7581                    Self::Connecting => std::option::Option::Some(2),
7582                    Self::Error => std::option::Option::Some(3),
7583                    Self::UnknownValue(u) => u.0.value(),
7584                }
7585            }
7586
7587            /// Gets the enum value as a string.
7588            ///
7589            /// Returns `None` if the enum contains an unknown value deserialized from
7590            /// the integer representation of enums.
7591            pub fn name(&self) -> std::option::Option<&str> {
7592                match self {
7593                    Self::Unspecified => std::option::Option::Some("STATE_UNSPECIFIED"),
7594                    Self::Connected => std::option::Option::Some("STATE_CONNECTED"),
7595                    Self::Connecting => std::option::Option::Some("STATE_CONNECTING"),
7596                    Self::Error => std::option::Option::Some("STATE_ERROR"),
7597                    Self::UnknownValue(u) => u.0.name(),
7598                }
7599            }
7600        }
7601
7602        impl std::default::Default for State {
7603            fn default() -> Self {
7604                use std::convert::From;
7605                Self::from(0)
7606            }
7607        }
7608
7609        impl std::fmt::Display for State {
7610            fn fmt(
7611                &self,
7612                f: &mut std::fmt::Formatter<'_>,
7613            ) -> std::result::Result<(), std::fmt::Error> {
7614                wkt::internal::display_enum(f, self.name(), self.value())
7615            }
7616        }
7617
7618        impl std::convert::From<i32> for State {
7619            fn from(value: i32) -> Self {
7620                match value {
7621                    0 => Self::Unspecified,
7622                    1 => Self::Connected,
7623                    2 => Self::Connecting,
7624                    3 => Self::Error,
7625                    _ => Self::UnknownValue(state::UnknownValue(
7626                        wkt::internal::UnknownEnumValue::Integer(value),
7627                    )),
7628                }
7629            }
7630        }
7631
7632        impl std::convert::From<&str> for State {
7633            fn from(value: &str) -> Self {
7634                use std::string::ToString;
7635                match value {
7636                    "STATE_UNSPECIFIED" => Self::Unspecified,
7637                    "STATE_CONNECTED" => Self::Connected,
7638                    "STATE_CONNECTING" => Self::Connecting,
7639                    "STATE_ERROR" => Self::Error,
7640                    _ => Self::UnknownValue(state::UnknownValue(
7641                        wkt::internal::UnknownEnumValue::String(value.to_string()),
7642                    )),
7643                }
7644            }
7645        }
7646
7647        impl serde::ser::Serialize for State {
7648            fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
7649            where
7650                S: serde::Serializer,
7651            {
7652                match self {
7653                    Self::Unspecified => serializer.serialize_i32(0),
7654                    Self::Connected => serializer.serialize_i32(1),
7655                    Self::Connecting => serializer.serialize_i32(2),
7656                    Self::Error => serializer.serialize_i32(3),
7657                    Self::UnknownValue(u) => u.0.serialize(serializer),
7658                }
7659            }
7660        }
7661
7662        impl<'de> serde::de::Deserialize<'de> for State {
7663            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7664            where
7665                D: serde::Deserializer<'de>,
7666            {
7667                deserializer.deserialize_any(wkt::internal::EnumVisitor::<State>::new(
7668                    ".google.cloud.edgecontainer.v1.VpnConnection.Details.State",
7669                ))
7670            }
7671        }
7672    }
7673
7674    /// Routing mode.
7675    ///
7676    /// # Working with unknown values
7677    ///
7678    /// This enum is defined as `#[non_exhaustive]` because Google Cloud may add
7679    /// additional enum variants at any time. Adding new variants is not considered
7680    /// a breaking change. Applications should write their code in anticipation of:
7681    ///
7682    /// - New values appearing in future releases of the client library, **and**
7683    /// - New values received dynamically, without application changes.
7684    ///
7685    /// Please consult the [Working with enums] section in the user guide for some
7686    /// guidelines.
7687    ///
7688    /// [Working with enums]: https://google-cloud-rust.github.io/working_with_enums.html
7689    #[derive(Clone, Debug, PartialEq)]
7690    #[non_exhaustive]
7691    pub enum BgpRoutingMode {
7692        /// Unknown.
7693        Unspecified,
7694        /// Regional mode.
7695        Regional,
7696        /// Global mode.
7697        Global,
7698        /// If set, the enum was initialized with an unknown value.
7699        ///
7700        /// Applications can examine the value using [BgpRoutingMode::value] or
7701        /// [BgpRoutingMode::name].
7702        UnknownValue(bgp_routing_mode::UnknownValue),
7703    }
7704
7705    #[doc(hidden)]
7706    pub mod bgp_routing_mode {
7707        #[allow(unused_imports)]
7708        use super::*;
7709        #[derive(Clone, Debug, PartialEq)]
7710        pub struct UnknownValue(pub(crate) wkt::internal::UnknownEnumValue);
7711    }
7712
7713    impl BgpRoutingMode {
7714        /// Gets the enum value.
7715        ///
7716        /// Returns `None` if the enum contains an unknown value deserialized from
7717        /// the string representation of enums.
7718        pub fn value(&self) -> std::option::Option<i32> {
7719            match self {
7720                Self::Unspecified => std::option::Option::Some(0),
7721                Self::Regional => std::option::Option::Some(1),
7722                Self::Global => std::option::Option::Some(2),
7723                Self::UnknownValue(u) => u.0.value(),
7724            }
7725        }
7726
7727        /// Gets the enum value as a string.
7728        ///
7729        /// Returns `None` if the enum contains an unknown value deserialized from
7730        /// the integer representation of enums.
7731        pub fn name(&self) -> std::option::Option<&str> {
7732            match self {
7733                Self::Unspecified => std::option::Option::Some("BGP_ROUTING_MODE_UNSPECIFIED"),
7734                Self::Regional => std::option::Option::Some("REGIONAL"),
7735                Self::Global => std::option::Option::Some("GLOBAL"),
7736                Self::UnknownValue(u) => u.0.name(),
7737            }
7738        }
7739    }
7740
7741    impl std::default::Default for BgpRoutingMode {
7742        fn default() -> Self {
7743            use std::convert::From;
7744            Self::from(0)
7745        }
7746    }
7747
7748    impl std::fmt::Display for BgpRoutingMode {
7749        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
7750            wkt::internal::display_enum(f, self.name(), self.value())
7751        }
7752    }
7753
7754    impl std::convert::From<i32> for BgpRoutingMode {
7755        fn from(value: i32) -> Self {
7756            match value {
7757                0 => Self::Unspecified,
7758                1 => Self::Regional,
7759                2 => Self::Global,
7760                _ => Self::UnknownValue(bgp_routing_mode::UnknownValue(
7761                    wkt::internal::UnknownEnumValue::Integer(value),
7762                )),
7763            }
7764        }
7765    }
7766
7767    impl std::convert::From<&str> for BgpRoutingMode {
7768        fn from(value: &str) -> Self {
7769            use std::string::ToString;
7770            match value {
7771                "BGP_ROUTING_MODE_UNSPECIFIED" => Self::Unspecified,
7772                "REGIONAL" => Self::Regional,
7773                "GLOBAL" => Self::Global,
7774                _ => Self::UnknownValue(bgp_routing_mode::UnknownValue(
7775                    wkt::internal::UnknownEnumValue::String(value.to_string()),
7776                )),
7777            }
7778        }
7779    }
7780
7781    impl serde::ser::Serialize for BgpRoutingMode {
7782        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
7783        where
7784            S: serde::Serializer,
7785        {
7786            match self {
7787                Self::Unspecified => serializer.serialize_i32(0),
7788                Self::Regional => serializer.serialize_i32(1),
7789                Self::Global => serializer.serialize_i32(2),
7790                Self::UnknownValue(u) => u.0.serialize(serializer),
7791            }
7792        }
7793    }
7794
7795    impl<'de> serde::de::Deserialize<'de> for BgpRoutingMode {
7796        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7797        where
7798            D: serde::Deserializer<'de>,
7799        {
7800            deserializer.deserialize_any(wkt::internal::EnumVisitor::<BgpRoutingMode>::new(
7801                ".google.cloud.edgecontainer.v1.VpnConnection.BgpRoutingMode",
7802            ))
7803        }
7804    }
7805}
7806
7807/// Metadata for a given
7808/// [google.cloud.location.Location][google.cloud.location.Location].
7809///
7810/// [google.cloud.location.Location]: location::model::Location
7811#[derive(Clone, Default, PartialEq)]
7812#[non_exhaustive]
7813pub struct LocationMetadata {
7814    /// The set of available Google Distributed Cloud Edge zones in the location.
7815    /// The map is keyed by the lowercase ID of each zone.
7816    pub available_zones: std::collections::HashMap<std::string::String, crate::model::ZoneMetadata>,
7817
7818    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
7819}
7820
7821impl LocationMetadata {
7822    pub fn new() -> Self {
7823        std::default::Default::default()
7824    }
7825
7826    /// Sets the value of [available_zones][crate::model::LocationMetadata::available_zones].
7827    pub fn set_available_zones<T, K, V>(mut self, v: T) -> Self
7828    where
7829        T: std::iter::IntoIterator<Item = (K, V)>,
7830        K: std::convert::Into<std::string::String>,
7831        V: std::convert::Into<crate::model::ZoneMetadata>,
7832    {
7833        use std::iter::Iterator;
7834        self.available_zones = v.into_iter().map(|(k, v)| (k.into(), v.into())).collect();
7835        self
7836    }
7837}
7838
7839impl wkt::message::Message for LocationMetadata {
7840    fn typename() -> &'static str {
7841        "type.googleapis.com/google.cloud.edgecontainer.v1.LocationMetadata"
7842    }
7843}
7844
7845#[doc(hidden)]
7846impl<'de> serde::de::Deserialize<'de> for LocationMetadata {
7847    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7848    where
7849        D: serde::Deserializer<'de>,
7850    {
7851        #[allow(non_camel_case_types)]
7852        #[doc(hidden)]
7853        #[derive(PartialEq, Eq, Hash)]
7854        enum __FieldTag {
7855            __available_zones,
7856            Unknown(std::string::String),
7857        }
7858        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
7859            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7860            where
7861                D: serde::Deserializer<'de>,
7862            {
7863                struct Visitor;
7864                impl<'de> serde::de::Visitor<'de> for Visitor {
7865                    type Value = __FieldTag;
7866                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
7867                        formatter.write_str("a field name for LocationMetadata")
7868                    }
7869                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
7870                    where
7871                        E: serde::de::Error,
7872                    {
7873                        use std::result::Result::Ok;
7874                        use std::string::ToString;
7875                        match value {
7876                            "availableZones" => Ok(__FieldTag::__available_zones),
7877                            "available_zones" => Ok(__FieldTag::__available_zones),
7878                            _ => Ok(__FieldTag::Unknown(value.to_string())),
7879                        }
7880                    }
7881                }
7882                deserializer.deserialize_identifier(Visitor)
7883            }
7884        }
7885        struct Visitor;
7886        impl<'de> serde::de::Visitor<'de> for Visitor {
7887            type Value = LocationMetadata;
7888            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
7889                formatter.write_str("struct LocationMetadata")
7890            }
7891            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
7892            where
7893                A: serde::de::MapAccess<'de>,
7894            {
7895                #[allow(unused_imports)]
7896                use serde::de::Error;
7897                use std::option::Option::Some;
7898                let mut fields = std::collections::HashSet::new();
7899                let mut result = Self::Value::new();
7900                while let Some(tag) = map.next_key::<__FieldTag>()? {
7901                    #[allow(clippy::match_single_binding)]
7902                    match tag {
7903                        __FieldTag::__available_zones => {
7904                            if !fields.insert(__FieldTag::__available_zones) {
7905                                return std::result::Result::Err(A::Error::duplicate_field(
7906                                    "multiple values for available_zones",
7907                                ));
7908                            }
7909                            result.available_zones = map
7910                                .next_value::<std::option::Option<
7911                                    std::collections::HashMap<
7912                                        std::string::String,
7913                                        crate::model::ZoneMetadata,
7914                                    >,
7915                                >>()?
7916                                .unwrap_or_default();
7917                        }
7918                        __FieldTag::Unknown(key) => {
7919                            let value = map.next_value::<serde_json::Value>()?;
7920                            result._unknown_fields.insert(key, value);
7921                        }
7922                    }
7923                }
7924                std::result::Result::Ok(result)
7925            }
7926        }
7927        deserializer.deserialize_any(Visitor)
7928    }
7929}
7930
7931#[doc(hidden)]
7932impl serde::ser::Serialize for LocationMetadata {
7933    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
7934    where
7935        S: serde::ser::Serializer,
7936    {
7937        use serde::ser::SerializeMap;
7938        #[allow(unused_imports)]
7939        use std::option::Option::Some;
7940        let mut state = serializer.serialize_map(std::option::Option::None)?;
7941        if !self.available_zones.is_empty() {
7942            state.serialize_entry("availableZones", &self.available_zones)?;
7943        }
7944        if !self._unknown_fields.is_empty() {
7945            for (key, value) in self._unknown_fields.iter() {
7946                state.serialize_entry(key, &value)?;
7947            }
7948        }
7949        state.end()
7950    }
7951}
7952
7953impl std::fmt::Debug for LocationMetadata {
7954    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7955        let mut debug_struct = f.debug_struct("LocationMetadata");
7956        debug_struct.field("available_zones", &self.available_zones);
7957        if !self._unknown_fields.is_empty() {
7958            debug_struct.field("_unknown_fields", &self._unknown_fields);
7959        }
7960        debug_struct.finish()
7961    }
7962}
7963
7964/// A Google Distributed Cloud Edge zone where edge machines are located.
7965#[derive(Clone, Default, PartialEq)]
7966#[non_exhaustive]
7967pub struct ZoneMetadata {
7968    /// Quota for resources in this zone.
7969    pub quota: std::vec::Vec<crate::model::Quota>,
7970
7971    /// The map keyed by rack name and has value of RackType.
7972    pub rack_types:
7973        std::collections::HashMap<std::string::String, crate::model::zone_metadata::RackType>,
7974
7975    /// Config data for the zone.
7976    pub config_data: std::option::Option<crate::model::ConfigData>,
7977
7978    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
7979}
7980
7981impl ZoneMetadata {
7982    pub fn new() -> Self {
7983        std::default::Default::default()
7984    }
7985
7986    /// Sets the value of [quota][crate::model::ZoneMetadata::quota].
7987    pub fn set_quota<T, V>(mut self, v: T) -> Self
7988    where
7989        T: std::iter::IntoIterator<Item = V>,
7990        V: std::convert::Into<crate::model::Quota>,
7991    {
7992        use std::iter::Iterator;
7993        self.quota = v.into_iter().map(|i| i.into()).collect();
7994        self
7995    }
7996
7997    /// Sets the value of [rack_types][crate::model::ZoneMetadata::rack_types].
7998    pub fn set_rack_types<T, K, V>(mut self, v: T) -> Self
7999    where
8000        T: std::iter::IntoIterator<Item = (K, V)>,
8001        K: std::convert::Into<std::string::String>,
8002        V: std::convert::Into<crate::model::zone_metadata::RackType>,
8003    {
8004        use std::iter::Iterator;
8005        self.rack_types = v.into_iter().map(|(k, v)| (k.into(), v.into())).collect();
8006        self
8007    }
8008
8009    /// Sets the value of [config_data][crate::model::ZoneMetadata::config_data].
8010    pub fn set_config_data<T>(mut self, v: T) -> Self
8011    where
8012        T: std::convert::Into<crate::model::ConfigData>,
8013    {
8014        self.config_data = std::option::Option::Some(v.into());
8015        self
8016    }
8017
8018    /// Sets or clears the value of [config_data][crate::model::ZoneMetadata::config_data].
8019    pub fn set_or_clear_config_data<T>(mut self, v: std::option::Option<T>) -> Self
8020    where
8021        T: std::convert::Into<crate::model::ConfigData>,
8022    {
8023        self.config_data = v.map(|x| x.into());
8024        self
8025    }
8026}
8027
8028impl wkt::message::Message for ZoneMetadata {
8029    fn typename() -> &'static str {
8030        "type.googleapis.com/google.cloud.edgecontainer.v1.ZoneMetadata"
8031    }
8032}
8033
8034#[doc(hidden)]
8035impl<'de> serde::de::Deserialize<'de> for ZoneMetadata {
8036    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8037    where
8038        D: serde::Deserializer<'de>,
8039    {
8040        #[allow(non_camel_case_types)]
8041        #[doc(hidden)]
8042        #[derive(PartialEq, Eq, Hash)]
8043        enum __FieldTag {
8044            __quota,
8045            __rack_types,
8046            __config_data,
8047            Unknown(std::string::String),
8048        }
8049        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
8050            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8051            where
8052                D: serde::Deserializer<'de>,
8053            {
8054                struct Visitor;
8055                impl<'de> serde::de::Visitor<'de> for Visitor {
8056                    type Value = __FieldTag;
8057                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
8058                        formatter.write_str("a field name for ZoneMetadata")
8059                    }
8060                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
8061                    where
8062                        E: serde::de::Error,
8063                    {
8064                        use std::result::Result::Ok;
8065                        use std::string::ToString;
8066                        match value {
8067                            "quota" => Ok(__FieldTag::__quota),
8068                            "rackTypes" => Ok(__FieldTag::__rack_types),
8069                            "rack_types" => Ok(__FieldTag::__rack_types),
8070                            "configData" => Ok(__FieldTag::__config_data),
8071                            "config_data" => Ok(__FieldTag::__config_data),
8072                            _ => Ok(__FieldTag::Unknown(value.to_string())),
8073                        }
8074                    }
8075                }
8076                deserializer.deserialize_identifier(Visitor)
8077            }
8078        }
8079        struct Visitor;
8080        impl<'de> serde::de::Visitor<'de> for Visitor {
8081            type Value = ZoneMetadata;
8082            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
8083                formatter.write_str("struct ZoneMetadata")
8084            }
8085            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
8086            where
8087                A: serde::de::MapAccess<'de>,
8088            {
8089                #[allow(unused_imports)]
8090                use serde::de::Error;
8091                use std::option::Option::Some;
8092                let mut fields = std::collections::HashSet::new();
8093                let mut result = Self::Value::new();
8094                while let Some(tag) = map.next_key::<__FieldTag>()? {
8095                    #[allow(clippy::match_single_binding)]
8096                    match tag {
8097                        __FieldTag::__quota => {
8098                            if !fields.insert(__FieldTag::__quota) {
8099                                return std::result::Result::Err(A::Error::duplicate_field(
8100                                    "multiple values for quota",
8101                                ));
8102                            }
8103                            result.quota = map.next_value::<std::option::Option<std::vec::Vec<crate::model::Quota>>>()?.unwrap_or_default();
8104                        }
8105                        __FieldTag::__rack_types => {
8106                            if !fields.insert(__FieldTag::__rack_types) {
8107                                return std::result::Result::Err(A::Error::duplicate_field(
8108                                    "multiple values for rack_types",
8109                                ));
8110                            }
8111                            result.rack_types = map
8112                                .next_value::<std::option::Option<
8113                                    std::collections::HashMap<
8114                                        std::string::String,
8115                                        crate::model::zone_metadata::RackType,
8116                                    >,
8117                                >>()?
8118                                .unwrap_or_default();
8119                        }
8120                        __FieldTag::__config_data => {
8121                            if !fields.insert(__FieldTag::__config_data) {
8122                                return std::result::Result::Err(A::Error::duplicate_field(
8123                                    "multiple values for config_data",
8124                                ));
8125                            }
8126                            result.config_data =
8127                                map.next_value::<std::option::Option<crate::model::ConfigData>>()?;
8128                        }
8129                        __FieldTag::Unknown(key) => {
8130                            let value = map.next_value::<serde_json::Value>()?;
8131                            result._unknown_fields.insert(key, value);
8132                        }
8133                    }
8134                }
8135                std::result::Result::Ok(result)
8136            }
8137        }
8138        deserializer.deserialize_any(Visitor)
8139    }
8140}
8141
8142#[doc(hidden)]
8143impl serde::ser::Serialize for ZoneMetadata {
8144    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
8145    where
8146        S: serde::ser::Serializer,
8147    {
8148        use serde::ser::SerializeMap;
8149        #[allow(unused_imports)]
8150        use std::option::Option::Some;
8151        let mut state = serializer.serialize_map(std::option::Option::None)?;
8152        if !self.quota.is_empty() {
8153            state.serialize_entry("quota", &self.quota)?;
8154        }
8155        if !self.rack_types.is_empty() {
8156            state.serialize_entry("rackTypes", &self.rack_types)?;
8157        }
8158        if self.config_data.is_some() {
8159            state.serialize_entry("configData", &self.config_data)?;
8160        }
8161        if !self._unknown_fields.is_empty() {
8162            for (key, value) in self._unknown_fields.iter() {
8163                state.serialize_entry(key, &value)?;
8164            }
8165        }
8166        state.end()
8167    }
8168}
8169
8170impl std::fmt::Debug for ZoneMetadata {
8171    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8172        let mut debug_struct = f.debug_struct("ZoneMetadata");
8173        debug_struct.field("quota", &self.quota);
8174        debug_struct.field("rack_types", &self.rack_types);
8175        debug_struct.field("config_data", &self.config_data);
8176        if !self._unknown_fields.is_empty() {
8177            debug_struct.field("_unknown_fields", &self._unknown_fields);
8178        }
8179        debug_struct.finish()
8180    }
8181}
8182
8183/// Defines additional types related to [ZoneMetadata].
8184pub mod zone_metadata {
8185    #[allow(unused_imports)]
8186    use super::*;
8187
8188    /// Type of the rack.
8189    ///
8190    /// # Working with unknown values
8191    ///
8192    /// This enum is defined as `#[non_exhaustive]` because Google Cloud may add
8193    /// additional enum variants at any time. Adding new variants is not considered
8194    /// a breaking change. Applications should write their code in anticipation of:
8195    ///
8196    /// - New values appearing in future releases of the client library, **and**
8197    /// - New values received dynamically, without application changes.
8198    ///
8199    /// Please consult the [Working with enums] section in the user guide for some
8200    /// guidelines.
8201    ///
8202    /// [Working with enums]: https://google-cloud-rust.github.io/working_with_enums.html
8203    #[derive(Clone, Debug, PartialEq)]
8204    #[non_exhaustive]
8205    pub enum RackType {
8206        /// Unspecified rack type, single rack also belongs to this type.
8207        Unspecified,
8208        /// Base rack type, a pair of two modified Config-1 racks containing
8209        /// Aggregation switches.
8210        Base,
8211        /// Expansion rack type, also known as standalone racks,
8212        /// added by customers on demand.
8213        Expansion,
8214        /// If set, the enum was initialized with an unknown value.
8215        ///
8216        /// Applications can examine the value using [RackType::value] or
8217        /// [RackType::name].
8218        UnknownValue(rack_type::UnknownValue),
8219    }
8220
8221    #[doc(hidden)]
8222    pub mod rack_type {
8223        #[allow(unused_imports)]
8224        use super::*;
8225        #[derive(Clone, Debug, PartialEq)]
8226        pub struct UnknownValue(pub(crate) wkt::internal::UnknownEnumValue);
8227    }
8228
8229    impl RackType {
8230        /// Gets the enum value.
8231        ///
8232        /// Returns `None` if the enum contains an unknown value deserialized from
8233        /// the string representation of enums.
8234        pub fn value(&self) -> std::option::Option<i32> {
8235            match self {
8236                Self::Unspecified => std::option::Option::Some(0),
8237                Self::Base => std::option::Option::Some(1),
8238                Self::Expansion => std::option::Option::Some(2),
8239                Self::UnknownValue(u) => u.0.value(),
8240            }
8241        }
8242
8243        /// Gets the enum value as a string.
8244        ///
8245        /// Returns `None` if the enum contains an unknown value deserialized from
8246        /// the integer representation of enums.
8247        pub fn name(&self) -> std::option::Option<&str> {
8248            match self {
8249                Self::Unspecified => std::option::Option::Some("RACK_TYPE_UNSPECIFIED"),
8250                Self::Base => std::option::Option::Some("BASE"),
8251                Self::Expansion => std::option::Option::Some("EXPANSION"),
8252                Self::UnknownValue(u) => u.0.name(),
8253            }
8254        }
8255    }
8256
8257    impl std::default::Default for RackType {
8258        fn default() -> Self {
8259            use std::convert::From;
8260            Self::from(0)
8261        }
8262    }
8263
8264    impl std::fmt::Display for RackType {
8265        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
8266            wkt::internal::display_enum(f, self.name(), self.value())
8267        }
8268    }
8269
8270    impl std::convert::From<i32> for RackType {
8271        fn from(value: i32) -> Self {
8272            match value {
8273                0 => Self::Unspecified,
8274                1 => Self::Base,
8275                2 => Self::Expansion,
8276                _ => Self::UnknownValue(rack_type::UnknownValue(
8277                    wkt::internal::UnknownEnumValue::Integer(value),
8278                )),
8279            }
8280        }
8281    }
8282
8283    impl std::convert::From<&str> for RackType {
8284        fn from(value: &str) -> Self {
8285            use std::string::ToString;
8286            match value {
8287                "RACK_TYPE_UNSPECIFIED" => Self::Unspecified,
8288                "BASE" => Self::Base,
8289                "EXPANSION" => Self::Expansion,
8290                _ => Self::UnknownValue(rack_type::UnknownValue(
8291                    wkt::internal::UnknownEnumValue::String(value.to_string()),
8292                )),
8293            }
8294        }
8295    }
8296
8297    impl serde::ser::Serialize for RackType {
8298        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
8299        where
8300            S: serde::Serializer,
8301        {
8302            match self {
8303                Self::Unspecified => serializer.serialize_i32(0),
8304                Self::Base => serializer.serialize_i32(1),
8305                Self::Expansion => serializer.serialize_i32(2),
8306                Self::UnknownValue(u) => u.0.serialize(serializer),
8307            }
8308        }
8309    }
8310
8311    impl<'de> serde::de::Deserialize<'de> for RackType {
8312        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8313        where
8314            D: serde::Deserializer<'de>,
8315        {
8316            deserializer.deserialize_any(wkt::internal::EnumVisitor::<RackType>::new(
8317                ".google.cloud.edgecontainer.v1.ZoneMetadata.RackType",
8318            ))
8319        }
8320    }
8321}
8322
8323/// Config data holds all the config related data for the zone.
8324#[derive(Clone, Default, PartialEq)]
8325#[non_exhaustive]
8326pub struct ConfigData {
8327    /// list of available v4 ip pools for external loadbalancer
8328    pub available_external_lb_pools_ipv4: std::vec::Vec<std::string::String>,
8329
8330    /// list of available v6 ip pools for external loadbalancer
8331    pub available_external_lb_pools_ipv6: std::vec::Vec<std::string::String>,
8332
8333    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
8334}
8335
8336impl ConfigData {
8337    pub fn new() -> Self {
8338        std::default::Default::default()
8339    }
8340
8341    /// Sets the value of [available_external_lb_pools_ipv4][crate::model::ConfigData::available_external_lb_pools_ipv4].
8342    pub fn set_available_external_lb_pools_ipv4<T, V>(mut self, v: T) -> Self
8343    where
8344        T: std::iter::IntoIterator<Item = V>,
8345        V: std::convert::Into<std::string::String>,
8346    {
8347        use std::iter::Iterator;
8348        self.available_external_lb_pools_ipv4 = v.into_iter().map(|i| i.into()).collect();
8349        self
8350    }
8351
8352    /// Sets the value of [available_external_lb_pools_ipv6][crate::model::ConfigData::available_external_lb_pools_ipv6].
8353    pub fn set_available_external_lb_pools_ipv6<T, V>(mut self, v: T) -> Self
8354    where
8355        T: std::iter::IntoIterator<Item = V>,
8356        V: std::convert::Into<std::string::String>,
8357    {
8358        use std::iter::Iterator;
8359        self.available_external_lb_pools_ipv6 = v.into_iter().map(|i| i.into()).collect();
8360        self
8361    }
8362}
8363
8364impl wkt::message::Message for ConfigData {
8365    fn typename() -> &'static str {
8366        "type.googleapis.com/google.cloud.edgecontainer.v1.ConfigData"
8367    }
8368}
8369
8370#[doc(hidden)]
8371impl<'de> serde::de::Deserialize<'de> for ConfigData {
8372    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8373    where
8374        D: serde::Deserializer<'de>,
8375    {
8376        #[allow(non_camel_case_types)]
8377        #[doc(hidden)]
8378        #[derive(PartialEq, Eq, Hash)]
8379        enum __FieldTag {
8380            __available_external_lb_pools_ipv4,
8381            __available_external_lb_pools_ipv6,
8382            Unknown(std::string::String),
8383        }
8384        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
8385            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8386            where
8387                D: serde::Deserializer<'de>,
8388            {
8389                struct Visitor;
8390                impl<'de> serde::de::Visitor<'de> for Visitor {
8391                    type Value = __FieldTag;
8392                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
8393                        formatter.write_str("a field name for ConfigData")
8394                    }
8395                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
8396                    where
8397                        E: serde::de::Error,
8398                    {
8399                        use std::result::Result::Ok;
8400                        use std::string::ToString;
8401                        match value {
8402                            "availableExternalLbPoolsIpv4" => {
8403                                Ok(__FieldTag::__available_external_lb_pools_ipv4)
8404                            }
8405                            "available_external_lb_pools_ipv4" => {
8406                                Ok(__FieldTag::__available_external_lb_pools_ipv4)
8407                            }
8408                            "availableExternalLbPoolsIpv6" => {
8409                                Ok(__FieldTag::__available_external_lb_pools_ipv6)
8410                            }
8411                            "available_external_lb_pools_ipv6" => {
8412                                Ok(__FieldTag::__available_external_lb_pools_ipv6)
8413                            }
8414                            _ => Ok(__FieldTag::Unknown(value.to_string())),
8415                        }
8416                    }
8417                }
8418                deserializer.deserialize_identifier(Visitor)
8419            }
8420        }
8421        struct Visitor;
8422        impl<'de> serde::de::Visitor<'de> for Visitor {
8423            type Value = ConfigData;
8424            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
8425                formatter.write_str("struct ConfigData")
8426            }
8427            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
8428            where
8429                A: serde::de::MapAccess<'de>,
8430            {
8431                #[allow(unused_imports)]
8432                use serde::de::Error;
8433                use std::option::Option::Some;
8434                let mut fields = std::collections::HashSet::new();
8435                let mut result = Self::Value::new();
8436                while let Some(tag) = map.next_key::<__FieldTag>()? {
8437                    #[allow(clippy::match_single_binding)]
8438                    match tag {
8439                        __FieldTag::__available_external_lb_pools_ipv4 => {
8440                            if !fields.insert(__FieldTag::__available_external_lb_pools_ipv4) {
8441                                return std::result::Result::Err(A::Error::duplicate_field(
8442                                    "multiple values for available_external_lb_pools_ipv4",
8443                                ));
8444                            }
8445                            result.available_external_lb_pools_ipv4 = map.next_value::<std::option::Option<std::vec::Vec<std::string::String>>>()?.unwrap_or_default();
8446                        }
8447                        __FieldTag::__available_external_lb_pools_ipv6 => {
8448                            if !fields.insert(__FieldTag::__available_external_lb_pools_ipv6) {
8449                                return std::result::Result::Err(A::Error::duplicate_field(
8450                                    "multiple values for available_external_lb_pools_ipv6",
8451                                ));
8452                            }
8453                            result.available_external_lb_pools_ipv6 = map.next_value::<std::option::Option<std::vec::Vec<std::string::String>>>()?.unwrap_or_default();
8454                        }
8455                        __FieldTag::Unknown(key) => {
8456                            let value = map.next_value::<serde_json::Value>()?;
8457                            result._unknown_fields.insert(key, value);
8458                        }
8459                    }
8460                }
8461                std::result::Result::Ok(result)
8462            }
8463        }
8464        deserializer.deserialize_any(Visitor)
8465    }
8466}
8467
8468#[doc(hidden)]
8469impl serde::ser::Serialize for ConfigData {
8470    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
8471    where
8472        S: serde::ser::Serializer,
8473    {
8474        use serde::ser::SerializeMap;
8475        #[allow(unused_imports)]
8476        use std::option::Option::Some;
8477        let mut state = serializer.serialize_map(std::option::Option::None)?;
8478        if !self.available_external_lb_pools_ipv4.is_empty() {
8479            state.serialize_entry(
8480                "availableExternalLbPoolsIpv4",
8481                &self.available_external_lb_pools_ipv4,
8482            )?;
8483        }
8484        if !self.available_external_lb_pools_ipv6.is_empty() {
8485            state.serialize_entry(
8486                "availableExternalLbPoolsIpv6",
8487                &self.available_external_lb_pools_ipv6,
8488            )?;
8489        }
8490        if !self._unknown_fields.is_empty() {
8491            for (key, value) in self._unknown_fields.iter() {
8492                state.serialize_entry(key, &value)?;
8493            }
8494        }
8495        state.end()
8496    }
8497}
8498
8499impl std::fmt::Debug for ConfigData {
8500    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8501        let mut debug_struct = f.debug_struct("ConfigData");
8502        debug_struct.field(
8503            "available_external_lb_pools_ipv4",
8504            &self.available_external_lb_pools_ipv4,
8505        );
8506        debug_struct.field(
8507            "available_external_lb_pools_ipv6",
8508            &self.available_external_lb_pools_ipv6,
8509        );
8510        if !self._unknown_fields.is_empty() {
8511            debug_struct.field("_unknown_fields", &self._unknown_fields);
8512        }
8513        debug_struct.finish()
8514    }
8515}
8516
8517/// Represents quota for Edge Container resources.
8518#[derive(Clone, Default, PartialEq)]
8519#[non_exhaustive]
8520pub struct Quota {
8521    /// Name of the quota metric.
8522    pub metric: std::string::String,
8523
8524    /// Quota limit for this metric.
8525    pub limit: f64,
8526
8527    /// Current usage of this metric.
8528    pub usage: f64,
8529
8530    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
8531}
8532
8533impl Quota {
8534    pub fn new() -> Self {
8535        std::default::Default::default()
8536    }
8537
8538    /// Sets the value of [metric][crate::model::Quota::metric].
8539    pub fn set_metric<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
8540        self.metric = v.into();
8541        self
8542    }
8543
8544    /// Sets the value of [limit][crate::model::Quota::limit].
8545    pub fn set_limit<T: std::convert::Into<f64>>(mut self, v: T) -> Self {
8546        self.limit = v.into();
8547        self
8548    }
8549
8550    /// Sets the value of [usage][crate::model::Quota::usage].
8551    pub fn set_usage<T: std::convert::Into<f64>>(mut self, v: T) -> Self {
8552        self.usage = v.into();
8553        self
8554    }
8555}
8556
8557impl wkt::message::Message for Quota {
8558    fn typename() -> &'static str {
8559        "type.googleapis.com/google.cloud.edgecontainer.v1.Quota"
8560    }
8561}
8562
8563#[doc(hidden)]
8564impl<'de> serde::de::Deserialize<'de> for Quota {
8565    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8566    where
8567        D: serde::Deserializer<'de>,
8568    {
8569        #[allow(non_camel_case_types)]
8570        #[doc(hidden)]
8571        #[derive(PartialEq, Eq, Hash)]
8572        enum __FieldTag {
8573            __metric,
8574            __limit,
8575            __usage,
8576            Unknown(std::string::String),
8577        }
8578        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
8579            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8580            where
8581                D: serde::Deserializer<'de>,
8582            {
8583                struct Visitor;
8584                impl<'de> serde::de::Visitor<'de> for Visitor {
8585                    type Value = __FieldTag;
8586                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
8587                        formatter.write_str("a field name for Quota")
8588                    }
8589                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
8590                    where
8591                        E: serde::de::Error,
8592                    {
8593                        use std::result::Result::Ok;
8594                        use std::string::ToString;
8595                        match value {
8596                            "metric" => Ok(__FieldTag::__metric),
8597                            "limit" => Ok(__FieldTag::__limit),
8598                            "usage" => Ok(__FieldTag::__usage),
8599                            _ => Ok(__FieldTag::Unknown(value.to_string())),
8600                        }
8601                    }
8602                }
8603                deserializer.deserialize_identifier(Visitor)
8604            }
8605        }
8606        struct Visitor;
8607        impl<'de> serde::de::Visitor<'de> for Visitor {
8608            type Value = Quota;
8609            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
8610                formatter.write_str("struct Quota")
8611            }
8612            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
8613            where
8614                A: serde::de::MapAccess<'de>,
8615            {
8616                #[allow(unused_imports)]
8617                use serde::de::Error;
8618                use std::option::Option::Some;
8619                let mut fields = std::collections::HashSet::new();
8620                let mut result = Self::Value::new();
8621                while let Some(tag) = map.next_key::<__FieldTag>()? {
8622                    #[allow(clippy::match_single_binding)]
8623                    match tag {
8624                        __FieldTag::__metric => {
8625                            if !fields.insert(__FieldTag::__metric) {
8626                                return std::result::Result::Err(A::Error::duplicate_field(
8627                                    "multiple values for metric",
8628                                ));
8629                            }
8630                            result.metric = map
8631                                .next_value::<std::option::Option<std::string::String>>()?
8632                                .unwrap_or_default();
8633                        }
8634                        __FieldTag::__limit => {
8635                            if !fields.insert(__FieldTag::__limit) {
8636                                return std::result::Result::Err(A::Error::duplicate_field(
8637                                    "multiple values for limit",
8638                                ));
8639                            }
8640                            struct __With(std::option::Option<f64>);
8641                            impl<'de> serde::de::Deserialize<'de> for __With {
8642                                fn deserialize<D>(
8643                                    deserializer: D,
8644                                ) -> std::result::Result<Self, D::Error>
8645                                where
8646                                    D: serde::de::Deserializer<'de>,
8647                                {
8648                                    serde_with::As::< std::option::Option<wkt::internal::F64> >::deserialize(deserializer).map(__With)
8649                                }
8650                            }
8651                            result.limit = map.next_value::<__With>()?.0.unwrap_or_default();
8652                        }
8653                        __FieldTag::__usage => {
8654                            if !fields.insert(__FieldTag::__usage) {
8655                                return std::result::Result::Err(A::Error::duplicate_field(
8656                                    "multiple values for usage",
8657                                ));
8658                            }
8659                            struct __With(std::option::Option<f64>);
8660                            impl<'de> serde::de::Deserialize<'de> for __With {
8661                                fn deserialize<D>(
8662                                    deserializer: D,
8663                                ) -> std::result::Result<Self, D::Error>
8664                                where
8665                                    D: serde::de::Deserializer<'de>,
8666                                {
8667                                    serde_with::As::< std::option::Option<wkt::internal::F64> >::deserialize(deserializer).map(__With)
8668                                }
8669                            }
8670                            result.usage = map.next_value::<__With>()?.0.unwrap_or_default();
8671                        }
8672                        __FieldTag::Unknown(key) => {
8673                            let value = map.next_value::<serde_json::Value>()?;
8674                            result._unknown_fields.insert(key, value);
8675                        }
8676                    }
8677                }
8678                std::result::Result::Ok(result)
8679            }
8680        }
8681        deserializer.deserialize_any(Visitor)
8682    }
8683}
8684
8685#[doc(hidden)]
8686impl serde::ser::Serialize for Quota {
8687    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
8688    where
8689        S: serde::ser::Serializer,
8690    {
8691        use serde::ser::SerializeMap;
8692        #[allow(unused_imports)]
8693        use std::option::Option::Some;
8694        let mut state = serializer.serialize_map(std::option::Option::None)?;
8695        if !self.metric.is_empty() {
8696            state.serialize_entry("metric", &self.metric)?;
8697        }
8698        if !wkt::internal::is_default(&self.limit) {
8699            struct __With<'a>(&'a f64);
8700            impl<'a> serde::ser::Serialize for __With<'a> {
8701                fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
8702                where
8703                    S: serde::ser::Serializer,
8704                {
8705                    serde_with::As::<wkt::internal::F64>::serialize(self.0, serializer)
8706                }
8707            }
8708            state.serialize_entry("limit", &__With(&self.limit))?;
8709        }
8710        if !wkt::internal::is_default(&self.usage) {
8711            struct __With<'a>(&'a f64);
8712            impl<'a> serde::ser::Serialize for __With<'a> {
8713                fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
8714                where
8715                    S: serde::ser::Serializer,
8716                {
8717                    serde_with::As::<wkt::internal::F64>::serialize(self.0, serializer)
8718                }
8719            }
8720            state.serialize_entry("usage", &__With(&self.usage))?;
8721        }
8722        if !self._unknown_fields.is_empty() {
8723            for (key, value) in self._unknown_fields.iter() {
8724                state.serialize_entry(key, &value)?;
8725            }
8726        }
8727        state.end()
8728    }
8729}
8730
8731impl std::fmt::Debug for Quota {
8732    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8733        let mut debug_struct = f.debug_struct("Quota");
8734        debug_struct.field("metric", &self.metric);
8735        debug_struct.field("limit", &self.limit);
8736        debug_struct.field("usage", &self.usage);
8737        if !self._unknown_fields.is_empty() {
8738            debug_struct.field("_unknown_fields", &self._unknown_fields);
8739        }
8740        debug_struct.finish()
8741    }
8742}
8743
8744/// Maintenance policy configuration.
8745#[derive(Clone, Default, PartialEq)]
8746#[non_exhaustive]
8747pub struct MaintenancePolicy {
8748    /// Specifies the maintenance window in which maintenance may be performed.
8749    pub window: std::option::Option<crate::model::MaintenanceWindow>,
8750
8751    /// Optional. Exclusions to automatic maintenance. Non-emergency maintenance
8752    /// should not occur in these windows. Each exclusion has a unique name and may
8753    /// be active or expired. The max number of maintenance exclusions allowed at a
8754    /// given time is 3.
8755    pub maintenance_exclusions: std::vec::Vec<crate::model::MaintenanceExclusionWindow>,
8756
8757    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
8758}
8759
8760impl MaintenancePolicy {
8761    pub fn new() -> Self {
8762        std::default::Default::default()
8763    }
8764
8765    /// Sets the value of [window][crate::model::MaintenancePolicy::window].
8766    pub fn set_window<T>(mut self, v: T) -> Self
8767    where
8768        T: std::convert::Into<crate::model::MaintenanceWindow>,
8769    {
8770        self.window = std::option::Option::Some(v.into());
8771        self
8772    }
8773
8774    /// Sets or clears the value of [window][crate::model::MaintenancePolicy::window].
8775    pub fn set_or_clear_window<T>(mut self, v: std::option::Option<T>) -> Self
8776    where
8777        T: std::convert::Into<crate::model::MaintenanceWindow>,
8778    {
8779        self.window = v.map(|x| x.into());
8780        self
8781    }
8782
8783    /// Sets the value of [maintenance_exclusions][crate::model::MaintenancePolicy::maintenance_exclusions].
8784    pub fn set_maintenance_exclusions<T, V>(mut self, v: T) -> Self
8785    where
8786        T: std::iter::IntoIterator<Item = V>,
8787        V: std::convert::Into<crate::model::MaintenanceExclusionWindow>,
8788    {
8789        use std::iter::Iterator;
8790        self.maintenance_exclusions = v.into_iter().map(|i| i.into()).collect();
8791        self
8792    }
8793}
8794
8795impl wkt::message::Message for MaintenancePolicy {
8796    fn typename() -> &'static str {
8797        "type.googleapis.com/google.cloud.edgecontainer.v1.MaintenancePolicy"
8798    }
8799}
8800
8801#[doc(hidden)]
8802impl<'de> serde::de::Deserialize<'de> for MaintenancePolicy {
8803    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8804    where
8805        D: serde::Deserializer<'de>,
8806    {
8807        #[allow(non_camel_case_types)]
8808        #[doc(hidden)]
8809        #[derive(PartialEq, Eq, Hash)]
8810        enum __FieldTag {
8811            __window,
8812            __maintenance_exclusions,
8813            Unknown(std::string::String),
8814        }
8815        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
8816            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8817            where
8818                D: serde::Deserializer<'de>,
8819            {
8820                struct Visitor;
8821                impl<'de> serde::de::Visitor<'de> for Visitor {
8822                    type Value = __FieldTag;
8823                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
8824                        formatter.write_str("a field name for MaintenancePolicy")
8825                    }
8826                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
8827                    where
8828                        E: serde::de::Error,
8829                    {
8830                        use std::result::Result::Ok;
8831                        use std::string::ToString;
8832                        match value {
8833                            "window" => Ok(__FieldTag::__window),
8834                            "maintenanceExclusions" => Ok(__FieldTag::__maintenance_exclusions),
8835                            "maintenance_exclusions" => Ok(__FieldTag::__maintenance_exclusions),
8836                            _ => Ok(__FieldTag::Unknown(value.to_string())),
8837                        }
8838                    }
8839                }
8840                deserializer.deserialize_identifier(Visitor)
8841            }
8842        }
8843        struct Visitor;
8844        impl<'de> serde::de::Visitor<'de> for Visitor {
8845            type Value = MaintenancePolicy;
8846            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
8847                formatter.write_str("struct MaintenancePolicy")
8848            }
8849            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
8850            where
8851                A: serde::de::MapAccess<'de>,
8852            {
8853                #[allow(unused_imports)]
8854                use serde::de::Error;
8855                use std::option::Option::Some;
8856                let mut fields = std::collections::HashSet::new();
8857                let mut result = Self::Value::new();
8858                while let Some(tag) = map.next_key::<__FieldTag>()? {
8859                    #[allow(clippy::match_single_binding)]
8860                    match tag {
8861                        __FieldTag::__window => {
8862                            if !fields.insert(__FieldTag::__window) {
8863                                return std::result::Result::Err(A::Error::duplicate_field(
8864                                    "multiple values for window",
8865                                ));
8866                            }
8867                            result.window = map
8868                                .next_value::<std::option::Option<crate::model::MaintenanceWindow>>(
8869                                )?;
8870                        }
8871                        __FieldTag::__maintenance_exclusions => {
8872                            if !fields.insert(__FieldTag::__maintenance_exclusions) {
8873                                return std::result::Result::Err(A::Error::duplicate_field(
8874                                    "multiple values for maintenance_exclusions",
8875                                ));
8876                            }
8877                            result.maintenance_exclusions = map
8878                                .next_value::<std::option::Option<
8879                                    std::vec::Vec<crate::model::MaintenanceExclusionWindow>,
8880                                >>()?
8881                                .unwrap_or_default();
8882                        }
8883                        __FieldTag::Unknown(key) => {
8884                            let value = map.next_value::<serde_json::Value>()?;
8885                            result._unknown_fields.insert(key, value);
8886                        }
8887                    }
8888                }
8889                std::result::Result::Ok(result)
8890            }
8891        }
8892        deserializer.deserialize_any(Visitor)
8893    }
8894}
8895
8896#[doc(hidden)]
8897impl serde::ser::Serialize for MaintenancePolicy {
8898    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
8899    where
8900        S: serde::ser::Serializer,
8901    {
8902        use serde::ser::SerializeMap;
8903        #[allow(unused_imports)]
8904        use std::option::Option::Some;
8905        let mut state = serializer.serialize_map(std::option::Option::None)?;
8906        if self.window.is_some() {
8907            state.serialize_entry("window", &self.window)?;
8908        }
8909        if !self.maintenance_exclusions.is_empty() {
8910            state.serialize_entry("maintenanceExclusions", &self.maintenance_exclusions)?;
8911        }
8912        if !self._unknown_fields.is_empty() {
8913            for (key, value) in self._unknown_fields.iter() {
8914                state.serialize_entry(key, &value)?;
8915            }
8916        }
8917        state.end()
8918    }
8919}
8920
8921impl std::fmt::Debug for MaintenancePolicy {
8922    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8923        let mut debug_struct = f.debug_struct("MaintenancePolicy");
8924        debug_struct.field("window", &self.window);
8925        debug_struct.field("maintenance_exclusions", &self.maintenance_exclusions);
8926        if !self._unknown_fields.is_empty() {
8927            debug_struct.field("_unknown_fields", &self._unknown_fields);
8928        }
8929        debug_struct.finish()
8930    }
8931}
8932
8933/// Maintenance window configuration
8934#[derive(Clone, Default, PartialEq)]
8935#[non_exhaustive]
8936pub struct MaintenanceWindow {
8937    /// Configuration of a recurring maintenance window.
8938    pub recurring_window: std::option::Option<crate::model::RecurringTimeWindow>,
8939
8940    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
8941}
8942
8943impl MaintenanceWindow {
8944    pub fn new() -> Self {
8945        std::default::Default::default()
8946    }
8947
8948    /// Sets the value of [recurring_window][crate::model::MaintenanceWindow::recurring_window].
8949    pub fn set_recurring_window<T>(mut self, v: T) -> Self
8950    where
8951        T: std::convert::Into<crate::model::RecurringTimeWindow>,
8952    {
8953        self.recurring_window = std::option::Option::Some(v.into());
8954        self
8955    }
8956
8957    /// Sets or clears the value of [recurring_window][crate::model::MaintenanceWindow::recurring_window].
8958    pub fn set_or_clear_recurring_window<T>(mut self, v: std::option::Option<T>) -> Self
8959    where
8960        T: std::convert::Into<crate::model::RecurringTimeWindow>,
8961    {
8962        self.recurring_window = v.map(|x| x.into());
8963        self
8964    }
8965}
8966
8967impl wkt::message::Message for MaintenanceWindow {
8968    fn typename() -> &'static str {
8969        "type.googleapis.com/google.cloud.edgecontainer.v1.MaintenanceWindow"
8970    }
8971}
8972
8973#[doc(hidden)]
8974impl<'de> serde::de::Deserialize<'de> for MaintenanceWindow {
8975    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8976    where
8977        D: serde::Deserializer<'de>,
8978    {
8979        #[allow(non_camel_case_types)]
8980        #[doc(hidden)]
8981        #[derive(PartialEq, Eq, Hash)]
8982        enum __FieldTag {
8983            __recurring_window,
8984            Unknown(std::string::String),
8985        }
8986        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
8987            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8988            where
8989                D: serde::Deserializer<'de>,
8990            {
8991                struct Visitor;
8992                impl<'de> serde::de::Visitor<'de> for Visitor {
8993                    type Value = __FieldTag;
8994                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
8995                        formatter.write_str("a field name for MaintenanceWindow")
8996                    }
8997                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
8998                    where
8999                        E: serde::de::Error,
9000                    {
9001                        use std::result::Result::Ok;
9002                        use std::string::ToString;
9003                        match value {
9004                            "recurringWindow" => Ok(__FieldTag::__recurring_window),
9005                            "recurring_window" => Ok(__FieldTag::__recurring_window),
9006                            _ => Ok(__FieldTag::Unknown(value.to_string())),
9007                        }
9008                    }
9009                }
9010                deserializer.deserialize_identifier(Visitor)
9011            }
9012        }
9013        struct Visitor;
9014        impl<'de> serde::de::Visitor<'de> for Visitor {
9015            type Value = MaintenanceWindow;
9016            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
9017                formatter.write_str("struct MaintenanceWindow")
9018            }
9019            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
9020            where
9021                A: serde::de::MapAccess<'de>,
9022            {
9023                #[allow(unused_imports)]
9024                use serde::de::Error;
9025                use std::option::Option::Some;
9026                let mut fields = std::collections::HashSet::new();
9027                let mut result = Self::Value::new();
9028                while let Some(tag) = map.next_key::<__FieldTag>()? {
9029                    #[allow(clippy::match_single_binding)]
9030                    match tag {
9031                        __FieldTag::__recurring_window => {
9032                            if !fields.insert(__FieldTag::__recurring_window) {
9033                                return std::result::Result::Err(A::Error::duplicate_field(
9034                                    "multiple values for recurring_window",
9035                                ));
9036                            }
9037                            result.recurring_window = map.next_value::<std::option::Option<crate::model::RecurringTimeWindow>>()?
9038                                ;
9039                        }
9040                        __FieldTag::Unknown(key) => {
9041                            let value = map.next_value::<serde_json::Value>()?;
9042                            result._unknown_fields.insert(key, value);
9043                        }
9044                    }
9045                }
9046                std::result::Result::Ok(result)
9047            }
9048        }
9049        deserializer.deserialize_any(Visitor)
9050    }
9051}
9052
9053#[doc(hidden)]
9054impl serde::ser::Serialize for MaintenanceWindow {
9055    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
9056    where
9057        S: serde::ser::Serializer,
9058    {
9059        use serde::ser::SerializeMap;
9060        #[allow(unused_imports)]
9061        use std::option::Option::Some;
9062        let mut state = serializer.serialize_map(std::option::Option::None)?;
9063        if self.recurring_window.is_some() {
9064            state.serialize_entry("recurringWindow", &self.recurring_window)?;
9065        }
9066        if !self._unknown_fields.is_empty() {
9067            for (key, value) in self._unknown_fields.iter() {
9068                state.serialize_entry(key, &value)?;
9069            }
9070        }
9071        state.end()
9072    }
9073}
9074
9075impl std::fmt::Debug for MaintenanceWindow {
9076    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9077        let mut debug_struct = f.debug_struct("MaintenanceWindow");
9078        debug_struct.field("recurring_window", &self.recurring_window);
9079        if !self._unknown_fields.is_empty() {
9080            debug_struct.field("_unknown_fields", &self._unknown_fields);
9081        }
9082        debug_struct.finish()
9083    }
9084}
9085
9086/// Represents an arbitrary window of time that recurs.
9087#[derive(Clone, Default, PartialEq)]
9088#[non_exhaustive]
9089pub struct RecurringTimeWindow {
9090    /// The window of the first recurrence.
9091    pub window: std::option::Option<crate::model::TimeWindow>,
9092
9093    /// An RRULE (<https://tools.ietf.org/html/rfc5545#section-3.8.5.3>) for how
9094    /// this window recurs. They go on for the span of time between the start and
9095    /// end time.
9096    pub recurrence: std::string::String,
9097
9098    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
9099}
9100
9101impl RecurringTimeWindow {
9102    pub fn new() -> Self {
9103        std::default::Default::default()
9104    }
9105
9106    /// Sets the value of [window][crate::model::RecurringTimeWindow::window].
9107    pub fn set_window<T>(mut self, v: T) -> Self
9108    where
9109        T: std::convert::Into<crate::model::TimeWindow>,
9110    {
9111        self.window = std::option::Option::Some(v.into());
9112        self
9113    }
9114
9115    /// Sets or clears the value of [window][crate::model::RecurringTimeWindow::window].
9116    pub fn set_or_clear_window<T>(mut self, v: std::option::Option<T>) -> Self
9117    where
9118        T: std::convert::Into<crate::model::TimeWindow>,
9119    {
9120        self.window = v.map(|x| x.into());
9121        self
9122    }
9123
9124    /// Sets the value of [recurrence][crate::model::RecurringTimeWindow::recurrence].
9125    pub fn set_recurrence<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
9126        self.recurrence = v.into();
9127        self
9128    }
9129}
9130
9131impl wkt::message::Message for RecurringTimeWindow {
9132    fn typename() -> &'static str {
9133        "type.googleapis.com/google.cloud.edgecontainer.v1.RecurringTimeWindow"
9134    }
9135}
9136
9137#[doc(hidden)]
9138impl<'de> serde::de::Deserialize<'de> for RecurringTimeWindow {
9139    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9140    where
9141        D: serde::Deserializer<'de>,
9142    {
9143        #[allow(non_camel_case_types)]
9144        #[doc(hidden)]
9145        #[derive(PartialEq, Eq, Hash)]
9146        enum __FieldTag {
9147            __window,
9148            __recurrence,
9149            Unknown(std::string::String),
9150        }
9151        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
9152            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9153            where
9154                D: serde::Deserializer<'de>,
9155            {
9156                struct Visitor;
9157                impl<'de> serde::de::Visitor<'de> for Visitor {
9158                    type Value = __FieldTag;
9159                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
9160                        formatter.write_str("a field name for RecurringTimeWindow")
9161                    }
9162                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
9163                    where
9164                        E: serde::de::Error,
9165                    {
9166                        use std::result::Result::Ok;
9167                        use std::string::ToString;
9168                        match value {
9169                            "window" => Ok(__FieldTag::__window),
9170                            "recurrence" => Ok(__FieldTag::__recurrence),
9171                            _ => Ok(__FieldTag::Unknown(value.to_string())),
9172                        }
9173                    }
9174                }
9175                deserializer.deserialize_identifier(Visitor)
9176            }
9177        }
9178        struct Visitor;
9179        impl<'de> serde::de::Visitor<'de> for Visitor {
9180            type Value = RecurringTimeWindow;
9181            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
9182                formatter.write_str("struct RecurringTimeWindow")
9183            }
9184            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
9185            where
9186                A: serde::de::MapAccess<'de>,
9187            {
9188                #[allow(unused_imports)]
9189                use serde::de::Error;
9190                use std::option::Option::Some;
9191                let mut fields = std::collections::HashSet::new();
9192                let mut result = Self::Value::new();
9193                while let Some(tag) = map.next_key::<__FieldTag>()? {
9194                    #[allow(clippy::match_single_binding)]
9195                    match tag {
9196                        __FieldTag::__window => {
9197                            if !fields.insert(__FieldTag::__window) {
9198                                return std::result::Result::Err(A::Error::duplicate_field(
9199                                    "multiple values for window",
9200                                ));
9201                            }
9202                            result.window =
9203                                map.next_value::<std::option::Option<crate::model::TimeWindow>>()?;
9204                        }
9205                        __FieldTag::__recurrence => {
9206                            if !fields.insert(__FieldTag::__recurrence) {
9207                                return std::result::Result::Err(A::Error::duplicate_field(
9208                                    "multiple values for recurrence",
9209                                ));
9210                            }
9211                            result.recurrence = map
9212                                .next_value::<std::option::Option<std::string::String>>()?
9213                                .unwrap_or_default();
9214                        }
9215                        __FieldTag::Unknown(key) => {
9216                            let value = map.next_value::<serde_json::Value>()?;
9217                            result._unknown_fields.insert(key, value);
9218                        }
9219                    }
9220                }
9221                std::result::Result::Ok(result)
9222            }
9223        }
9224        deserializer.deserialize_any(Visitor)
9225    }
9226}
9227
9228#[doc(hidden)]
9229impl serde::ser::Serialize for RecurringTimeWindow {
9230    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
9231    where
9232        S: serde::ser::Serializer,
9233    {
9234        use serde::ser::SerializeMap;
9235        #[allow(unused_imports)]
9236        use std::option::Option::Some;
9237        let mut state = serializer.serialize_map(std::option::Option::None)?;
9238        if self.window.is_some() {
9239            state.serialize_entry("window", &self.window)?;
9240        }
9241        if !self.recurrence.is_empty() {
9242            state.serialize_entry("recurrence", &self.recurrence)?;
9243        }
9244        if !self._unknown_fields.is_empty() {
9245            for (key, value) in self._unknown_fields.iter() {
9246                state.serialize_entry(key, &value)?;
9247            }
9248        }
9249        state.end()
9250    }
9251}
9252
9253impl std::fmt::Debug for RecurringTimeWindow {
9254    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9255        let mut debug_struct = f.debug_struct("RecurringTimeWindow");
9256        debug_struct.field("window", &self.window);
9257        debug_struct.field("recurrence", &self.recurrence);
9258        if !self._unknown_fields.is_empty() {
9259            debug_struct.field("_unknown_fields", &self._unknown_fields);
9260        }
9261        debug_struct.finish()
9262    }
9263}
9264
9265/// Represents a maintenance exclusion window.
9266#[derive(Clone, Default, PartialEq)]
9267#[non_exhaustive]
9268pub struct MaintenanceExclusionWindow {
9269    /// Optional. The time window.
9270    pub window: std::option::Option<crate::model::TimeWindow>,
9271
9272    /// Optional. A unique (per cluster) id for the window.
9273    pub id: std::string::String,
9274
9275    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
9276}
9277
9278impl MaintenanceExclusionWindow {
9279    pub fn new() -> Self {
9280        std::default::Default::default()
9281    }
9282
9283    /// Sets the value of [window][crate::model::MaintenanceExclusionWindow::window].
9284    pub fn set_window<T>(mut self, v: T) -> Self
9285    where
9286        T: std::convert::Into<crate::model::TimeWindow>,
9287    {
9288        self.window = std::option::Option::Some(v.into());
9289        self
9290    }
9291
9292    /// Sets or clears the value of [window][crate::model::MaintenanceExclusionWindow::window].
9293    pub fn set_or_clear_window<T>(mut self, v: std::option::Option<T>) -> Self
9294    where
9295        T: std::convert::Into<crate::model::TimeWindow>,
9296    {
9297        self.window = v.map(|x| x.into());
9298        self
9299    }
9300
9301    /// Sets the value of [id][crate::model::MaintenanceExclusionWindow::id].
9302    pub fn set_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
9303        self.id = v.into();
9304        self
9305    }
9306}
9307
9308impl wkt::message::Message for MaintenanceExclusionWindow {
9309    fn typename() -> &'static str {
9310        "type.googleapis.com/google.cloud.edgecontainer.v1.MaintenanceExclusionWindow"
9311    }
9312}
9313
9314#[doc(hidden)]
9315impl<'de> serde::de::Deserialize<'de> for MaintenanceExclusionWindow {
9316    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9317    where
9318        D: serde::Deserializer<'de>,
9319    {
9320        #[allow(non_camel_case_types)]
9321        #[doc(hidden)]
9322        #[derive(PartialEq, Eq, Hash)]
9323        enum __FieldTag {
9324            __window,
9325            __id,
9326            Unknown(std::string::String),
9327        }
9328        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
9329            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9330            where
9331                D: serde::Deserializer<'de>,
9332            {
9333                struct Visitor;
9334                impl<'de> serde::de::Visitor<'de> for Visitor {
9335                    type Value = __FieldTag;
9336                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
9337                        formatter.write_str("a field name for MaintenanceExclusionWindow")
9338                    }
9339                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
9340                    where
9341                        E: serde::de::Error,
9342                    {
9343                        use std::result::Result::Ok;
9344                        use std::string::ToString;
9345                        match value {
9346                            "window" => Ok(__FieldTag::__window),
9347                            "id" => Ok(__FieldTag::__id),
9348                            _ => Ok(__FieldTag::Unknown(value.to_string())),
9349                        }
9350                    }
9351                }
9352                deserializer.deserialize_identifier(Visitor)
9353            }
9354        }
9355        struct Visitor;
9356        impl<'de> serde::de::Visitor<'de> for Visitor {
9357            type Value = MaintenanceExclusionWindow;
9358            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
9359                formatter.write_str("struct MaintenanceExclusionWindow")
9360            }
9361            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
9362            where
9363                A: serde::de::MapAccess<'de>,
9364            {
9365                #[allow(unused_imports)]
9366                use serde::de::Error;
9367                use std::option::Option::Some;
9368                let mut fields = std::collections::HashSet::new();
9369                let mut result = Self::Value::new();
9370                while let Some(tag) = map.next_key::<__FieldTag>()? {
9371                    #[allow(clippy::match_single_binding)]
9372                    match tag {
9373                        __FieldTag::__window => {
9374                            if !fields.insert(__FieldTag::__window) {
9375                                return std::result::Result::Err(A::Error::duplicate_field(
9376                                    "multiple values for window",
9377                                ));
9378                            }
9379                            result.window =
9380                                map.next_value::<std::option::Option<crate::model::TimeWindow>>()?;
9381                        }
9382                        __FieldTag::__id => {
9383                            if !fields.insert(__FieldTag::__id) {
9384                                return std::result::Result::Err(A::Error::duplicate_field(
9385                                    "multiple values for id",
9386                                ));
9387                            }
9388                            result.id = map
9389                                .next_value::<std::option::Option<std::string::String>>()?
9390                                .unwrap_or_default();
9391                        }
9392                        __FieldTag::Unknown(key) => {
9393                            let value = map.next_value::<serde_json::Value>()?;
9394                            result._unknown_fields.insert(key, value);
9395                        }
9396                    }
9397                }
9398                std::result::Result::Ok(result)
9399            }
9400        }
9401        deserializer.deserialize_any(Visitor)
9402    }
9403}
9404
9405#[doc(hidden)]
9406impl serde::ser::Serialize for MaintenanceExclusionWindow {
9407    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
9408    where
9409        S: serde::ser::Serializer,
9410    {
9411        use serde::ser::SerializeMap;
9412        #[allow(unused_imports)]
9413        use std::option::Option::Some;
9414        let mut state = serializer.serialize_map(std::option::Option::None)?;
9415        if self.window.is_some() {
9416            state.serialize_entry("window", &self.window)?;
9417        }
9418        if !self.id.is_empty() {
9419            state.serialize_entry("id", &self.id)?;
9420        }
9421        if !self._unknown_fields.is_empty() {
9422            for (key, value) in self._unknown_fields.iter() {
9423                state.serialize_entry(key, &value)?;
9424            }
9425        }
9426        state.end()
9427    }
9428}
9429
9430impl std::fmt::Debug for MaintenanceExclusionWindow {
9431    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9432        let mut debug_struct = f.debug_struct("MaintenanceExclusionWindow");
9433        debug_struct.field("window", &self.window);
9434        debug_struct.field("id", &self.id);
9435        if !self._unknown_fields.is_empty() {
9436            debug_struct.field("_unknown_fields", &self._unknown_fields);
9437        }
9438        debug_struct.finish()
9439    }
9440}
9441
9442/// Represents an arbitrary window of time.
9443#[derive(Clone, Default, PartialEq)]
9444#[non_exhaustive]
9445pub struct TimeWindow {
9446    /// The time that the window first starts.
9447    pub start_time: std::option::Option<wkt::Timestamp>,
9448
9449    /// The time that the window ends. The end time must take place after the
9450    /// start time.
9451    pub end_time: std::option::Option<wkt::Timestamp>,
9452
9453    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
9454}
9455
9456impl TimeWindow {
9457    pub fn new() -> Self {
9458        std::default::Default::default()
9459    }
9460
9461    /// Sets the value of [start_time][crate::model::TimeWindow::start_time].
9462    pub fn set_start_time<T>(mut self, v: T) -> Self
9463    where
9464        T: std::convert::Into<wkt::Timestamp>,
9465    {
9466        self.start_time = std::option::Option::Some(v.into());
9467        self
9468    }
9469
9470    /// Sets or clears the value of [start_time][crate::model::TimeWindow::start_time].
9471    pub fn set_or_clear_start_time<T>(mut self, v: std::option::Option<T>) -> Self
9472    where
9473        T: std::convert::Into<wkt::Timestamp>,
9474    {
9475        self.start_time = v.map(|x| x.into());
9476        self
9477    }
9478
9479    /// Sets the value of [end_time][crate::model::TimeWindow::end_time].
9480    pub fn set_end_time<T>(mut self, v: T) -> Self
9481    where
9482        T: std::convert::Into<wkt::Timestamp>,
9483    {
9484        self.end_time = std::option::Option::Some(v.into());
9485        self
9486    }
9487
9488    /// Sets or clears the value of [end_time][crate::model::TimeWindow::end_time].
9489    pub fn set_or_clear_end_time<T>(mut self, v: std::option::Option<T>) -> Self
9490    where
9491        T: std::convert::Into<wkt::Timestamp>,
9492    {
9493        self.end_time = v.map(|x| x.into());
9494        self
9495    }
9496}
9497
9498impl wkt::message::Message for TimeWindow {
9499    fn typename() -> &'static str {
9500        "type.googleapis.com/google.cloud.edgecontainer.v1.TimeWindow"
9501    }
9502}
9503
9504#[doc(hidden)]
9505impl<'de> serde::de::Deserialize<'de> for TimeWindow {
9506    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9507    where
9508        D: serde::Deserializer<'de>,
9509    {
9510        #[allow(non_camel_case_types)]
9511        #[doc(hidden)]
9512        #[derive(PartialEq, Eq, Hash)]
9513        enum __FieldTag {
9514            __start_time,
9515            __end_time,
9516            Unknown(std::string::String),
9517        }
9518        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
9519            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9520            where
9521                D: serde::Deserializer<'de>,
9522            {
9523                struct Visitor;
9524                impl<'de> serde::de::Visitor<'de> for Visitor {
9525                    type Value = __FieldTag;
9526                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
9527                        formatter.write_str("a field name for TimeWindow")
9528                    }
9529                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
9530                    where
9531                        E: serde::de::Error,
9532                    {
9533                        use std::result::Result::Ok;
9534                        use std::string::ToString;
9535                        match value {
9536                            "startTime" => Ok(__FieldTag::__start_time),
9537                            "start_time" => Ok(__FieldTag::__start_time),
9538                            "endTime" => Ok(__FieldTag::__end_time),
9539                            "end_time" => Ok(__FieldTag::__end_time),
9540                            _ => Ok(__FieldTag::Unknown(value.to_string())),
9541                        }
9542                    }
9543                }
9544                deserializer.deserialize_identifier(Visitor)
9545            }
9546        }
9547        struct Visitor;
9548        impl<'de> serde::de::Visitor<'de> for Visitor {
9549            type Value = TimeWindow;
9550            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
9551                formatter.write_str("struct TimeWindow")
9552            }
9553            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
9554            where
9555                A: serde::de::MapAccess<'de>,
9556            {
9557                #[allow(unused_imports)]
9558                use serde::de::Error;
9559                use std::option::Option::Some;
9560                let mut fields = std::collections::HashSet::new();
9561                let mut result = Self::Value::new();
9562                while let Some(tag) = map.next_key::<__FieldTag>()? {
9563                    #[allow(clippy::match_single_binding)]
9564                    match tag {
9565                        __FieldTag::__start_time => {
9566                            if !fields.insert(__FieldTag::__start_time) {
9567                                return std::result::Result::Err(A::Error::duplicate_field(
9568                                    "multiple values for start_time",
9569                                ));
9570                            }
9571                            result.start_time =
9572                                map.next_value::<std::option::Option<wkt::Timestamp>>()?;
9573                        }
9574                        __FieldTag::__end_time => {
9575                            if !fields.insert(__FieldTag::__end_time) {
9576                                return std::result::Result::Err(A::Error::duplicate_field(
9577                                    "multiple values for end_time",
9578                                ));
9579                            }
9580                            result.end_time =
9581                                map.next_value::<std::option::Option<wkt::Timestamp>>()?;
9582                        }
9583                        __FieldTag::Unknown(key) => {
9584                            let value = map.next_value::<serde_json::Value>()?;
9585                            result._unknown_fields.insert(key, value);
9586                        }
9587                    }
9588                }
9589                std::result::Result::Ok(result)
9590            }
9591        }
9592        deserializer.deserialize_any(Visitor)
9593    }
9594}
9595
9596#[doc(hidden)]
9597impl serde::ser::Serialize for TimeWindow {
9598    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
9599    where
9600        S: serde::ser::Serializer,
9601    {
9602        use serde::ser::SerializeMap;
9603        #[allow(unused_imports)]
9604        use std::option::Option::Some;
9605        let mut state = serializer.serialize_map(std::option::Option::None)?;
9606        if self.start_time.is_some() {
9607            state.serialize_entry("startTime", &self.start_time)?;
9608        }
9609        if self.end_time.is_some() {
9610            state.serialize_entry("endTime", &self.end_time)?;
9611        }
9612        if !self._unknown_fields.is_empty() {
9613            for (key, value) in self._unknown_fields.iter() {
9614                state.serialize_entry(key, &value)?;
9615            }
9616        }
9617        state.end()
9618    }
9619}
9620
9621impl std::fmt::Debug for TimeWindow {
9622    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9623        let mut debug_struct = f.debug_struct("TimeWindow");
9624        debug_struct.field("start_time", &self.start_time);
9625        debug_struct.field("end_time", &self.end_time);
9626        if !self._unknown_fields.is_empty() {
9627            debug_struct.field("_unknown_fields", &self._unknown_fields);
9628        }
9629        debug_struct.finish()
9630    }
9631}
9632
9633/// Server configuration for supported versions and release channels.
9634#[derive(Clone, Default, PartialEq)]
9635#[non_exhaustive]
9636pub struct ServerConfig {
9637    /// Output only. Mapping from release channel to channel config.
9638    pub channels: std::collections::HashMap<std::string::String, crate::model::ChannelConfig>,
9639
9640    /// Output only. Supported versions, e.g.: ["1.4.0", "1.5.0"].
9641    pub versions: std::vec::Vec<crate::model::Version>,
9642
9643    /// Output only. Default version, e.g.: "1.4.0".
9644    pub default_version: std::string::String,
9645
9646    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
9647}
9648
9649impl ServerConfig {
9650    pub fn new() -> Self {
9651        std::default::Default::default()
9652    }
9653
9654    /// Sets the value of [channels][crate::model::ServerConfig::channels].
9655    pub fn set_channels<T, K, V>(mut self, v: T) -> Self
9656    where
9657        T: std::iter::IntoIterator<Item = (K, V)>,
9658        K: std::convert::Into<std::string::String>,
9659        V: std::convert::Into<crate::model::ChannelConfig>,
9660    {
9661        use std::iter::Iterator;
9662        self.channels = v.into_iter().map(|(k, v)| (k.into(), v.into())).collect();
9663        self
9664    }
9665
9666    /// Sets the value of [versions][crate::model::ServerConfig::versions].
9667    pub fn set_versions<T, V>(mut self, v: T) -> Self
9668    where
9669        T: std::iter::IntoIterator<Item = V>,
9670        V: std::convert::Into<crate::model::Version>,
9671    {
9672        use std::iter::Iterator;
9673        self.versions = v.into_iter().map(|i| i.into()).collect();
9674        self
9675    }
9676
9677    /// Sets the value of [default_version][crate::model::ServerConfig::default_version].
9678    pub fn set_default_version<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
9679        self.default_version = v.into();
9680        self
9681    }
9682}
9683
9684impl wkt::message::Message for ServerConfig {
9685    fn typename() -> &'static str {
9686        "type.googleapis.com/google.cloud.edgecontainer.v1.ServerConfig"
9687    }
9688}
9689
9690#[doc(hidden)]
9691impl<'de> serde::de::Deserialize<'de> for ServerConfig {
9692    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9693    where
9694        D: serde::Deserializer<'de>,
9695    {
9696        #[allow(non_camel_case_types)]
9697        #[doc(hidden)]
9698        #[derive(PartialEq, Eq, Hash)]
9699        enum __FieldTag {
9700            __channels,
9701            __versions,
9702            __default_version,
9703            Unknown(std::string::String),
9704        }
9705        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
9706            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9707            where
9708                D: serde::Deserializer<'de>,
9709            {
9710                struct Visitor;
9711                impl<'de> serde::de::Visitor<'de> for Visitor {
9712                    type Value = __FieldTag;
9713                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
9714                        formatter.write_str("a field name for ServerConfig")
9715                    }
9716                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
9717                    where
9718                        E: serde::de::Error,
9719                    {
9720                        use std::result::Result::Ok;
9721                        use std::string::ToString;
9722                        match value {
9723                            "channels" => Ok(__FieldTag::__channels),
9724                            "versions" => Ok(__FieldTag::__versions),
9725                            "defaultVersion" => Ok(__FieldTag::__default_version),
9726                            "default_version" => Ok(__FieldTag::__default_version),
9727                            _ => Ok(__FieldTag::Unknown(value.to_string())),
9728                        }
9729                    }
9730                }
9731                deserializer.deserialize_identifier(Visitor)
9732            }
9733        }
9734        struct Visitor;
9735        impl<'de> serde::de::Visitor<'de> for Visitor {
9736            type Value = ServerConfig;
9737            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
9738                formatter.write_str("struct ServerConfig")
9739            }
9740            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
9741            where
9742                A: serde::de::MapAccess<'de>,
9743            {
9744                #[allow(unused_imports)]
9745                use serde::de::Error;
9746                use std::option::Option::Some;
9747                let mut fields = std::collections::HashSet::new();
9748                let mut result = Self::Value::new();
9749                while let Some(tag) = map.next_key::<__FieldTag>()? {
9750                    #[allow(clippy::match_single_binding)]
9751                    match tag {
9752                        __FieldTag::__channels => {
9753                            if !fields.insert(__FieldTag::__channels) {
9754                                return std::result::Result::Err(A::Error::duplicate_field(
9755                                    "multiple values for channels",
9756                                ));
9757                            }
9758                            result.channels = map
9759                                .next_value::<std::option::Option<
9760                                    std::collections::HashMap<
9761                                        std::string::String,
9762                                        crate::model::ChannelConfig,
9763                                    >,
9764                                >>()?
9765                                .unwrap_or_default();
9766                        }
9767                        __FieldTag::__versions => {
9768                            if !fields.insert(__FieldTag::__versions) {
9769                                return std::result::Result::Err(A::Error::duplicate_field(
9770                                    "multiple values for versions",
9771                                ));
9772                            }
9773                            result.versions = map.next_value::<std::option::Option<std::vec::Vec<crate::model::Version>>>()?.unwrap_or_default();
9774                        }
9775                        __FieldTag::__default_version => {
9776                            if !fields.insert(__FieldTag::__default_version) {
9777                                return std::result::Result::Err(A::Error::duplicate_field(
9778                                    "multiple values for default_version",
9779                                ));
9780                            }
9781                            result.default_version = map
9782                                .next_value::<std::option::Option<std::string::String>>()?
9783                                .unwrap_or_default();
9784                        }
9785                        __FieldTag::Unknown(key) => {
9786                            let value = map.next_value::<serde_json::Value>()?;
9787                            result._unknown_fields.insert(key, value);
9788                        }
9789                    }
9790                }
9791                std::result::Result::Ok(result)
9792            }
9793        }
9794        deserializer.deserialize_any(Visitor)
9795    }
9796}
9797
9798#[doc(hidden)]
9799impl serde::ser::Serialize for ServerConfig {
9800    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
9801    where
9802        S: serde::ser::Serializer,
9803    {
9804        use serde::ser::SerializeMap;
9805        #[allow(unused_imports)]
9806        use std::option::Option::Some;
9807        let mut state = serializer.serialize_map(std::option::Option::None)?;
9808        if !self.channels.is_empty() {
9809            state.serialize_entry("channels", &self.channels)?;
9810        }
9811        if !self.versions.is_empty() {
9812            state.serialize_entry("versions", &self.versions)?;
9813        }
9814        if !self.default_version.is_empty() {
9815            state.serialize_entry("defaultVersion", &self.default_version)?;
9816        }
9817        if !self._unknown_fields.is_empty() {
9818            for (key, value) in self._unknown_fields.iter() {
9819                state.serialize_entry(key, &value)?;
9820            }
9821        }
9822        state.end()
9823    }
9824}
9825
9826impl std::fmt::Debug for ServerConfig {
9827    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9828        let mut debug_struct = f.debug_struct("ServerConfig");
9829        debug_struct.field("channels", &self.channels);
9830        debug_struct.field("versions", &self.versions);
9831        debug_struct.field("default_version", &self.default_version);
9832        if !self._unknown_fields.is_empty() {
9833            debug_struct.field("_unknown_fields", &self._unknown_fields);
9834        }
9835        debug_struct.finish()
9836    }
9837}
9838
9839/// Configuration for a release channel.
9840#[derive(Clone, Default, PartialEq)]
9841#[non_exhaustive]
9842pub struct ChannelConfig {
9843    /// Output only. Default version for this release channel, e.g.: "1.4.0".
9844    pub default_version: std::string::String,
9845
9846    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
9847}
9848
9849impl ChannelConfig {
9850    pub fn new() -> Self {
9851        std::default::Default::default()
9852    }
9853
9854    /// Sets the value of [default_version][crate::model::ChannelConfig::default_version].
9855    pub fn set_default_version<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
9856        self.default_version = v.into();
9857        self
9858    }
9859}
9860
9861impl wkt::message::Message for ChannelConfig {
9862    fn typename() -> &'static str {
9863        "type.googleapis.com/google.cloud.edgecontainer.v1.ChannelConfig"
9864    }
9865}
9866
9867#[doc(hidden)]
9868impl<'de> serde::de::Deserialize<'de> for ChannelConfig {
9869    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9870    where
9871        D: serde::Deserializer<'de>,
9872    {
9873        #[allow(non_camel_case_types)]
9874        #[doc(hidden)]
9875        #[derive(PartialEq, Eq, Hash)]
9876        enum __FieldTag {
9877            __default_version,
9878            Unknown(std::string::String),
9879        }
9880        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
9881            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9882            where
9883                D: serde::Deserializer<'de>,
9884            {
9885                struct Visitor;
9886                impl<'de> serde::de::Visitor<'de> for Visitor {
9887                    type Value = __FieldTag;
9888                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
9889                        formatter.write_str("a field name for ChannelConfig")
9890                    }
9891                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
9892                    where
9893                        E: serde::de::Error,
9894                    {
9895                        use std::result::Result::Ok;
9896                        use std::string::ToString;
9897                        match value {
9898                            "defaultVersion" => Ok(__FieldTag::__default_version),
9899                            "default_version" => Ok(__FieldTag::__default_version),
9900                            _ => Ok(__FieldTag::Unknown(value.to_string())),
9901                        }
9902                    }
9903                }
9904                deserializer.deserialize_identifier(Visitor)
9905            }
9906        }
9907        struct Visitor;
9908        impl<'de> serde::de::Visitor<'de> for Visitor {
9909            type Value = ChannelConfig;
9910            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
9911                formatter.write_str("struct ChannelConfig")
9912            }
9913            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
9914            where
9915                A: serde::de::MapAccess<'de>,
9916            {
9917                #[allow(unused_imports)]
9918                use serde::de::Error;
9919                use std::option::Option::Some;
9920                let mut fields = std::collections::HashSet::new();
9921                let mut result = Self::Value::new();
9922                while let Some(tag) = map.next_key::<__FieldTag>()? {
9923                    #[allow(clippy::match_single_binding)]
9924                    match tag {
9925                        __FieldTag::__default_version => {
9926                            if !fields.insert(__FieldTag::__default_version) {
9927                                return std::result::Result::Err(A::Error::duplicate_field(
9928                                    "multiple values for default_version",
9929                                ));
9930                            }
9931                            result.default_version = map
9932                                .next_value::<std::option::Option<std::string::String>>()?
9933                                .unwrap_or_default();
9934                        }
9935                        __FieldTag::Unknown(key) => {
9936                            let value = map.next_value::<serde_json::Value>()?;
9937                            result._unknown_fields.insert(key, value);
9938                        }
9939                    }
9940                }
9941                std::result::Result::Ok(result)
9942            }
9943        }
9944        deserializer.deserialize_any(Visitor)
9945    }
9946}
9947
9948#[doc(hidden)]
9949impl serde::ser::Serialize for ChannelConfig {
9950    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
9951    where
9952        S: serde::ser::Serializer,
9953    {
9954        use serde::ser::SerializeMap;
9955        #[allow(unused_imports)]
9956        use std::option::Option::Some;
9957        let mut state = serializer.serialize_map(std::option::Option::None)?;
9958        if !self.default_version.is_empty() {
9959            state.serialize_entry("defaultVersion", &self.default_version)?;
9960        }
9961        if !self._unknown_fields.is_empty() {
9962            for (key, value) in self._unknown_fields.iter() {
9963                state.serialize_entry(key, &value)?;
9964            }
9965        }
9966        state.end()
9967    }
9968}
9969
9970impl std::fmt::Debug for ChannelConfig {
9971    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9972        let mut debug_struct = f.debug_struct("ChannelConfig");
9973        debug_struct.field("default_version", &self.default_version);
9974        if !self._unknown_fields.is_empty() {
9975            debug_struct.field("_unknown_fields", &self._unknown_fields);
9976        }
9977        debug_struct.finish()
9978    }
9979}
9980
9981/// Version of a cluster.
9982#[derive(Clone, Default, PartialEq)]
9983#[non_exhaustive]
9984pub struct Version {
9985    /// Output only. Name of the version, e.g.: "1.4.0".
9986    pub name: std::string::String,
9987
9988    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
9989}
9990
9991impl Version {
9992    pub fn new() -> Self {
9993        std::default::Default::default()
9994    }
9995
9996    /// Sets the value of [name][crate::model::Version::name].
9997    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
9998        self.name = v.into();
9999        self
10000    }
10001}
10002
10003impl wkt::message::Message for Version {
10004    fn typename() -> &'static str {
10005        "type.googleapis.com/google.cloud.edgecontainer.v1.Version"
10006    }
10007}
10008
10009#[doc(hidden)]
10010impl<'de> serde::de::Deserialize<'de> for Version {
10011    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
10012    where
10013        D: serde::Deserializer<'de>,
10014    {
10015        #[allow(non_camel_case_types)]
10016        #[doc(hidden)]
10017        #[derive(PartialEq, Eq, Hash)]
10018        enum __FieldTag {
10019            __name,
10020            Unknown(std::string::String),
10021        }
10022        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
10023            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
10024            where
10025                D: serde::Deserializer<'de>,
10026            {
10027                struct Visitor;
10028                impl<'de> serde::de::Visitor<'de> for Visitor {
10029                    type Value = __FieldTag;
10030                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
10031                        formatter.write_str("a field name for Version")
10032                    }
10033                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
10034                    where
10035                        E: serde::de::Error,
10036                    {
10037                        use std::result::Result::Ok;
10038                        use std::string::ToString;
10039                        match value {
10040                            "name" => Ok(__FieldTag::__name),
10041                            _ => Ok(__FieldTag::Unknown(value.to_string())),
10042                        }
10043                    }
10044                }
10045                deserializer.deserialize_identifier(Visitor)
10046            }
10047        }
10048        struct Visitor;
10049        impl<'de> serde::de::Visitor<'de> for Visitor {
10050            type Value = Version;
10051            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
10052                formatter.write_str("struct Version")
10053            }
10054            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
10055            where
10056                A: serde::de::MapAccess<'de>,
10057            {
10058                #[allow(unused_imports)]
10059                use serde::de::Error;
10060                use std::option::Option::Some;
10061                let mut fields = std::collections::HashSet::new();
10062                let mut result = Self::Value::new();
10063                while let Some(tag) = map.next_key::<__FieldTag>()? {
10064                    #[allow(clippy::match_single_binding)]
10065                    match tag {
10066                        __FieldTag::__name => {
10067                            if !fields.insert(__FieldTag::__name) {
10068                                return std::result::Result::Err(A::Error::duplicate_field(
10069                                    "multiple values for name",
10070                                ));
10071                            }
10072                            result.name = map
10073                                .next_value::<std::option::Option<std::string::String>>()?
10074                                .unwrap_or_default();
10075                        }
10076                        __FieldTag::Unknown(key) => {
10077                            let value = map.next_value::<serde_json::Value>()?;
10078                            result._unknown_fields.insert(key, value);
10079                        }
10080                    }
10081                }
10082                std::result::Result::Ok(result)
10083            }
10084        }
10085        deserializer.deserialize_any(Visitor)
10086    }
10087}
10088
10089#[doc(hidden)]
10090impl serde::ser::Serialize for Version {
10091    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
10092    where
10093        S: serde::ser::Serializer,
10094    {
10095        use serde::ser::SerializeMap;
10096        #[allow(unused_imports)]
10097        use std::option::Option::Some;
10098        let mut state = serializer.serialize_map(std::option::Option::None)?;
10099        if !self.name.is_empty() {
10100            state.serialize_entry("name", &self.name)?;
10101        }
10102        if !self._unknown_fields.is_empty() {
10103            for (key, value) in self._unknown_fields.iter() {
10104                state.serialize_entry(key, &value)?;
10105            }
10106        }
10107        state.end()
10108    }
10109}
10110
10111impl std::fmt::Debug for Version {
10112    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10113        let mut debug_struct = f.debug_struct("Version");
10114        debug_struct.field("name", &self.name);
10115        if !self._unknown_fields.is_empty() {
10116            debug_struct.field("_unknown_fields", &self._unknown_fields);
10117        }
10118        debug_struct.finish()
10119    }
10120}
10121
10122/// Long-running operation metadata for Edge Container API methods.
10123#[derive(Clone, Default, PartialEq)]
10124#[non_exhaustive]
10125pub struct OperationMetadata {
10126    /// The time the operation was created.
10127    pub create_time: std::option::Option<wkt::Timestamp>,
10128
10129    /// The time the operation finished running.
10130    pub end_time: std::option::Option<wkt::Timestamp>,
10131
10132    /// Server-defined resource path for the target of the operation.
10133    pub target: std::string::String,
10134
10135    /// The verb executed by the operation.
10136    pub verb: std::string::String,
10137
10138    /// Human-readable status of the operation, if any.
10139    pub status_message: std::string::String,
10140
10141    /// Identifies whether the user has requested cancellation of the operation.
10142    /// Operations that have successfully been cancelled have [Operation.error][]
10143    /// value with a [google.rpc.Status.code][google.rpc.Status.code] of 1,
10144    /// corresponding to `Code.CANCELLED`.
10145    ///
10146    /// [google.rpc.Status.code]: rpc::model::Status::code
10147    pub requested_cancellation: bool,
10148
10149    /// API version used to start the operation.
10150    pub api_version: std::string::String,
10151
10152    /// Warnings that do not block the operation, but still hold relevant
10153    /// information for the end user to receive.
10154    pub warnings: std::vec::Vec<std::string::String>,
10155
10156    /// Machine-readable status of the operation, if any.
10157    pub status_reason: crate::model::operation_metadata::StatusReason,
10158
10159    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
10160}
10161
10162impl OperationMetadata {
10163    pub fn new() -> Self {
10164        std::default::Default::default()
10165    }
10166
10167    /// Sets the value of [create_time][crate::model::OperationMetadata::create_time].
10168    pub fn set_create_time<T>(mut self, v: T) -> Self
10169    where
10170        T: std::convert::Into<wkt::Timestamp>,
10171    {
10172        self.create_time = std::option::Option::Some(v.into());
10173        self
10174    }
10175
10176    /// Sets or clears the value of [create_time][crate::model::OperationMetadata::create_time].
10177    pub fn set_or_clear_create_time<T>(mut self, v: std::option::Option<T>) -> Self
10178    where
10179        T: std::convert::Into<wkt::Timestamp>,
10180    {
10181        self.create_time = v.map(|x| x.into());
10182        self
10183    }
10184
10185    /// Sets the value of [end_time][crate::model::OperationMetadata::end_time].
10186    pub fn set_end_time<T>(mut self, v: T) -> Self
10187    where
10188        T: std::convert::Into<wkt::Timestamp>,
10189    {
10190        self.end_time = std::option::Option::Some(v.into());
10191        self
10192    }
10193
10194    /// Sets or clears the value of [end_time][crate::model::OperationMetadata::end_time].
10195    pub fn set_or_clear_end_time<T>(mut self, v: std::option::Option<T>) -> Self
10196    where
10197        T: std::convert::Into<wkt::Timestamp>,
10198    {
10199        self.end_time = v.map(|x| x.into());
10200        self
10201    }
10202
10203    /// Sets the value of [target][crate::model::OperationMetadata::target].
10204    pub fn set_target<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
10205        self.target = v.into();
10206        self
10207    }
10208
10209    /// Sets the value of [verb][crate::model::OperationMetadata::verb].
10210    pub fn set_verb<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
10211        self.verb = v.into();
10212        self
10213    }
10214
10215    /// Sets the value of [status_message][crate::model::OperationMetadata::status_message].
10216    pub fn set_status_message<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
10217        self.status_message = v.into();
10218        self
10219    }
10220
10221    /// Sets the value of [requested_cancellation][crate::model::OperationMetadata::requested_cancellation].
10222    pub fn set_requested_cancellation<T: std::convert::Into<bool>>(mut self, v: T) -> Self {
10223        self.requested_cancellation = v.into();
10224        self
10225    }
10226
10227    /// Sets the value of [api_version][crate::model::OperationMetadata::api_version].
10228    pub fn set_api_version<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
10229        self.api_version = v.into();
10230        self
10231    }
10232
10233    /// Sets the value of [warnings][crate::model::OperationMetadata::warnings].
10234    pub fn set_warnings<T, V>(mut self, v: T) -> Self
10235    where
10236        T: std::iter::IntoIterator<Item = V>,
10237        V: std::convert::Into<std::string::String>,
10238    {
10239        use std::iter::Iterator;
10240        self.warnings = v.into_iter().map(|i| i.into()).collect();
10241        self
10242    }
10243
10244    /// Sets the value of [status_reason][crate::model::OperationMetadata::status_reason].
10245    pub fn set_status_reason<
10246        T: std::convert::Into<crate::model::operation_metadata::StatusReason>,
10247    >(
10248        mut self,
10249        v: T,
10250    ) -> Self {
10251        self.status_reason = v.into();
10252        self
10253    }
10254}
10255
10256impl wkt::message::Message for OperationMetadata {
10257    fn typename() -> &'static str {
10258        "type.googleapis.com/google.cloud.edgecontainer.v1.OperationMetadata"
10259    }
10260}
10261
10262#[doc(hidden)]
10263impl<'de> serde::de::Deserialize<'de> for OperationMetadata {
10264    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
10265    where
10266        D: serde::Deserializer<'de>,
10267    {
10268        #[allow(non_camel_case_types)]
10269        #[doc(hidden)]
10270        #[derive(PartialEq, Eq, Hash)]
10271        enum __FieldTag {
10272            __create_time,
10273            __end_time,
10274            __target,
10275            __verb,
10276            __status_message,
10277            __requested_cancellation,
10278            __api_version,
10279            __warnings,
10280            __status_reason,
10281            Unknown(std::string::String),
10282        }
10283        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
10284            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
10285            where
10286                D: serde::Deserializer<'de>,
10287            {
10288                struct Visitor;
10289                impl<'de> serde::de::Visitor<'de> for Visitor {
10290                    type Value = __FieldTag;
10291                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
10292                        formatter.write_str("a field name for OperationMetadata")
10293                    }
10294                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
10295                    where
10296                        E: serde::de::Error,
10297                    {
10298                        use std::result::Result::Ok;
10299                        use std::string::ToString;
10300                        match value {
10301                            "createTime" => Ok(__FieldTag::__create_time),
10302                            "create_time" => Ok(__FieldTag::__create_time),
10303                            "endTime" => Ok(__FieldTag::__end_time),
10304                            "end_time" => Ok(__FieldTag::__end_time),
10305                            "target" => Ok(__FieldTag::__target),
10306                            "verb" => Ok(__FieldTag::__verb),
10307                            "statusMessage" => Ok(__FieldTag::__status_message),
10308                            "status_message" => Ok(__FieldTag::__status_message),
10309                            "requestedCancellation" => Ok(__FieldTag::__requested_cancellation),
10310                            "requested_cancellation" => Ok(__FieldTag::__requested_cancellation),
10311                            "apiVersion" => Ok(__FieldTag::__api_version),
10312                            "api_version" => Ok(__FieldTag::__api_version),
10313                            "warnings" => Ok(__FieldTag::__warnings),
10314                            "statusReason" => Ok(__FieldTag::__status_reason),
10315                            "status_reason" => Ok(__FieldTag::__status_reason),
10316                            _ => Ok(__FieldTag::Unknown(value.to_string())),
10317                        }
10318                    }
10319                }
10320                deserializer.deserialize_identifier(Visitor)
10321            }
10322        }
10323        struct Visitor;
10324        impl<'de> serde::de::Visitor<'de> for Visitor {
10325            type Value = OperationMetadata;
10326            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
10327                formatter.write_str("struct OperationMetadata")
10328            }
10329            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
10330            where
10331                A: serde::de::MapAccess<'de>,
10332            {
10333                #[allow(unused_imports)]
10334                use serde::de::Error;
10335                use std::option::Option::Some;
10336                let mut fields = std::collections::HashSet::new();
10337                let mut result = Self::Value::new();
10338                while let Some(tag) = map.next_key::<__FieldTag>()? {
10339                    #[allow(clippy::match_single_binding)]
10340                    match tag {
10341                        __FieldTag::__create_time => {
10342                            if !fields.insert(__FieldTag::__create_time) {
10343                                return std::result::Result::Err(A::Error::duplicate_field(
10344                                    "multiple values for create_time",
10345                                ));
10346                            }
10347                            result.create_time =
10348                                map.next_value::<std::option::Option<wkt::Timestamp>>()?;
10349                        }
10350                        __FieldTag::__end_time => {
10351                            if !fields.insert(__FieldTag::__end_time) {
10352                                return std::result::Result::Err(A::Error::duplicate_field(
10353                                    "multiple values for end_time",
10354                                ));
10355                            }
10356                            result.end_time =
10357                                map.next_value::<std::option::Option<wkt::Timestamp>>()?;
10358                        }
10359                        __FieldTag::__target => {
10360                            if !fields.insert(__FieldTag::__target) {
10361                                return std::result::Result::Err(A::Error::duplicate_field(
10362                                    "multiple values for target",
10363                                ));
10364                            }
10365                            result.target = map
10366                                .next_value::<std::option::Option<std::string::String>>()?
10367                                .unwrap_or_default();
10368                        }
10369                        __FieldTag::__verb => {
10370                            if !fields.insert(__FieldTag::__verb) {
10371                                return std::result::Result::Err(A::Error::duplicate_field(
10372                                    "multiple values for verb",
10373                                ));
10374                            }
10375                            result.verb = map
10376                                .next_value::<std::option::Option<std::string::String>>()?
10377                                .unwrap_or_default();
10378                        }
10379                        __FieldTag::__status_message => {
10380                            if !fields.insert(__FieldTag::__status_message) {
10381                                return std::result::Result::Err(A::Error::duplicate_field(
10382                                    "multiple values for status_message",
10383                                ));
10384                            }
10385                            result.status_message = map
10386                                .next_value::<std::option::Option<std::string::String>>()?
10387                                .unwrap_or_default();
10388                        }
10389                        __FieldTag::__requested_cancellation => {
10390                            if !fields.insert(__FieldTag::__requested_cancellation) {
10391                                return std::result::Result::Err(A::Error::duplicate_field(
10392                                    "multiple values for requested_cancellation",
10393                                ));
10394                            }
10395                            result.requested_cancellation = map
10396                                .next_value::<std::option::Option<bool>>()?
10397                                .unwrap_or_default();
10398                        }
10399                        __FieldTag::__api_version => {
10400                            if !fields.insert(__FieldTag::__api_version) {
10401                                return std::result::Result::Err(A::Error::duplicate_field(
10402                                    "multiple values for api_version",
10403                                ));
10404                            }
10405                            result.api_version = map
10406                                .next_value::<std::option::Option<std::string::String>>()?
10407                                .unwrap_or_default();
10408                        }
10409                        __FieldTag::__warnings => {
10410                            if !fields.insert(__FieldTag::__warnings) {
10411                                return std::result::Result::Err(A::Error::duplicate_field(
10412                                    "multiple values for warnings",
10413                                ));
10414                            }
10415                            result.warnings = map.next_value::<std::option::Option<std::vec::Vec<std::string::String>>>()?.unwrap_or_default();
10416                        }
10417                        __FieldTag::__status_reason => {
10418                            if !fields.insert(__FieldTag::__status_reason) {
10419                                return std::result::Result::Err(A::Error::duplicate_field(
10420                                    "multiple values for status_reason",
10421                                ));
10422                            }
10423                            result.status_reason =
10424                                map.next_value::<std::option::Option<
10425                                    crate::model::operation_metadata::StatusReason,
10426                                >>()?
10427                                .unwrap_or_default();
10428                        }
10429                        __FieldTag::Unknown(key) => {
10430                            let value = map.next_value::<serde_json::Value>()?;
10431                            result._unknown_fields.insert(key, value);
10432                        }
10433                    }
10434                }
10435                std::result::Result::Ok(result)
10436            }
10437        }
10438        deserializer.deserialize_any(Visitor)
10439    }
10440}
10441
10442#[doc(hidden)]
10443impl serde::ser::Serialize for OperationMetadata {
10444    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
10445    where
10446        S: serde::ser::Serializer,
10447    {
10448        use serde::ser::SerializeMap;
10449        #[allow(unused_imports)]
10450        use std::option::Option::Some;
10451        let mut state = serializer.serialize_map(std::option::Option::None)?;
10452        if self.create_time.is_some() {
10453            state.serialize_entry("createTime", &self.create_time)?;
10454        }
10455        if self.end_time.is_some() {
10456            state.serialize_entry("endTime", &self.end_time)?;
10457        }
10458        if !self.target.is_empty() {
10459            state.serialize_entry("target", &self.target)?;
10460        }
10461        if !self.verb.is_empty() {
10462            state.serialize_entry("verb", &self.verb)?;
10463        }
10464        if !self.status_message.is_empty() {
10465            state.serialize_entry("statusMessage", &self.status_message)?;
10466        }
10467        if !wkt::internal::is_default(&self.requested_cancellation) {
10468            state.serialize_entry("requestedCancellation", &self.requested_cancellation)?;
10469        }
10470        if !self.api_version.is_empty() {
10471            state.serialize_entry("apiVersion", &self.api_version)?;
10472        }
10473        if !self.warnings.is_empty() {
10474            state.serialize_entry("warnings", &self.warnings)?;
10475        }
10476        if !wkt::internal::is_default(&self.status_reason) {
10477            state.serialize_entry("statusReason", &self.status_reason)?;
10478        }
10479        if !self._unknown_fields.is_empty() {
10480            for (key, value) in self._unknown_fields.iter() {
10481                state.serialize_entry(key, &value)?;
10482            }
10483        }
10484        state.end()
10485    }
10486}
10487
10488impl std::fmt::Debug for OperationMetadata {
10489    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10490        let mut debug_struct = f.debug_struct("OperationMetadata");
10491        debug_struct.field("create_time", &self.create_time);
10492        debug_struct.field("end_time", &self.end_time);
10493        debug_struct.field("target", &self.target);
10494        debug_struct.field("verb", &self.verb);
10495        debug_struct.field("status_message", &self.status_message);
10496        debug_struct.field("requested_cancellation", &self.requested_cancellation);
10497        debug_struct.field("api_version", &self.api_version);
10498        debug_struct.field("warnings", &self.warnings);
10499        debug_struct.field("status_reason", &self.status_reason);
10500        if !self._unknown_fields.is_empty() {
10501            debug_struct.field("_unknown_fields", &self._unknown_fields);
10502        }
10503        debug_struct.finish()
10504    }
10505}
10506
10507/// Defines additional types related to [OperationMetadata].
10508pub mod operation_metadata {
10509    #[allow(unused_imports)]
10510    use super::*;
10511
10512    /// Indicates the reason for the status of the operation.
10513    ///
10514    /// # Working with unknown values
10515    ///
10516    /// This enum is defined as `#[non_exhaustive]` because Google Cloud may add
10517    /// additional enum variants at any time. Adding new variants is not considered
10518    /// a breaking change. Applications should write their code in anticipation of:
10519    ///
10520    /// - New values appearing in future releases of the client library, **and**
10521    /// - New values received dynamically, without application changes.
10522    ///
10523    /// Please consult the [Working with enums] section in the user guide for some
10524    /// guidelines.
10525    ///
10526    /// [Working with enums]: https://google-cloud-rust.github.io/working_with_enums.html
10527    #[derive(Clone, Debug, PartialEq)]
10528    #[non_exhaustive]
10529    pub enum StatusReason {
10530        /// Reason unknown.
10531        Unspecified,
10532        /// The cluster upgrade is currently paused.
10533        UpgradePaused,
10534        /// If set, the enum was initialized with an unknown value.
10535        ///
10536        /// Applications can examine the value using [StatusReason::value] or
10537        /// [StatusReason::name].
10538        UnknownValue(status_reason::UnknownValue),
10539    }
10540
10541    #[doc(hidden)]
10542    pub mod status_reason {
10543        #[allow(unused_imports)]
10544        use super::*;
10545        #[derive(Clone, Debug, PartialEq)]
10546        pub struct UnknownValue(pub(crate) wkt::internal::UnknownEnumValue);
10547    }
10548
10549    impl StatusReason {
10550        /// Gets the enum value.
10551        ///
10552        /// Returns `None` if the enum contains an unknown value deserialized from
10553        /// the string representation of enums.
10554        pub fn value(&self) -> std::option::Option<i32> {
10555            match self {
10556                Self::Unspecified => std::option::Option::Some(0),
10557                Self::UpgradePaused => std::option::Option::Some(1),
10558                Self::UnknownValue(u) => u.0.value(),
10559            }
10560        }
10561
10562        /// Gets the enum value as a string.
10563        ///
10564        /// Returns `None` if the enum contains an unknown value deserialized from
10565        /// the integer representation of enums.
10566        pub fn name(&self) -> std::option::Option<&str> {
10567            match self {
10568                Self::Unspecified => std::option::Option::Some("STATUS_REASON_UNSPECIFIED"),
10569                Self::UpgradePaused => std::option::Option::Some("UPGRADE_PAUSED"),
10570                Self::UnknownValue(u) => u.0.name(),
10571            }
10572        }
10573    }
10574
10575    impl std::default::Default for StatusReason {
10576        fn default() -> Self {
10577            use std::convert::From;
10578            Self::from(0)
10579        }
10580    }
10581
10582    impl std::fmt::Display for StatusReason {
10583        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
10584            wkt::internal::display_enum(f, self.name(), self.value())
10585        }
10586    }
10587
10588    impl std::convert::From<i32> for StatusReason {
10589        fn from(value: i32) -> Self {
10590            match value {
10591                0 => Self::Unspecified,
10592                1 => Self::UpgradePaused,
10593                _ => Self::UnknownValue(status_reason::UnknownValue(
10594                    wkt::internal::UnknownEnumValue::Integer(value),
10595                )),
10596            }
10597        }
10598    }
10599
10600    impl std::convert::From<&str> for StatusReason {
10601        fn from(value: &str) -> Self {
10602            use std::string::ToString;
10603            match value {
10604                "STATUS_REASON_UNSPECIFIED" => Self::Unspecified,
10605                "UPGRADE_PAUSED" => Self::UpgradePaused,
10606                _ => Self::UnknownValue(status_reason::UnknownValue(
10607                    wkt::internal::UnknownEnumValue::String(value.to_string()),
10608                )),
10609            }
10610        }
10611    }
10612
10613    impl serde::ser::Serialize for StatusReason {
10614        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
10615        where
10616            S: serde::Serializer,
10617        {
10618            match self {
10619                Self::Unspecified => serializer.serialize_i32(0),
10620                Self::UpgradePaused => serializer.serialize_i32(1),
10621                Self::UnknownValue(u) => u.0.serialize(serializer),
10622            }
10623        }
10624    }
10625
10626    impl<'de> serde::de::Deserialize<'de> for StatusReason {
10627        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
10628        where
10629            D: serde::Deserializer<'de>,
10630        {
10631            deserializer.deserialize_any(wkt::internal::EnumVisitor::<StatusReason>::new(
10632                ".google.cloud.edgecontainer.v1.OperationMetadata.StatusReason",
10633            ))
10634        }
10635    }
10636}
10637
10638/// Lists clusters in a location.
10639#[derive(Clone, Default, PartialEq)]
10640#[non_exhaustive]
10641pub struct ListClustersRequest {
10642    /// Required. The parent location, which owns this collection of clusters.
10643    pub parent: std::string::String,
10644
10645    /// The maximum number of resources to list.
10646    pub page_size: i32,
10647
10648    /// A page token received from previous list request.
10649    /// A page token received from previous list request.
10650    pub page_token: std::string::String,
10651
10652    /// Only resources matching this filter will be listed.
10653    pub filter: std::string::String,
10654
10655    /// Specifies the order in which resources will be listed.
10656    pub order_by: std::string::String,
10657
10658    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
10659}
10660
10661impl ListClustersRequest {
10662    pub fn new() -> Self {
10663        std::default::Default::default()
10664    }
10665
10666    /// Sets the value of [parent][crate::model::ListClustersRequest::parent].
10667    pub fn set_parent<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
10668        self.parent = v.into();
10669        self
10670    }
10671
10672    /// Sets the value of [page_size][crate::model::ListClustersRequest::page_size].
10673    pub fn set_page_size<T: std::convert::Into<i32>>(mut self, v: T) -> Self {
10674        self.page_size = v.into();
10675        self
10676    }
10677
10678    /// Sets the value of [page_token][crate::model::ListClustersRequest::page_token].
10679    pub fn set_page_token<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
10680        self.page_token = v.into();
10681        self
10682    }
10683
10684    /// Sets the value of [filter][crate::model::ListClustersRequest::filter].
10685    pub fn set_filter<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
10686        self.filter = v.into();
10687        self
10688    }
10689
10690    /// Sets the value of [order_by][crate::model::ListClustersRequest::order_by].
10691    pub fn set_order_by<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
10692        self.order_by = v.into();
10693        self
10694    }
10695}
10696
10697impl wkt::message::Message for ListClustersRequest {
10698    fn typename() -> &'static str {
10699        "type.googleapis.com/google.cloud.edgecontainer.v1.ListClustersRequest"
10700    }
10701}
10702
10703#[doc(hidden)]
10704impl<'de> serde::de::Deserialize<'de> for ListClustersRequest {
10705    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
10706    where
10707        D: serde::Deserializer<'de>,
10708    {
10709        #[allow(non_camel_case_types)]
10710        #[doc(hidden)]
10711        #[derive(PartialEq, Eq, Hash)]
10712        enum __FieldTag {
10713            __parent,
10714            __page_size,
10715            __page_token,
10716            __filter,
10717            __order_by,
10718            Unknown(std::string::String),
10719        }
10720        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
10721            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
10722            where
10723                D: serde::Deserializer<'de>,
10724            {
10725                struct Visitor;
10726                impl<'de> serde::de::Visitor<'de> for Visitor {
10727                    type Value = __FieldTag;
10728                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
10729                        formatter.write_str("a field name for ListClustersRequest")
10730                    }
10731                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
10732                    where
10733                        E: serde::de::Error,
10734                    {
10735                        use std::result::Result::Ok;
10736                        use std::string::ToString;
10737                        match value {
10738                            "parent" => Ok(__FieldTag::__parent),
10739                            "pageSize" => Ok(__FieldTag::__page_size),
10740                            "page_size" => Ok(__FieldTag::__page_size),
10741                            "pageToken" => Ok(__FieldTag::__page_token),
10742                            "page_token" => Ok(__FieldTag::__page_token),
10743                            "filter" => Ok(__FieldTag::__filter),
10744                            "orderBy" => Ok(__FieldTag::__order_by),
10745                            "order_by" => Ok(__FieldTag::__order_by),
10746                            _ => Ok(__FieldTag::Unknown(value.to_string())),
10747                        }
10748                    }
10749                }
10750                deserializer.deserialize_identifier(Visitor)
10751            }
10752        }
10753        struct Visitor;
10754        impl<'de> serde::de::Visitor<'de> for Visitor {
10755            type Value = ListClustersRequest;
10756            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
10757                formatter.write_str("struct ListClustersRequest")
10758            }
10759            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
10760            where
10761                A: serde::de::MapAccess<'de>,
10762            {
10763                #[allow(unused_imports)]
10764                use serde::de::Error;
10765                use std::option::Option::Some;
10766                let mut fields = std::collections::HashSet::new();
10767                let mut result = Self::Value::new();
10768                while let Some(tag) = map.next_key::<__FieldTag>()? {
10769                    #[allow(clippy::match_single_binding)]
10770                    match tag {
10771                        __FieldTag::__parent => {
10772                            if !fields.insert(__FieldTag::__parent) {
10773                                return std::result::Result::Err(A::Error::duplicate_field(
10774                                    "multiple values for parent",
10775                                ));
10776                            }
10777                            result.parent = map
10778                                .next_value::<std::option::Option<std::string::String>>()?
10779                                .unwrap_or_default();
10780                        }
10781                        __FieldTag::__page_size => {
10782                            if !fields.insert(__FieldTag::__page_size) {
10783                                return std::result::Result::Err(A::Error::duplicate_field(
10784                                    "multiple values for page_size",
10785                                ));
10786                            }
10787                            struct __With(std::option::Option<i32>);
10788                            impl<'de> serde::de::Deserialize<'de> for __With {
10789                                fn deserialize<D>(
10790                                    deserializer: D,
10791                                ) -> std::result::Result<Self, D::Error>
10792                                where
10793                                    D: serde::de::Deserializer<'de>,
10794                                {
10795                                    serde_with::As::< std::option::Option<wkt::internal::I32> >::deserialize(deserializer).map(__With)
10796                                }
10797                            }
10798                            result.page_size = map.next_value::<__With>()?.0.unwrap_or_default();
10799                        }
10800                        __FieldTag::__page_token => {
10801                            if !fields.insert(__FieldTag::__page_token) {
10802                                return std::result::Result::Err(A::Error::duplicate_field(
10803                                    "multiple values for page_token",
10804                                ));
10805                            }
10806                            result.page_token = map
10807                                .next_value::<std::option::Option<std::string::String>>()?
10808                                .unwrap_or_default();
10809                        }
10810                        __FieldTag::__filter => {
10811                            if !fields.insert(__FieldTag::__filter) {
10812                                return std::result::Result::Err(A::Error::duplicate_field(
10813                                    "multiple values for filter",
10814                                ));
10815                            }
10816                            result.filter = map
10817                                .next_value::<std::option::Option<std::string::String>>()?
10818                                .unwrap_or_default();
10819                        }
10820                        __FieldTag::__order_by => {
10821                            if !fields.insert(__FieldTag::__order_by) {
10822                                return std::result::Result::Err(A::Error::duplicate_field(
10823                                    "multiple values for order_by",
10824                                ));
10825                            }
10826                            result.order_by = map
10827                                .next_value::<std::option::Option<std::string::String>>()?
10828                                .unwrap_or_default();
10829                        }
10830                        __FieldTag::Unknown(key) => {
10831                            let value = map.next_value::<serde_json::Value>()?;
10832                            result._unknown_fields.insert(key, value);
10833                        }
10834                    }
10835                }
10836                std::result::Result::Ok(result)
10837            }
10838        }
10839        deserializer.deserialize_any(Visitor)
10840    }
10841}
10842
10843#[doc(hidden)]
10844impl serde::ser::Serialize for ListClustersRequest {
10845    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
10846    where
10847        S: serde::ser::Serializer,
10848    {
10849        use serde::ser::SerializeMap;
10850        #[allow(unused_imports)]
10851        use std::option::Option::Some;
10852        let mut state = serializer.serialize_map(std::option::Option::None)?;
10853        if !self.parent.is_empty() {
10854            state.serialize_entry("parent", &self.parent)?;
10855        }
10856        if !wkt::internal::is_default(&self.page_size) {
10857            struct __With<'a>(&'a i32);
10858            impl<'a> serde::ser::Serialize for __With<'a> {
10859                fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
10860                where
10861                    S: serde::ser::Serializer,
10862                {
10863                    serde_with::As::<wkt::internal::I32>::serialize(self.0, serializer)
10864                }
10865            }
10866            state.serialize_entry("pageSize", &__With(&self.page_size))?;
10867        }
10868        if !self.page_token.is_empty() {
10869            state.serialize_entry("pageToken", &self.page_token)?;
10870        }
10871        if !self.filter.is_empty() {
10872            state.serialize_entry("filter", &self.filter)?;
10873        }
10874        if !self.order_by.is_empty() {
10875            state.serialize_entry("orderBy", &self.order_by)?;
10876        }
10877        if !self._unknown_fields.is_empty() {
10878            for (key, value) in self._unknown_fields.iter() {
10879                state.serialize_entry(key, &value)?;
10880            }
10881        }
10882        state.end()
10883    }
10884}
10885
10886impl std::fmt::Debug for ListClustersRequest {
10887    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10888        let mut debug_struct = f.debug_struct("ListClustersRequest");
10889        debug_struct.field("parent", &self.parent);
10890        debug_struct.field("page_size", &self.page_size);
10891        debug_struct.field("page_token", &self.page_token);
10892        debug_struct.field("filter", &self.filter);
10893        debug_struct.field("order_by", &self.order_by);
10894        if !self._unknown_fields.is_empty() {
10895            debug_struct.field("_unknown_fields", &self._unknown_fields);
10896        }
10897        debug_struct.finish()
10898    }
10899}
10900
10901/// List of clusters in a location.
10902#[derive(Clone, Default, PartialEq)]
10903#[non_exhaustive]
10904pub struct ListClustersResponse {
10905    /// Clusters in the location.
10906    pub clusters: std::vec::Vec<crate::model::Cluster>,
10907
10908    /// A token to retrieve next page of results.
10909    pub next_page_token: std::string::String,
10910
10911    /// Locations that could not be reached.
10912    pub unreachable: std::vec::Vec<std::string::String>,
10913
10914    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
10915}
10916
10917impl ListClustersResponse {
10918    pub fn new() -> Self {
10919        std::default::Default::default()
10920    }
10921
10922    /// Sets the value of [clusters][crate::model::ListClustersResponse::clusters].
10923    pub fn set_clusters<T, V>(mut self, v: T) -> Self
10924    where
10925        T: std::iter::IntoIterator<Item = V>,
10926        V: std::convert::Into<crate::model::Cluster>,
10927    {
10928        use std::iter::Iterator;
10929        self.clusters = v.into_iter().map(|i| i.into()).collect();
10930        self
10931    }
10932
10933    /// Sets the value of [next_page_token][crate::model::ListClustersResponse::next_page_token].
10934    pub fn set_next_page_token<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
10935        self.next_page_token = v.into();
10936        self
10937    }
10938
10939    /// Sets the value of [unreachable][crate::model::ListClustersResponse::unreachable].
10940    pub fn set_unreachable<T, V>(mut self, v: T) -> Self
10941    where
10942        T: std::iter::IntoIterator<Item = V>,
10943        V: std::convert::Into<std::string::String>,
10944    {
10945        use std::iter::Iterator;
10946        self.unreachable = v.into_iter().map(|i| i.into()).collect();
10947        self
10948    }
10949}
10950
10951impl wkt::message::Message for ListClustersResponse {
10952    fn typename() -> &'static str {
10953        "type.googleapis.com/google.cloud.edgecontainer.v1.ListClustersResponse"
10954    }
10955}
10956
10957#[doc(hidden)]
10958impl gax::paginator::internal::PageableResponse for ListClustersResponse {
10959    type PageItem = crate::model::Cluster;
10960
10961    fn items(self) -> std::vec::Vec<Self::PageItem> {
10962        self.clusters
10963    }
10964
10965    fn next_page_token(&self) -> std::string::String {
10966        use std::clone::Clone;
10967        self.next_page_token.clone()
10968    }
10969}
10970
10971#[doc(hidden)]
10972impl<'de> serde::de::Deserialize<'de> for ListClustersResponse {
10973    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
10974    where
10975        D: serde::Deserializer<'de>,
10976    {
10977        #[allow(non_camel_case_types)]
10978        #[doc(hidden)]
10979        #[derive(PartialEq, Eq, Hash)]
10980        enum __FieldTag {
10981            __clusters,
10982            __next_page_token,
10983            __unreachable,
10984            Unknown(std::string::String),
10985        }
10986        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
10987            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
10988            where
10989                D: serde::Deserializer<'de>,
10990            {
10991                struct Visitor;
10992                impl<'de> serde::de::Visitor<'de> for Visitor {
10993                    type Value = __FieldTag;
10994                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
10995                        formatter.write_str("a field name for ListClustersResponse")
10996                    }
10997                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
10998                    where
10999                        E: serde::de::Error,
11000                    {
11001                        use std::result::Result::Ok;
11002                        use std::string::ToString;
11003                        match value {
11004                            "clusters" => Ok(__FieldTag::__clusters),
11005                            "nextPageToken" => Ok(__FieldTag::__next_page_token),
11006                            "next_page_token" => Ok(__FieldTag::__next_page_token),
11007                            "unreachable" => Ok(__FieldTag::__unreachable),
11008                            _ => Ok(__FieldTag::Unknown(value.to_string())),
11009                        }
11010                    }
11011                }
11012                deserializer.deserialize_identifier(Visitor)
11013            }
11014        }
11015        struct Visitor;
11016        impl<'de> serde::de::Visitor<'de> for Visitor {
11017            type Value = ListClustersResponse;
11018            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
11019                formatter.write_str("struct ListClustersResponse")
11020            }
11021            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
11022            where
11023                A: serde::de::MapAccess<'de>,
11024            {
11025                #[allow(unused_imports)]
11026                use serde::de::Error;
11027                use std::option::Option::Some;
11028                let mut fields = std::collections::HashSet::new();
11029                let mut result = Self::Value::new();
11030                while let Some(tag) = map.next_key::<__FieldTag>()? {
11031                    #[allow(clippy::match_single_binding)]
11032                    match tag {
11033                        __FieldTag::__clusters => {
11034                            if !fields.insert(__FieldTag::__clusters) {
11035                                return std::result::Result::Err(A::Error::duplicate_field(
11036                                    "multiple values for clusters",
11037                                ));
11038                            }
11039                            result.clusters = map.next_value::<std::option::Option<std::vec::Vec<crate::model::Cluster>>>()?.unwrap_or_default();
11040                        }
11041                        __FieldTag::__next_page_token => {
11042                            if !fields.insert(__FieldTag::__next_page_token) {
11043                                return std::result::Result::Err(A::Error::duplicate_field(
11044                                    "multiple values for next_page_token",
11045                                ));
11046                            }
11047                            result.next_page_token = map
11048                                .next_value::<std::option::Option<std::string::String>>()?
11049                                .unwrap_or_default();
11050                        }
11051                        __FieldTag::__unreachable => {
11052                            if !fields.insert(__FieldTag::__unreachable) {
11053                                return std::result::Result::Err(A::Error::duplicate_field(
11054                                    "multiple values for unreachable",
11055                                ));
11056                            }
11057                            result.unreachable = map.next_value::<std::option::Option<std::vec::Vec<std::string::String>>>()?.unwrap_or_default();
11058                        }
11059                        __FieldTag::Unknown(key) => {
11060                            let value = map.next_value::<serde_json::Value>()?;
11061                            result._unknown_fields.insert(key, value);
11062                        }
11063                    }
11064                }
11065                std::result::Result::Ok(result)
11066            }
11067        }
11068        deserializer.deserialize_any(Visitor)
11069    }
11070}
11071
11072#[doc(hidden)]
11073impl serde::ser::Serialize for ListClustersResponse {
11074    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
11075    where
11076        S: serde::ser::Serializer,
11077    {
11078        use serde::ser::SerializeMap;
11079        #[allow(unused_imports)]
11080        use std::option::Option::Some;
11081        let mut state = serializer.serialize_map(std::option::Option::None)?;
11082        if !self.clusters.is_empty() {
11083            state.serialize_entry("clusters", &self.clusters)?;
11084        }
11085        if !self.next_page_token.is_empty() {
11086            state.serialize_entry("nextPageToken", &self.next_page_token)?;
11087        }
11088        if !self.unreachable.is_empty() {
11089            state.serialize_entry("unreachable", &self.unreachable)?;
11090        }
11091        if !self._unknown_fields.is_empty() {
11092            for (key, value) in self._unknown_fields.iter() {
11093                state.serialize_entry(key, &value)?;
11094            }
11095        }
11096        state.end()
11097    }
11098}
11099
11100impl std::fmt::Debug for ListClustersResponse {
11101    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11102        let mut debug_struct = f.debug_struct("ListClustersResponse");
11103        debug_struct.field("clusters", &self.clusters);
11104        debug_struct.field("next_page_token", &self.next_page_token);
11105        debug_struct.field("unreachable", &self.unreachable);
11106        if !self._unknown_fields.is_empty() {
11107            debug_struct.field("_unknown_fields", &self._unknown_fields);
11108        }
11109        debug_struct.finish()
11110    }
11111}
11112
11113/// Gets a cluster.
11114#[derive(Clone, Default, PartialEq)]
11115#[non_exhaustive]
11116pub struct GetClusterRequest {
11117    /// Required. The resource name of the cluster.
11118    pub name: std::string::String,
11119
11120    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
11121}
11122
11123impl GetClusterRequest {
11124    pub fn new() -> Self {
11125        std::default::Default::default()
11126    }
11127
11128    /// Sets the value of [name][crate::model::GetClusterRequest::name].
11129    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
11130        self.name = v.into();
11131        self
11132    }
11133}
11134
11135impl wkt::message::Message for GetClusterRequest {
11136    fn typename() -> &'static str {
11137        "type.googleapis.com/google.cloud.edgecontainer.v1.GetClusterRequest"
11138    }
11139}
11140
11141#[doc(hidden)]
11142impl<'de> serde::de::Deserialize<'de> for GetClusterRequest {
11143    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
11144    where
11145        D: serde::Deserializer<'de>,
11146    {
11147        #[allow(non_camel_case_types)]
11148        #[doc(hidden)]
11149        #[derive(PartialEq, Eq, Hash)]
11150        enum __FieldTag {
11151            __name,
11152            Unknown(std::string::String),
11153        }
11154        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
11155            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
11156            where
11157                D: serde::Deserializer<'de>,
11158            {
11159                struct Visitor;
11160                impl<'de> serde::de::Visitor<'de> for Visitor {
11161                    type Value = __FieldTag;
11162                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
11163                        formatter.write_str("a field name for GetClusterRequest")
11164                    }
11165                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
11166                    where
11167                        E: serde::de::Error,
11168                    {
11169                        use std::result::Result::Ok;
11170                        use std::string::ToString;
11171                        match value {
11172                            "name" => Ok(__FieldTag::__name),
11173                            _ => Ok(__FieldTag::Unknown(value.to_string())),
11174                        }
11175                    }
11176                }
11177                deserializer.deserialize_identifier(Visitor)
11178            }
11179        }
11180        struct Visitor;
11181        impl<'de> serde::de::Visitor<'de> for Visitor {
11182            type Value = GetClusterRequest;
11183            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
11184                formatter.write_str("struct GetClusterRequest")
11185            }
11186            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
11187            where
11188                A: serde::de::MapAccess<'de>,
11189            {
11190                #[allow(unused_imports)]
11191                use serde::de::Error;
11192                use std::option::Option::Some;
11193                let mut fields = std::collections::HashSet::new();
11194                let mut result = Self::Value::new();
11195                while let Some(tag) = map.next_key::<__FieldTag>()? {
11196                    #[allow(clippy::match_single_binding)]
11197                    match tag {
11198                        __FieldTag::__name => {
11199                            if !fields.insert(__FieldTag::__name) {
11200                                return std::result::Result::Err(A::Error::duplicate_field(
11201                                    "multiple values for name",
11202                                ));
11203                            }
11204                            result.name = map
11205                                .next_value::<std::option::Option<std::string::String>>()?
11206                                .unwrap_or_default();
11207                        }
11208                        __FieldTag::Unknown(key) => {
11209                            let value = map.next_value::<serde_json::Value>()?;
11210                            result._unknown_fields.insert(key, value);
11211                        }
11212                    }
11213                }
11214                std::result::Result::Ok(result)
11215            }
11216        }
11217        deserializer.deserialize_any(Visitor)
11218    }
11219}
11220
11221#[doc(hidden)]
11222impl serde::ser::Serialize for GetClusterRequest {
11223    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
11224    where
11225        S: serde::ser::Serializer,
11226    {
11227        use serde::ser::SerializeMap;
11228        #[allow(unused_imports)]
11229        use std::option::Option::Some;
11230        let mut state = serializer.serialize_map(std::option::Option::None)?;
11231        if !self.name.is_empty() {
11232            state.serialize_entry("name", &self.name)?;
11233        }
11234        if !self._unknown_fields.is_empty() {
11235            for (key, value) in self._unknown_fields.iter() {
11236                state.serialize_entry(key, &value)?;
11237            }
11238        }
11239        state.end()
11240    }
11241}
11242
11243impl std::fmt::Debug for GetClusterRequest {
11244    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11245        let mut debug_struct = f.debug_struct("GetClusterRequest");
11246        debug_struct.field("name", &self.name);
11247        if !self._unknown_fields.is_empty() {
11248            debug_struct.field("_unknown_fields", &self._unknown_fields);
11249        }
11250        debug_struct.finish()
11251    }
11252}
11253
11254/// Creates a cluster.
11255#[derive(Clone, Default, PartialEq)]
11256#[non_exhaustive]
11257pub struct CreateClusterRequest {
11258    /// Required. The parent location where this cluster will be created.
11259    pub parent: std::string::String,
11260
11261    /// Required. A client-specified unique identifier for the cluster.
11262    pub cluster_id: std::string::String,
11263
11264    /// Required. The cluster to create.
11265    pub cluster: std::option::Option<crate::model::Cluster>,
11266
11267    /// A unique identifier for this request. Restricted to 36 ASCII characters. A
11268    /// random UUID is recommended. This request is only idempotent if
11269    /// `request_id` is provided.
11270    pub request_id: std::string::String,
11271
11272    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
11273}
11274
11275impl CreateClusterRequest {
11276    pub fn new() -> Self {
11277        std::default::Default::default()
11278    }
11279
11280    /// Sets the value of [parent][crate::model::CreateClusterRequest::parent].
11281    pub fn set_parent<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
11282        self.parent = v.into();
11283        self
11284    }
11285
11286    /// Sets the value of [cluster_id][crate::model::CreateClusterRequest::cluster_id].
11287    pub fn set_cluster_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
11288        self.cluster_id = v.into();
11289        self
11290    }
11291
11292    /// Sets the value of [cluster][crate::model::CreateClusterRequest::cluster].
11293    pub fn set_cluster<T>(mut self, v: T) -> Self
11294    where
11295        T: std::convert::Into<crate::model::Cluster>,
11296    {
11297        self.cluster = std::option::Option::Some(v.into());
11298        self
11299    }
11300
11301    /// Sets or clears the value of [cluster][crate::model::CreateClusterRequest::cluster].
11302    pub fn set_or_clear_cluster<T>(mut self, v: std::option::Option<T>) -> Self
11303    where
11304        T: std::convert::Into<crate::model::Cluster>,
11305    {
11306        self.cluster = v.map(|x| x.into());
11307        self
11308    }
11309
11310    /// Sets the value of [request_id][crate::model::CreateClusterRequest::request_id].
11311    pub fn set_request_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
11312        self.request_id = v.into();
11313        self
11314    }
11315}
11316
11317impl wkt::message::Message for CreateClusterRequest {
11318    fn typename() -> &'static str {
11319        "type.googleapis.com/google.cloud.edgecontainer.v1.CreateClusterRequest"
11320    }
11321}
11322
11323#[doc(hidden)]
11324impl<'de> serde::de::Deserialize<'de> for CreateClusterRequest {
11325    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
11326    where
11327        D: serde::Deserializer<'de>,
11328    {
11329        #[allow(non_camel_case_types)]
11330        #[doc(hidden)]
11331        #[derive(PartialEq, Eq, Hash)]
11332        enum __FieldTag {
11333            __parent,
11334            __cluster_id,
11335            __cluster,
11336            __request_id,
11337            Unknown(std::string::String),
11338        }
11339        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
11340            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
11341            where
11342                D: serde::Deserializer<'de>,
11343            {
11344                struct Visitor;
11345                impl<'de> serde::de::Visitor<'de> for Visitor {
11346                    type Value = __FieldTag;
11347                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
11348                        formatter.write_str("a field name for CreateClusterRequest")
11349                    }
11350                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
11351                    where
11352                        E: serde::de::Error,
11353                    {
11354                        use std::result::Result::Ok;
11355                        use std::string::ToString;
11356                        match value {
11357                            "parent" => Ok(__FieldTag::__parent),
11358                            "clusterId" => Ok(__FieldTag::__cluster_id),
11359                            "cluster_id" => Ok(__FieldTag::__cluster_id),
11360                            "cluster" => Ok(__FieldTag::__cluster),
11361                            "requestId" => Ok(__FieldTag::__request_id),
11362                            "request_id" => Ok(__FieldTag::__request_id),
11363                            _ => Ok(__FieldTag::Unknown(value.to_string())),
11364                        }
11365                    }
11366                }
11367                deserializer.deserialize_identifier(Visitor)
11368            }
11369        }
11370        struct Visitor;
11371        impl<'de> serde::de::Visitor<'de> for Visitor {
11372            type Value = CreateClusterRequest;
11373            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
11374                formatter.write_str("struct CreateClusterRequest")
11375            }
11376            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
11377            where
11378                A: serde::de::MapAccess<'de>,
11379            {
11380                #[allow(unused_imports)]
11381                use serde::de::Error;
11382                use std::option::Option::Some;
11383                let mut fields = std::collections::HashSet::new();
11384                let mut result = Self::Value::new();
11385                while let Some(tag) = map.next_key::<__FieldTag>()? {
11386                    #[allow(clippy::match_single_binding)]
11387                    match tag {
11388                        __FieldTag::__parent => {
11389                            if !fields.insert(__FieldTag::__parent) {
11390                                return std::result::Result::Err(A::Error::duplicate_field(
11391                                    "multiple values for parent",
11392                                ));
11393                            }
11394                            result.parent = map
11395                                .next_value::<std::option::Option<std::string::String>>()?
11396                                .unwrap_or_default();
11397                        }
11398                        __FieldTag::__cluster_id => {
11399                            if !fields.insert(__FieldTag::__cluster_id) {
11400                                return std::result::Result::Err(A::Error::duplicate_field(
11401                                    "multiple values for cluster_id",
11402                                ));
11403                            }
11404                            result.cluster_id = map
11405                                .next_value::<std::option::Option<std::string::String>>()?
11406                                .unwrap_or_default();
11407                        }
11408                        __FieldTag::__cluster => {
11409                            if !fields.insert(__FieldTag::__cluster) {
11410                                return std::result::Result::Err(A::Error::duplicate_field(
11411                                    "multiple values for cluster",
11412                                ));
11413                            }
11414                            result.cluster =
11415                                map.next_value::<std::option::Option<crate::model::Cluster>>()?;
11416                        }
11417                        __FieldTag::__request_id => {
11418                            if !fields.insert(__FieldTag::__request_id) {
11419                                return std::result::Result::Err(A::Error::duplicate_field(
11420                                    "multiple values for request_id",
11421                                ));
11422                            }
11423                            result.request_id = map
11424                                .next_value::<std::option::Option<std::string::String>>()?
11425                                .unwrap_or_default();
11426                        }
11427                        __FieldTag::Unknown(key) => {
11428                            let value = map.next_value::<serde_json::Value>()?;
11429                            result._unknown_fields.insert(key, value);
11430                        }
11431                    }
11432                }
11433                std::result::Result::Ok(result)
11434            }
11435        }
11436        deserializer.deserialize_any(Visitor)
11437    }
11438}
11439
11440#[doc(hidden)]
11441impl serde::ser::Serialize for CreateClusterRequest {
11442    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
11443    where
11444        S: serde::ser::Serializer,
11445    {
11446        use serde::ser::SerializeMap;
11447        #[allow(unused_imports)]
11448        use std::option::Option::Some;
11449        let mut state = serializer.serialize_map(std::option::Option::None)?;
11450        if !self.parent.is_empty() {
11451            state.serialize_entry("parent", &self.parent)?;
11452        }
11453        if !self.cluster_id.is_empty() {
11454            state.serialize_entry("clusterId", &self.cluster_id)?;
11455        }
11456        if self.cluster.is_some() {
11457            state.serialize_entry("cluster", &self.cluster)?;
11458        }
11459        if !self.request_id.is_empty() {
11460            state.serialize_entry("requestId", &self.request_id)?;
11461        }
11462        if !self._unknown_fields.is_empty() {
11463            for (key, value) in self._unknown_fields.iter() {
11464                state.serialize_entry(key, &value)?;
11465            }
11466        }
11467        state.end()
11468    }
11469}
11470
11471impl std::fmt::Debug for CreateClusterRequest {
11472    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11473        let mut debug_struct = f.debug_struct("CreateClusterRequest");
11474        debug_struct.field("parent", &self.parent);
11475        debug_struct.field("cluster_id", &self.cluster_id);
11476        debug_struct.field("cluster", &self.cluster);
11477        debug_struct.field("request_id", &self.request_id);
11478        if !self._unknown_fields.is_empty() {
11479            debug_struct.field("_unknown_fields", &self._unknown_fields);
11480        }
11481        debug_struct.finish()
11482    }
11483}
11484
11485/// Updates a cluster.
11486#[derive(Clone, Default, PartialEq)]
11487#[non_exhaustive]
11488pub struct UpdateClusterRequest {
11489    /// Field mask is used to specify the fields to be overwritten in the
11490    /// Cluster resource by the update.
11491    /// The fields specified in the update_mask are relative to the resource, not
11492    /// the full request. A field will be overwritten if it is in the mask. If the
11493    /// user does not provide a mask then all fields will be overwritten.
11494    pub update_mask: std::option::Option<wkt::FieldMask>,
11495
11496    /// The updated cluster.
11497    pub cluster: std::option::Option<crate::model::Cluster>,
11498
11499    /// A unique identifier for this request. Restricted to 36 ASCII characters.
11500    /// A random UUID is recommended.
11501    /// This request is only idempotent if `request_id` is provided.
11502    pub request_id: std::string::String,
11503
11504    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
11505}
11506
11507impl UpdateClusterRequest {
11508    pub fn new() -> Self {
11509        std::default::Default::default()
11510    }
11511
11512    /// Sets the value of [update_mask][crate::model::UpdateClusterRequest::update_mask].
11513    pub fn set_update_mask<T>(mut self, v: T) -> Self
11514    where
11515        T: std::convert::Into<wkt::FieldMask>,
11516    {
11517        self.update_mask = std::option::Option::Some(v.into());
11518        self
11519    }
11520
11521    /// Sets or clears the value of [update_mask][crate::model::UpdateClusterRequest::update_mask].
11522    pub fn set_or_clear_update_mask<T>(mut self, v: std::option::Option<T>) -> Self
11523    where
11524        T: std::convert::Into<wkt::FieldMask>,
11525    {
11526        self.update_mask = v.map(|x| x.into());
11527        self
11528    }
11529
11530    /// Sets the value of [cluster][crate::model::UpdateClusterRequest::cluster].
11531    pub fn set_cluster<T>(mut self, v: T) -> Self
11532    where
11533        T: std::convert::Into<crate::model::Cluster>,
11534    {
11535        self.cluster = std::option::Option::Some(v.into());
11536        self
11537    }
11538
11539    /// Sets or clears the value of [cluster][crate::model::UpdateClusterRequest::cluster].
11540    pub fn set_or_clear_cluster<T>(mut self, v: std::option::Option<T>) -> Self
11541    where
11542        T: std::convert::Into<crate::model::Cluster>,
11543    {
11544        self.cluster = v.map(|x| x.into());
11545        self
11546    }
11547
11548    /// Sets the value of [request_id][crate::model::UpdateClusterRequest::request_id].
11549    pub fn set_request_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
11550        self.request_id = v.into();
11551        self
11552    }
11553}
11554
11555impl wkt::message::Message for UpdateClusterRequest {
11556    fn typename() -> &'static str {
11557        "type.googleapis.com/google.cloud.edgecontainer.v1.UpdateClusterRequest"
11558    }
11559}
11560
11561#[doc(hidden)]
11562impl<'de> serde::de::Deserialize<'de> for UpdateClusterRequest {
11563    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
11564    where
11565        D: serde::Deserializer<'de>,
11566    {
11567        #[allow(non_camel_case_types)]
11568        #[doc(hidden)]
11569        #[derive(PartialEq, Eq, Hash)]
11570        enum __FieldTag {
11571            __update_mask,
11572            __cluster,
11573            __request_id,
11574            Unknown(std::string::String),
11575        }
11576        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
11577            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
11578            where
11579                D: serde::Deserializer<'de>,
11580            {
11581                struct Visitor;
11582                impl<'de> serde::de::Visitor<'de> for Visitor {
11583                    type Value = __FieldTag;
11584                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
11585                        formatter.write_str("a field name for UpdateClusterRequest")
11586                    }
11587                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
11588                    where
11589                        E: serde::de::Error,
11590                    {
11591                        use std::result::Result::Ok;
11592                        use std::string::ToString;
11593                        match value {
11594                            "updateMask" => Ok(__FieldTag::__update_mask),
11595                            "update_mask" => Ok(__FieldTag::__update_mask),
11596                            "cluster" => Ok(__FieldTag::__cluster),
11597                            "requestId" => Ok(__FieldTag::__request_id),
11598                            "request_id" => Ok(__FieldTag::__request_id),
11599                            _ => Ok(__FieldTag::Unknown(value.to_string())),
11600                        }
11601                    }
11602                }
11603                deserializer.deserialize_identifier(Visitor)
11604            }
11605        }
11606        struct Visitor;
11607        impl<'de> serde::de::Visitor<'de> for Visitor {
11608            type Value = UpdateClusterRequest;
11609            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
11610                formatter.write_str("struct UpdateClusterRequest")
11611            }
11612            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
11613            where
11614                A: serde::de::MapAccess<'de>,
11615            {
11616                #[allow(unused_imports)]
11617                use serde::de::Error;
11618                use std::option::Option::Some;
11619                let mut fields = std::collections::HashSet::new();
11620                let mut result = Self::Value::new();
11621                while let Some(tag) = map.next_key::<__FieldTag>()? {
11622                    #[allow(clippy::match_single_binding)]
11623                    match tag {
11624                        __FieldTag::__update_mask => {
11625                            if !fields.insert(__FieldTag::__update_mask) {
11626                                return std::result::Result::Err(A::Error::duplicate_field(
11627                                    "multiple values for update_mask",
11628                                ));
11629                            }
11630                            result.update_mask =
11631                                map.next_value::<std::option::Option<wkt::FieldMask>>()?;
11632                        }
11633                        __FieldTag::__cluster => {
11634                            if !fields.insert(__FieldTag::__cluster) {
11635                                return std::result::Result::Err(A::Error::duplicate_field(
11636                                    "multiple values for cluster",
11637                                ));
11638                            }
11639                            result.cluster =
11640                                map.next_value::<std::option::Option<crate::model::Cluster>>()?;
11641                        }
11642                        __FieldTag::__request_id => {
11643                            if !fields.insert(__FieldTag::__request_id) {
11644                                return std::result::Result::Err(A::Error::duplicate_field(
11645                                    "multiple values for request_id",
11646                                ));
11647                            }
11648                            result.request_id = map
11649                                .next_value::<std::option::Option<std::string::String>>()?
11650                                .unwrap_or_default();
11651                        }
11652                        __FieldTag::Unknown(key) => {
11653                            let value = map.next_value::<serde_json::Value>()?;
11654                            result._unknown_fields.insert(key, value);
11655                        }
11656                    }
11657                }
11658                std::result::Result::Ok(result)
11659            }
11660        }
11661        deserializer.deserialize_any(Visitor)
11662    }
11663}
11664
11665#[doc(hidden)]
11666impl serde::ser::Serialize for UpdateClusterRequest {
11667    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
11668    where
11669        S: serde::ser::Serializer,
11670    {
11671        use serde::ser::SerializeMap;
11672        #[allow(unused_imports)]
11673        use std::option::Option::Some;
11674        let mut state = serializer.serialize_map(std::option::Option::None)?;
11675        if self.update_mask.is_some() {
11676            state.serialize_entry("updateMask", &self.update_mask)?;
11677        }
11678        if self.cluster.is_some() {
11679            state.serialize_entry("cluster", &self.cluster)?;
11680        }
11681        if !self.request_id.is_empty() {
11682            state.serialize_entry("requestId", &self.request_id)?;
11683        }
11684        if !self._unknown_fields.is_empty() {
11685            for (key, value) in self._unknown_fields.iter() {
11686                state.serialize_entry(key, &value)?;
11687            }
11688        }
11689        state.end()
11690    }
11691}
11692
11693impl std::fmt::Debug for UpdateClusterRequest {
11694    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11695        let mut debug_struct = f.debug_struct("UpdateClusterRequest");
11696        debug_struct.field("update_mask", &self.update_mask);
11697        debug_struct.field("cluster", &self.cluster);
11698        debug_struct.field("request_id", &self.request_id);
11699        if !self._unknown_fields.is_empty() {
11700            debug_struct.field("_unknown_fields", &self._unknown_fields);
11701        }
11702        debug_struct.finish()
11703    }
11704}
11705
11706/// Upgrades a cluster.
11707#[derive(Clone, Default, PartialEq)]
11708#[non_exhaustive]
11709pub struct UpgradeClusterRequest {
11710    /// Required. The resource name of the cluster.
11711    pub name: std::string::String,
11712
11713    /// Required. The version the cluster is going to be upgraded to.
11714    pub target_version: std::string::String,
11715
11716    /// The schedule for the upgrade.
11717    pub schedule: crate::model::upgrade_cluster_request::Schedule,
11718
11719    /// A unique identifier for this request. Restricted to 36 ASCII characters. A
11720    /// random UUID is recommended. This request is only idempotent if
11721    /// `request_id` is provided.
11722    pub request_id: std::string::String,
11723
11724    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
11725}
11726
11727impl UpgradeClusterRequest {
11728    pub fn new() -> Self {
11729        std::default::Default::default()
11730    }
11731
11732    /// Sets the value of [name][crate::model::UpgradeClusterRequest::name].
11733    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
11734        self.name = v.into();
11735        self
11736    }
11737
11738    /// Sets the value of [target_version][crate::model::UpgradeClusterRequest::target_version].
11739    pub fn set_target_version<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
11740        self.target_version = v.into();
11741        self
11742    }
11743
11744    /// Sets the value of [schedule][crate::model::UpgradeClusterRequest::schedule].
11745    pub fn set_schedule<T: std::convert::Into<crate::model::upgrade_cluster_request::Schedule>>(
11746        mut self,
11747        v: T,
11748    ) -> Self {
11749        self.schedule = v.into();
11750        self
11751    }
11752
11753    /// Sets the value of [request_id][crate::model::UpgradeClusterRequest::request_id].
11754    pub fn set_request_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
11755        self.request_id = v.into();
11756        self
11757    }
11758}
11759
11760impl wkt::message::Message for UpgradeClusterRequest {
11761    fn typename() -> &'static str {
11762        "type.googleapis.com/google.cloud.edgecontainer.v1.UpgradeClusterRequest"
11763    }
11764}
11765
11766#[doc(hidden)]
11767impl<'de> serde::de::Deserialize<'de> for UpgradeClusterRequest {
11768    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
11769    where
11770        D: serde::Deserializer<'de>,
11771    {
11772        #[allow(non_camel_case_types)]
11773        #[doc(hidden)]
11774        #[derive(PartialEq, Eq, Hash)]
11775        enum __FieldTag {
11776            __name,
11777            __target_version,
11778            __schedule,
11779            __request_id,
11780            Unknown(std::string::String),
11781        }
11782        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
11783            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
11784            where
11785                D: serde::Deserializer<'de>,
11786            {
11787                struct Visitor;
11788                impl<'de> serde::de::Visitor<'de> for Visitor {
11789                    type Value = __FieldTag;
11790                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
11791                        formatter.write_str("a field name for UpgradeClusterRequest")
11792                    }
11793                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
11794                    where
11795                        E: serde::de::Error,
11796                    {
11797                        use std::result::Result::Ok;
11798                        use std::string::ToString;
11799                        match value {
11800                            "name" => Ok(__FieldTag::__name),
11801                            "targetVersion" => Ok(__FieldTag::__target_version),
11802                            "target_version" => Ok(__FieldTag::__target_version),
11803                            "schedule" => Ok(__FieldTag::__schedule),
11804                            "requestId" => Ok(__FieldTag::__request_id),
11805                            "request_id" => Ok(__FieldTag::__request_id),
11806                            _ => Ok(__FieldTag::Unknown(value.to_string())),
11807                        }
11808                    }
11809                }
11810                deserializer.deserialize_identifier(Visitor)
11811            }
11812        }
11813        struct Visitor;
11814        impl<'de> serde::de::Visitor<'de> for Visitor {
11815            type Value = UpgradeClusterRequest;
11816            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
11817                formatter.write_str("struct UpgradeClusterRequest")
11818            }
11819            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
11820            where
11821                A: serde::de::MapAccess<'de>,
11822            {
11823                #[allow(unused_imports)]
11824                use serde::de::Error;
11825                use std::option::Option::Some;
11826                let mut fields = std::collections::HashSet::new();
11827                let mut result = Self::Value::new();
11828                while let Some(tag) = map.next_key::<__FieldTag>()? {
11829                    #[allow(clippy::match_single_binding)]
11830                    match tag {
11831                        __FieldTag::__name => {
11832                            if !fields.insert(__FieldTag::__name) {
11833                                return std::result::Result::Err(A::Error::duplicate_field(
11834                                    "multiple values for name",
11835                                ));
11836                            }
11837                            result.name = map
11838                                .next_value::<std::option::Option<std::string::String>>()?
11839                                .unwrap_or_default();
11840                        }
11841                        __FieldTag::__target_version => {
11842                            if !fields.insert(__FieldTag::__target_version) {
11843                                return std::result::Result::Err(A::Error::duplicate_field(
11844                                    "multiple values for target_version",
11845                                ));
11846                            }
11847                            result.target_version = map
11848                                .next_value::<std::option::Option<std::string::String>>()?
11849                                .unwrap_or_default();
11850                        }
11851                        __FieldTag::__schedule => {
11852                            if !fields.insert(__FieldTag::__schedule) {
11853                                return std::result::Result::Err(A::Error::duplicate_field(
11854                                    "multiple values for schedule",
11855                                ));
11856                            }
11857                            result.schedule = map
11858                                .next_value::<std::option::Option<
11859                                    crate::model::upgrade_cluster_request::Schedule,
11860                                >>()?
11861                                .unwrap_or_default();
11862                        }
11863                        __FieldTag::__request_id => {
11864                            if !fields.insert(__FieldTag::__request_id) {
11865                                return std::result::Result::Err(A::Error::duplicate_field(
11866                                    "multiple values for request_id",
11867                                ));
11868                            }
11869                            result.request_id = map
11870                                .next_value::<std::option::Option<std::string::String>>()?
11871                                .unwrap_or_default();
11872                        }
11873                        __FieldTag::Unknown(key) => {
11874                            let value = map.next_value::<serde_json::Value>()?;
11875                            result._unknown_fields.insert(key, value);
11876                        }
11877                    }
11878                }
11879                std::result::Result::Ok(result)
11880            }
11881        }
11882        deserializer.deserialize_any(Visitor)
11883    }
11884}
11885
11886#[doc(hidden)]
11887impl serde::ser::Serialize for UpgradeClusterRequest {
11888    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
11889    where
11890        S: serde::ser::Serializer,
11891    {
11892        use serde::ser::SerializeMap;
11893        #[allow(unused_imports)]
11894        use std::option::Option::Some;
11895        let mut state = serializer.serialize_map(std::option::Option::None)?;
11896        if !self.name.is_empty() {
11897            state.serialize_entry("name", &self.name)?;
11898        }
11899        if !self.target_version.is_empty() {
11900            state.serialize_entry("targetVersion", &self.target_version)?;
11901        }
11902        if !wkt::internal::is_default(&self.schedule) {
11903            state.serialize_entry("schedule", &self.schedule)?;
11904        }
11905        if !self.request_id.is_empty() {
11906            state.serialize_entry("requestId", &self.request_id)?;
11907        }
11908        if !self._unknown_fields.is_empty() {
11909            for (key, value) in self._unknown_fields.iter() {
11910                state.serialize_entry(key, &value)?;
11911            }
11912        }
11913        state.end()
11914    }
11915}
11916
11917impl std::fmt::Debug for UpgradeClusterRequest {
11918    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11919        let mut debug_struct = f.debug_struct("UpgradeClusterRequest");
11920        debug_struct.field("name", &self.name);
11921        debug_struct.field("target_version", &self.target_version);
11922        debug_struct.field("schedule", &self.schedule);
11923        debug_struct.field("request_id", &self.request_id);
11924        if !self._unknown_fields.is_empty() {
11925            debug_struct.field("_unknown_fields", &self._unknown_fields);
11926        }
11927        debug_struct.finish()
11928    }
11929}
11930
11931/// Defines additional types related to [UpgradeClusterRequest].
11932pub mod upgrade_cluster_request {
11933    #[allow(unused_imports)]
11934    use super::*;
11935
11936    /// Represents the schedule about when the cluster is going to be upgraded.
11937    ///
11938    /// # Working with unknown values
11939    ///
11940    /// This enum is defined as `#[non_exhaustive]` because Google Cloud may add
11941    /// additional enum variants at any time. Adding new variants is not considered
11942    /// a breaking change. Applications should write their code in anticipation of:
11943    ///
11944    /// - New values appearing in future releases of the client library, **and**
11945    /// - New values received dynamically, without application changes.
11946    ///
11947    /// Please consult the [Working with enums] section in the user guide for some
11948    /// guidelines.
11949    ///
11950    /// [Working with enums]: https://google-cloud-rust.github.io/working_with_enums.html
11951    #[derive(Clone, Debug, PartialEq)]
11952    #[non_exhaustive]
11953    pub enum Schedule {
11954        /// Unspecified. The default is to upgrade the cluster immediately which is
11955        /// the only option today.
11956        Unspecified,
11957        /// The cluster is going to be upgraded immediately after receiving the
11958        /// request.
11959        Immediately,
11960        /// If set, the enum was initialized with an unknown value.
11961        ///
11962        /// Applications can examine the value using [Schedule::value] or
11963        /// [Schedule::name].
11964        UnknownValue(schedule::UnknownValue),
11965    }
11966
11967    #[doc(hidden)]
11968    pub mod schedule {
11969        #[allow(unused_imports)]
11970        use super::*;
11971        #[derive(Clone, Debug, PartialEq)]
11972        pub struct UnknownValue(pub(crate) wkt::internal::UnknownEnumValue);
11973    }
11974
11975    impl Schedule {
11976        /// Gets the enum value.
11977        ///
11978        /// Returns `None` if the enum contains an unknown value deserialized from
11979        /// the string representation of enums.
11980        pub fn value(&self) -> std::option::Option<i32> {
11981            match self {
11982                Self::Unspecified => std::option::Option::Some(0),
11983                Self::Immediately => std::option::Option::Some(1),
11984                Self::UnknownValue(u) => u.0.value(),
11985            }
11986        }
11987
11988        /// Gets the enum value as a string.
11989        ///
11990        /// Returns `None` if the enum contains an unknown value deserialized from
11991        /// the integer representation of enums.
11992        pub fn name(&self) -> std::option::Option<&str> {
11993            match self {
11994                Self::Unspecified => std::option::Option::Some("SCHEDULE_UNSPECIFIED"),
11995                Self::Immediately => std::option::Option::Some("IMMEDIATELY"),
11996                Self::UnknownValue(u) => u.0.name(),
11997            }
11998        }
11999    }
12000
12001    impl std::default::Default for Schedule {
12002        fn default() -> Self {
12003            use std::convert::From;
12004            Self::from(0)
12005        }
12006    }
12007
12008    impl std::fmt::Display for Schedule {
12009        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
12010            wkt::internal::display_enum(f, self.name(), self.value())
12011        }
12012    }
12013
12014    impl std::convert::From<i32> for Schedule {
12015        fn from(value: i32) -> Self {
12016            match value {
12017                0 => Self::Unspecified,
12018                1 => Self::Immediately,
12019                _ => Self::UnknownValue(schedule::UnknownValue(
12020                    wkt::internal::UnknownEnumValue::Integer(value),
12021                )),
12022            }
12023        }
12024    }
12025
12026    impl std::convert::From<&str> for Schedule {
12027        fn from(value: &str) -> Self {
12028            use std::string::ToString;
12029            match value {
12030                "SCHEDULE_UNSPECIFIED" => Self::Unspecified,
12031                "IMMEDIATELY" => Self::Immediately,
12032                _ => Self::UnknownValue(schedule::UnknownValue(
12033                    wkt::internal::UnknownEnumValue::String(value.to_string()),
12034                )),
12035            }
12036        }
12037    }
12038
12039    impl serde::ser::Serialize for Schedule {
12040        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
12041        where
12042            S: serde::Serializer,
12043        {
12044            match self {
12045                Self::Unspecified => serializer.serialize_i32(0),
12046                Self::Immediately => serializer.serialize_i32(1),
12047                Self::UnknownValue(u) => u.0.serialize(serializer),
12048            }
12049        }
12050    }
12051
12052    impl<'de> serde::de::Deserialize<'de> for Schedule {
12053        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
12054        where
12055            D: serde::Deserializer<'de>,
12056        {
12057            deserializer.deserialize_any(wkt::internal::EnumVisitor::<Schedule>::new(
12058                ".google.cloud.edgecontainer.v1.UpgradeClusterRequest.Schedule",
12059            ))
12060        }
12061    }
12062}
12063
12064/// Deletes a cluster.
12065#[derive(Clone, Default, PartialEq)]
12066#[non_exhaustive]
12067pub struct DeleteClusterRequest {
12068    /// Required. The resource name of the cluster.
12069    pub name: std::string::String,
12070
12071    /// A unique identifier for this request. Restricted to 36 ASCII characters. A
12072    /// random UUID is recommended. This request is only idempotent if
12073    /// `request_id` is provided.
12074    pub request_id: std::string::String,
12075
12076    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
12077}
12078
12079impl DeleteClusterRequest {
12080    pub fn new() -> Self {
12081        std::default::Default::default()
12082    }
12083
12084    /// Sets the value of [name][crate::model::DeleteClusterRequest::name].
12085    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
12086        self.name = v.into();
12087        self
12088    }
12089
12090    /// Sets the value of [request_id][crate::model::DeleteClusterRequest::request_id].
12091    pub fn set_request_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
12092        self.request_id = v.into();
12093        self
12094    }
12095}
12096
12097impl wkt::message::Message for DeleteClusterRequest {
12098    fn typename() -> &'static str {
12099        "type.googleapis.com/google.cloud.edgecontainer.v1.DeleteClusterRequest"
12100    }
12101}
12102
12103#[doc(hidden)]
12104impl<'de> serde::de::Deserialize<'de> for DeleteClusterRequest {
12105    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
12106    where
12107        D: serde::Deserializer<'de>,
12108    {
12109        #[allow(non_camel_case_types)]
12110        #[doc(hidden)]
12111        #[derive(PartialEq, Eq, Hash)]
12112        enum __FieldTag {
12113            __name,
12114            __request_id,
12115            Unknown(std::string::String),
12116        }
12117        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
12118            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
12119            where
12120                D: serde::Deserializer<'de>,
12121            {
12122                struct Visitor;
12123                impl<'de> serde::de::Visitor<'de> for Visitor {
12124                    type Value = __FieldTag;
12125                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
12126                        formatter.write_str("a field name for DeleteClusterRequest")
12127                    }
12128                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
12129                    where
12130                        E: serde::de::Error,
12131                    {
12132                        use std::result::Result::Ok;
12133                        use std::string::ToString;
12134                        match value {
12135                            "name" => Ok(__FieldTag::__name),
12136                            "requestId" => Ok(__FieldTag::__request_id),
12137                            "request_id" => Ok(__FieldTag::__request_id),
12138                            _ => Ok(__FieldTag::Unknown(value.to_string())),
12139                        }
12140                    }
12141                }
12142                deserializer.deserialize_identifier(Visitor)
12143            }
12144        }
12145        struct Visitor;
12146        impl<'de> serde::de::Visitor<'de> for Visitor {
12147            type Value = DeleteClusterRequest;
12148            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
12149                formatter.write_str("struct DeleteClusterRequest")
12150            }
12151            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
12152            where
12153                A: serde::de::MapAccess<'de>,
12154            {
12155                #[allow(unused_imports)]
12156                use serde::de::Error;
12157                use std::option::Option::Some;
12158                let mut fields = std::collections::HashSet::new();
12159                let mut result = Self::Value::new();
12160                while let Some(tag) = map.next_key::<__FieldTag>()? {
12161                    #[allow(clippy::match_single_binding)]
12162                    match tag {
12163                        __FieldTag::__name => {
12164                            if !fields.insert(__FieldTag::__name) {
12165                                return std::result::Result::Err(A::Error::duplicate_field(
12166                                    "multiple values for name",
12167                                ));
12168                            }
12169                            result.name = map
12170                                .next_value::<std::option::Option<std::string::String>>()?
12171                                .unwrap_or_default();
12172                        }
12173                        __FieldTag::__request_id => {
12174                            if !fields.insert(__FieldTag::__request_id) {
12175                                return std::result::Result::Err(A::Error::duplicate_field(
12176                                    "multiple values for request_id",
12177                                ));
12178                            }
12179                            result.request_id = map
12180                                .next_value::<std::option::Option<std::string::String>>()?
12181                                .unwrap_or_default();
12182                        }
12183                        __FieldTag::Unknown(key) => {
12184                            let value = map.next_value::<serde_json::Value>()?;
12185                            result._unknown_fields.insert(key, value);
12186                        }
12187                    }
12188                }
12189                std::result::Result::Ok(result)
12190            }
12191        }
12192        deserializer.deserialize_any(Visitor)
12193    }
12194}
12195
12196#[doc(hidden)]
12197impl serde::ser::Serialize for DeleteClusterRequest {
12198    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
12199    where
12200        S: serde::ser::Serializer,
12201    {
12202        use serde::ser::SerializeMap;
12203        #[allow(unused_imports)]
12204        use std::option::Option::Some;
12205        let mut state = serializer.serialize_map(std::option::Option::None)?;
12206        if !self.name.is_empty() {
12207            state.serialize_entry("name", &self.name)?;
12208        }
12209        if !self.request_id.is_empty() {
12210            state.serialize_entry("requestId", &self.request_id)?;
12211        }
12212        if !self._unknown_fields.is_empty() {
12213            for (key, value) in self._unknown_fields.iter() {
12214                state.serialize_entry(key, &value)?;
12215            }
12216        }
12217        state.end()
12218    }
12219}
12220
12221impl std::fmt::Debug for DeleteClusterRequest {
12222    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12223        let mut debug_struct = f.debug_struct("DeleteClusterRequest");
12224        debug_struct.field("name", &self.name);
12225        debug_struct.field("request_id", &self.request_id);
12226        if !self._unknown_fields.is_empty() {
12227            debug_struct.field("_unknown_fields", &self._unknown_fields);
12228        }
12229        debug_struct.finish()
12230    }
12231}
12232
12233/// Generates an access token for a cluster.
12234#[derive(Clone, Default, PartialEq)]
12235#[non_exhaustive]
12236pub struct GenerateAccessTokenRequest {
12237    /// Required. The resource name of the cluster.
12238    pub cluster: std::string::String,
12239
12240    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
12241}
12242
12243impl GenerateAccessTokenRequest {
12244    pub fn new() -> Self {
12245        std::default::Default::default()
12246    }
12247
12248    /// Sets the value of [cluster][crate::model::GenerateAccessTokenRequest::cluster].
12249    pub fn set_cluster<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
12250        self.cluster = v.into();
12251        self
12252    }
12253}
12254
12255impl wkt::message::Message for GenerateAccessTokenRequest {
12256    fn typename() -> &'static str {
12257        "type.googleapis.com/google.cloud.edgecontainer.v1.GenerateAccessTokenRequest"
12258    }
12259}
12260
12261#[doc(hidden)]
12262impl<'de> serde::de::Deserialize<'de> for GenerateAccessTokenRequest {
12263    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
12264    where
12265        D: serde::Deserializer<'de>,
12266    {
12267        #[allow(non_camel_case_types)]
12268        #[doc(hidden)]
12269        #[derive(PartialEq, Eq, Hash)]
12270        enum __FieldTag {
12271            __cluster,
12272            Unknown(std::string::String),
12273        }
12274        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
12275            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
12276            where
12277                D: serde::Deserializer<'de>,
12278            {
12279                struct Visitor;
12280                impl<'de> serde::de::Visitor<'de> for Visitor {
12281                    type Value = __FieldTag;
12282                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
12283                        formatter.write_str("a field name for GenerateAccessTokenRequest")
12284                    }
12285                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
12286                    where
12287                        E: serde::de::Error,
12288                    {
12289                        use std::result::Result::Ok;
12290                        use std::string::ToString;
12291                        match value {
12292                            "cluster" => Ok(__FieldTag::__cluster),
12293                            _ => Ok(__FieldTag::Unknown(value.to_string())),
12294                        }
12295                    }
12296                }
12297                deserializer.deserialize_identifier(Visitor)
12298            }
12299        }
12300        struct Visitor;
12301        impl<'de> serde::de::Visitor<'de> for Visitor {
12302            type Value = GenerateAccessTokenRequest;
12303            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
12304                formatter.write_str("struct GenerateAccessTokenRequest")
12305            }
12306            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
12307            where
12308                A: serde::de::MapAccess<'de>,
12309            {
12310                #[allow(unused_imports)]
12311                use serde::de::Error;
12312                use std::option::Option::Some;
12313                let mut fields = std::collections::HashSet::new();
12314                let mut result = Self::Value::new();
12315                while let Some(tag) = map.next_key::<__FieldTag>()? {
12316                    #[allow(clippy::match_single_binding)]
12317                    match tag {
12318                        __FieldTag::__cluster => {
12319                            if !fields.insert(__FieldTag::__cluster) {
12320                                return std::result::Result::Err(A::Error::duplicate_field(
12321                                    "multiple values for cluster",
12322                                ));
12323                            }
12324                            result.cluster = map
12325                                .next_value::<std::option::Option<std::string::String>>()?
12326                                .unwrap_or_default();
12327                        }
12328                        __FieldTag::Unknown(key) => {
12329                            let value = map.next_value::<serde_json::Value>()?;
12330                            result._unknown_fields.insert(key, value);
12331                        }
12332                    }
12333                }
12334                std::result::Result::Ok(result)
12335            }
12336        }
12337        deserializer.deserialize_any(Visitor)
12338    }
12339}
12340
12341#[doc(hidden)]
12342impl serde::ser::Serialize for GenerateAccessTokenRequest {
12343    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
12344    where
12345        S: serde::ser::Serializer,
12346    {
12347        use serde::ser::SerializeMap;
12348        #[allow(unused_imports)]
12349        use std::option::Option::Some;
12350        let mut state = serializer.serialize_map(std::option::Option::None)?;
12351        if !self.cluster.is_empty() {
12352            state.serialize_entry("cluster", &self.cluster)?;
12353        }
12354        if !self._unknown_fields.is_empty() {
12355            for (key, value) in self._unknown_fields.iter() {
12356                state.serialize_entry(key, &value)?;
12357            }
12358        }
12359        state.end()
12360    }
12361}
12362
12363impl std::fmt::Debug for GenerateAccessTokenRequest {
12364    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12365        let mut debug_struct = f.debug_struct("GenerateAccessTokenRequest");
12366        debug_struct.field("cluster", &self.cluster);
12367        if !self._unknown_fields.is_empty() {
12368            debug_struct.field("_unknown_fields", &self._unknown_fields);
12369        }
12370        debug_struct.finish()
12371    }
12372}
12373
12374/// An access token for a cluster.
12375#[derive(Clone, Default, PartialEq)]
12376#[non_exhaustive]
12377pub struct GenerateAccessTokenResponse {
12378    /// Output only. Access token to authenticate to k8s api-server.
12379    pub access_token: std::string::String,
12380
12381    /// Output only. Timestamp at which the token will expire.
12382    pub expire_time: std::option::Option<wkt::Timestamp>,
12383
12384    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
12385}
12386
12387impl GenerateAccessTokenResponse {
12388    pub fn new() -> Self {
12389        std::default::Default::default()
12390    }
12391
12392    /// Sets the value of [access_token][crate::model::GenerateAccessTokenResponse::access_token].
12393    pub fn set_access_token<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
12394        self.access_token = v.into();
12395        self
12396    }
12397
12398    /// Sets the value of [expire_time][crate::model::GenerateAccessTokenResponse::expire_time].
12399    pub fn set_expire_time<T>(mut self, v: T) -> Self
12400    where
12401        T: std::convert::Into<wkt::Timestamp>,
12402    {
12403        self.expire_time = std::option::Option::Some(v.into());
12404        self
12405    }
12406
12407    /// Sets or clears the value of [expire_time][crate::model::GenerateAccessTokenResponse::expire_time].
12408    pub fn set_or_clear_expire_time<T>(mut self, v: std::option::Option<T>) -> Self
12409    where
12410        T: std::convert::Into<wkt::Timestamp>,
12411    {
12412        self.expire_time = v.map(|x| x.into());
12413        self
12414    }
12415}
12416
12417impl wkt::message::Message for GenerateAccessTokenResponse {
12418    fn typename() -> &'static str {
12419        "type.googleapis.com/google.cloud.edgecontainer.v1.GenerateAccessTokenResponse"
12420    }
12421}
12422
12423#[doc(hidden)]
12424impl<'de> serde::de::Deserialize<'de> for GenerateAccessTokenResponse {
12425    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
12426    where
12427        D: serde::Deserializer<'de>,
12428    {
12429        #[allow(non_camel_case_types)]
12430        #[doc(hidden)]
12431        #[derive(PartialEq, Eq, Hash)]
12432        enum __FieldTag {
12433            __access_token,
12434            __expire_time,
12435            Unknown(std::string::String),
12436        }
12437        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
12438            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
12439            where
12440                D: serde::Deserializer<'de>,
12441            {
12442                struct Visitor;
12443                impl<'de> serde::de::Visitor<'de> for Visitor {
12444                    type Value = __FieldTag;
12445                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
12446                        formatter.write_str("a field name for GenerateAccessTokenResponse")
12447                    }
12448                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
12449                    where
12450                        E: serde::de::Error,
12451                    {
12452                        use std::result::Result::Ok;
12453                        use std::string::ToString;
12454                        match value {
12455                            "accessToken" => Ok(__FieldTag::__access_token),
12456                            "access_token" => Ok(__FieldTag::__access_token),
12457                            "expireTime" => Ok(__FieldTag::__expire_time),
12458                            "expire_time" => Ok(__FieldTag::__expire_time),
12459                            _ => Ok(__FieldTag::Unknown(value.to_string())),
12460                        }
12461                    }
12462                }
12463                deserializer.deserialize_identifier(Visitor)
12464            }
12465        }
12466        struct Visitor;
12467        impl<'de> serde::de::Visitor<'de> for Visitor {
12468            type Value = GenerateAccessTokenResponse;
12469            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
12470                formatter.write_str("struct GenerateAccessTokenResponse")
12471            }
12472            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
12473            where
12474                A: serde::de::MapAccess<'de>,
12475            {
12476                #[allow(unused_imports)]
12477                use serde::de::Error;
12478                use std::option::Option::Some;
12479                let mut fields = std::collections::HashSet::new();
12480                let mut result = Self::Value::new();
12481                while let Some(tag) = map.next_key::<__FieldTag>()? {
12482                    #[allow(clippy::match_single_binding)]
12483                    match tag {
12484                        __FieldTag::__access_token => {
12485                            if !fields.insert(__FieldTag::__access_token) {
12486                                return std::result::Result::Err(A::Error::duplicate_field(
12487                                    "multiple values for access_token",
12488                                ));
12489                            }
12490                            result.access_token = map
12491                                .next_value::<std::option::Option<std::string::String>>()?
12492                                .unwrap_or_default();
12493                        }
12494                        __FieldTag::__expire_time => {
12495                            if !fields.insert(__FieldTag::__expire_time) {
12496                                return std::result::Result::Err(A::Error::duplicate_field(
12497                                    "multiple values for expire_time",
12498                                ));
12499                            }
12500                            result.expire_time =
12501                                map.next_value::<std::option::Option<wkt::Timestamp>>()?;
12502                        }
12503                        __FieldTag::Unknown(key) => {
12504                            let value = map.next_value::<serde_json::Value>()?;
12505                            result._unknown_fields.insert(key, value);
12506                        }
12507                    }
12508                }
12509                std::result::Result::Ok(result)
12510            }
12511        }
12512        deserializer.deserialize_any(Visitor)
12513    }
12514}
12515
12516#[doc(hidden)]
12517impl serde::ser::Serialize for GenerateAccessTokenResponse {
12518    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
12519    where
12520        S: serde::ser::Serializer,
12521    {
12522        use serde::ser::SerializeMap;
12523        #[allow(unused_imports)]
12524        use std::option::Option::Some;
12525        let mut state = serializer.serialize_map(std::option::Option::None)?;
12526        if !self.access_token.is_empty() {
12527            state.serialize_entry("accessToken", &self.access_token)?;
12528        }
12529        if self.expire_time.is_some() {
12530            state.serialize_entry("expireTime", &self.expire_time)?;
12531        }
12532        if !self._unknown_fields.is_empty() {
12533            for (key, value) in self._unknown_fields.iter() {
12534                state.serialize_entry(key, &value)?;
12535            }
12536        }
12537        state.end()
12538    }
12539}
12540
12541impl std::fmt::Debug for GenerateAccessTokenResponse {
12542    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12543        let mut debug_struct = f.debug_struct("GenerateAccessTokenResponse");
12544        debug_struct.field("access_token", &self.access_token);
12545        debug_struct.field("expire_time", &self.expire_time);
12546        if !self._unknown_fields.is_empty() {
12547            debug_struct.field("_unknown_fields", &self._unknown_fields);
12548        }
12549        debug_struct.finish()
12550    }
12551}
12552
12553/// Generates an offline credential(offline) for a cluster.
12554#[derive(Clone, Default, PartialEq)]
12555#[non_exhaustive]
12556pub struct GenerateOfflineCredentialRequest {
12557    /// Required. The resource name of the cluster.
12558    pub cluster: std::string::String,
12559
12560    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
12561}
12562
12563impl GenerateOfflineCredentialRequest {
12564    pub fn new() -> Self {
12565        std::default::Default::default()
12566    }
12567
12568    /// Sets the value of [cluster][crate::model::GenerateOfflineCredentialRequest::cluster].
12569    pub fn set_cluster<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
12570        self.cluster = v.into();
12571        self
12572    }
12573}
12574
12575impl wkt::message::Message for GenerateOfflineCredentialRequest {
12576    fn typename() -> &'static str {
12577        "type.googleapis.com/google.cloud.edgecontainer.v1.GenerateOfflineCredentialRequest"
12578    }
12579}
12580
12581#[doc(hidden)]
12582impl<'de> serde::de::Deserialize<'de> for GenerateOfflineCredentialRequest {
12583    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
12584    where
12585        D: serde::Deserializer<'de>,
12586    {
12587        #[allow(non_camel_case_types)]
12588        #[doc(hidden)]
12589        #[derive(PartialEq, Eq, Hash)]
12590        enum __FieldTag {
12591            __cluster,
12592            Unknown(std::string::String),
12593        }
12594        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
12595            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
12596            where
12597                D: serde::Deserializer<'de>,
12598            {
12599                struct Visitor;
12600                impl<'de> serde::de::Visitor<'de> for Visitor {
12601                    type Value = __FieldTag;
12602                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
12603                        formatter.write_str("a field name for GenerateOfflineCredentialRequest")
12604                    }
12605                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
12606                    where
12607                        E: serde::de::Error,
12608                    {
12609                        use std::result::Result::Ok;
12610                        use std::string::ToString;
12611                        match value {
12612                            "cluster" => Ok(__FieldTag::__cluster),
12613                            _ => Ok(__FieldTag::Unknown(value.to_string())),
12614                        }
12615                    }
12616                }
12617                deserializer.deserialize_identifier(Visitor)
12618            }
12619        }
12620        struct Visitor;
12621        impl<'de> serde::de::Visitor<'de> for Visitor {
12622            type Value = GenerateOfflineCredentialRequest;
12623            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
12624                formatter.write_str("struct GenerateOfflineCredentialRequest")
12625            }
12626            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
12627            where
12628                A: serde::de::MapAccess<'de>,
12629            {
12630                #[allow(unused_imports)]
12631                use serde::de::Error;
12632                use std::option::Option::Some;
12633                let mut fields = std::collections::HashSet::new();
12634                let mut result = Self::Value::new();
12635                while let Some(tag) = map.next_key::<__FieldTag>()? {
12636                    #[allow(clippy::match_single_binding)]
12637                    match tag {
12638                        __FieldTag::__cluster => {
12639                            if !fields.insert(__FieldTag::__cluster) {
12640                                return std::result::Result::Err(A::Error::duplicate_field(
12641                                    "multiple values for cluster",
12642                                ));
12643                            }
12644                            result.cluster = map
12645                                .next_value::<std::option::Option<std::string::String>>()?
12646                                .unwrap_or_default();
12647                        }
12648                        __FieldTag::Unknown(key) => {
12649                            let value = map.next_value::<serde_json::Value>()?;
12650                            result._unknown_fields.insert(key, value);
12651                        }
12652                    }
12653                }
12654                std::result::Result::Ok(result)
12655            }
12656        }
12657        deserializer.deserialize_any(Visitor)
12658    }
12659}
12660
12661#[doc(hidden)]
12662impl serde::ser::Serialize for GenerateOfflineCredentialRequest {
12663    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
12664    where
12665        S: serde::ser::Serializer,
12666    {
12667        use serde::ser::SerializeMap;
12668        #[allow(unused_imports)]
12669        use std::option::Option::Some;
12670        let mut state = serializer.serialize_map(std::option::Option::None)?;
12671        if !self.cluster.is_empty() {
12672            state.serialize_entry("cluster", &self.cluster)?;
12673        }
12674        if !self._unknown_fields.is_empty() {
12675            for (key, value) in self._unknown_fields.iter() {
12676                state.serialize_entry(key, &value)?;
12677            }
12678        }
12679        state.end()
12680    }
12681}
12682
12683impl std::fmt::Debug for GenerateOfflineCredentialRequest {
12684    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12685        let mut debug_struct = f.debug_struct("GenerateOfflineCredentialRequest");
12686        debug_struct.field("cluster", &self.cluster);
12687        if !self._unknown_fields.is_empty() {
12688            debug_struct.field("_unknown_fields", &self._unknown_fields);
12689        }
12690        debug_struct.finish()
12691    }
12692}
12693
12694/// An offline credential for a cluster.
12695#[derive(Clone, Default, PartialEq)]
12696#[non_exhaustive]
12697pub struct GenerateOfflineCredentialResponse {
12698    /// Output only. Client certificate to authenticate to k8s api-server.
12699    pub client_certificate: std::string::String,
12700
12701    /// Output only. Client private key to authenticate to k8s api-server.
12702    pub client_key: std::string::String,
12703
12704    /// Output only. Client's identity.
12705    pub user_id: std::string::String,
12706
12707    /// Output only. Timestamp at which this credential will expire.
12708    pub expire_time: std::option::Option<wkt::Timestamp>,
12709
12710    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
12711}
12712
12713impl GenerateOfflineCredentialResponse {
12714    pub fn new() -> Self {
12715        std::default::Default::default()
12716    }
12717
12718    /// Sets the value of [client_certificate][crate::model::GenerateOfflineCredentialResponse::client_certificate].
12719    pub fn set_client_certificate<T: std::convert::Into<std::string::String>>(
12720        mut self,
12721        v: T,
12722    ) -> Self {
12723        self.client_certificate = v.into();
12724        self
12725    }
12726
12727    /// Sets the value of [client_key][crate::model::GenerateOfflineCredentialResponse::client_key].
12728    pub fn set_client_key<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
12729        self.client_key = v.into();
12730        self
12731    }
12732
12733    /// Sets the value of [user_id][crate::model::GenerateOfflineCredentialResponse::user_id].
12734    pub fn set_user_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
12735        self.user_id = v.into();
12736        self
12737    }
12738
12739    /// Sets the value of [expire_time][crate::model::GenerateOfflineCredentialResponse::expire_time].
12740    pub fn set_expire_time<T>(mut self, v: T) -> Self
12741    where
12742        T: std::convert::Into<wkt::Timestamp>,
12743    {
12744        self.expire_time = std::option::Option::Some(v.into());
12745        self
12746    }
12747
12748    /// Sets or clears the value of [expire_time][crate::model::GenerateOfflineCredentialResponse::expire_time].
12749    pub fn set_or_clear_expire_time<T>(mut self, v: std::option::Option<T>) -> Self
12750    where
12751        T: std::convert::Into<wkt::Timestamp>,
12752    {
12753        self.expire_time = v.map(|x| x.into());
12754        self
12755    }
12756}
12757
12758impl wkt::message::Message for GenerateOfflineCredentialResponse {
12759    fn typename() -> &'static str {
12760        "type.googleapis.com/google.cloud.edgecontainer.v1.GenerateOfflineCredentialResponse"
12761    }
12762}
12763
12764#[doc(hidden)]
12765impl<'de> serde::de::Deserialize<'de> for GenerateOfflineCredentialResponse {
12766    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
12767    where
12768        D: serde::Deserializer<'de>,
12769    {
12770        #[allow(non_camel_case_types)]
12771        #[doc(hidden)]
12772        #[derive(PartialEq, Eq, Hash)]
12773        enum __FieldTag {
12774            __client_certificate,
12775            __client_key,
12776            __user_id,
12777            __expire_time,
12778            Unknown(std::string::String),
12779        }
12780        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
12781            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
12782            where
12783                D: serde::Deserializer<'de>,
12784            {
12785                struct Visitor;
12786                impl<'de> serde::de::Visitor<'de> for Visitor {
12787                    type Value = __FieldTag;
12788                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
12789                        formatter.write_str("a field name for GenerateOfflineCredentialResponse")
12790                    }
12791                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
12792                    where
12793                        E: serde::de::Error,
12794                    {
12795                        use std::result::Result::Ok;
12796                        use std::string::ToString;
12797                        match value {
12798                            "clientCertificate" => Ok(__FieldTag::__client_certificate),
12799                            "client_certificate" => Ok(__FieldTag::__client_certificate),
12800                            "clientKey" => Ok(__FieldTag::__client_key),
12801                            "client_key" => Ok(__FieldTag::__client_key),
12802                            "userId" => Ok(__FieldTag::__user_id),
12803                            "user_id" => Ok(__FieldTag::__user_id),
12804                            "expireTime" => Ok(__FieldTag::__expire_time),
12805                            "expire_time" => Ok(__FieldTag::__expire_time),
12806                            _ => Ok(__FieldTag::Unknown(value.to_string())),
12807                        }
12808                    }
12809                }
12810                deserializer.deserialize_identifier(Visitor)
12811            }
12812        }
12813        struct Visitor;
12814        impl<'de> serde::de::Visitor<'de> for Visitor {
12815            type Value = GenerateOfflineCredentialResponse;
12816            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
12817                formatter.write_str("struct GenerateOfflineCredentialResponse")
12818            }
12819            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
12820            where
12821                A: serde::de::MapAccess<'de>,
12822            {
12823                #[allow(unused_imports)]
12824                use serde::de::Error;
12825                use std::option::Option::Some;
12826                let mut fields = std::collections::HashSet::new();
12827                let mut result = Self::Value::new();
12828                while let Some(tag) = map.next_key::<__FieldTag>()? {
12829                    #[allow(clippy::match_single_binding)]
12830                    match tag {
12831                        __FieldTag::__client_certificate => {
12832                            if !fields.insert(__FieldTag::__client_certificate) {
12833                                return std::result::Result::Err(A::Error::duplicate_field(
12834                                    "multiple values for client_certificate",
12835                                ));
12836                            }
12837                            result.client_certificate = map
12838                                .next_value::<std::option::Option<std::string::String>>()?
12839                                .unwrap_or_default();
12840                        }
12841                        __FieldTag::__client_key => {
12842                            if !fields.insert(__FieldTag::__client_key) {
12843                                return std::result::Result::Err(A::Error::duplicate_field(
12844                                    "multiple values for client_key",
12845                                ));
12846                            }
12847                            result.client_key = map
12848                                .next_value::<std::option::Option<std::string::String>>()?
12849                                .unwrap_or_default();
12850                        }
12851                        __FieldTag::__user_id => {
12852                            if !fields.insert(__FieldTag::__user_id) {
12853                                return std::result::Result::Err(A::Error::duplicate_field(
12854                                    "multiple values for user_id",
12855                                ));
12856                            }
12857                            result.user_id = map
12858                                .next_value::<std::option::Option<std::string::String>>()?
12859                                .unwrap_or_default();
12860                        }
12861                        __FieldTag::__expire_time => {
12862                            if !fields.insert(__FieldTag::__expire_time) {
12863                                return std::result::Result::Err(A::Error::duplicate_field(
12864                                    "multiple values for expire_time",
12865                                ));
12866                            }
12867                            result.expire_time =
12868                                map.next_value::<std::option::Option<wkt::Timestamp>>()?;
12869                        }
12870                        __FieldTag::Unknown(key) => {
12871                            let value = map.next_value::<serde_json::Value>()?;
12872                            result._unknown_fields.insert(key, value);
12873                        }
12874                    }
12875                }
12876                std::result::Result::Ok(result)
12877            }
12878        }
12879        deserializer.deserialize_any(Visitor)
12880    }
12881}
12882
12883#[doc(hidden)]
12884impl serde::ser::Serialize for GenerateOfflineCredentialResponse {
12885    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
12886    where
12887        S: serde::ser::Serializer,
12888    {
12889        use serde::ser::SerializeMap;
12890        #[allow(unused_imports)]
12891        use std::option::Option::Some;
12892        let mut state = serializer.serialize_map(std::option::Option::None)?;
12893        if !self.client_certificate.is_empty() {
12894            state.serialize_entry("clientCertificate", &self.client_certificate)?;
12895        }
12896        if !self.client_key.is_empty() {
12897            state.serialize_entry("clientKey", &self.client_key)?;
12898        }
12899        if !self.user_id.is_empty() {
12900            state.serialize_entry("userId", &self.user_id)?;
12901        }
12902        if self.expire_time.is_some() {
12903            state.serialize_entry("expireTime", &self.expire_time)?;
12904        }
12905        if !self._unknown_fields.is_empty() {
12906            for (key, value) in self._unknown_fields.iter() {
12907                state.serialize_entry(key, &value)?;
12908            }
12909        }
12910        state.end()
12911    }
12912}
12913
12914impl std::fmt::Debug for GenerateOfflineCredentialResponse {
12915    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12916        let mut debug_struct = f.debug_struct("GenerateOfflineCredentialResponse");
12917        debug_struct.field("client_certificate", &self.client_certificate);
12918        debug_struct.field("client_key", &self.client_key);
12919        debug_struct.field("user_id", &self.user_id);
12920        debug_struct.field("expire_time", &self.expire_time);
12921        if !self._unknown_fields.is_empty() {
12922            debug_struct.field("_unknown_fields", &self._unknown_fields);
12923        }
12924        debug_struct.finish()
12925    }
12926}
12927
12928/// Lists node pools in a cluster.
12929#[derive(Clone, Default, PartialEq)]
12930#[non_exhaustive]
12931pub struct ListNodePoolsRequest {
12932    /// Required. The parent cluster, which owns this collection of node pools.
12933    pub parent: std::string::String,
12934
12935    /// The maximum number of resources to list.
12936    pub page_size: i32,
12937
12938    /// A page token received from previous list request.
12939    pub page_token: std::string::String,
12940
12941    /// Only resources matching this filter will be listed.
12942    pub filter: std::string::String,
12943
12944    /// Specifies the order in which resources will be listed.
12945    pub order_by: std::string::String,
12946
12947    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
12948}
12949
12950impl ListNodePoolsRequest {
12951    pub fn new() -> Self {
12952        std::default::Default::default()
12953    }
12954
12955    /// Sets the value of [parent][crate::model::ListNodePoolsRequest::parent].
12956    pub fn set_parent<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
12957        self.parent = v.into();
12958        self
12959    }
12960
12961    /// Sets the value of [page_size][crate::model::ListNodePoolsRequest::page_size].
12962    pub fn set_page_size<T: std::convert::Into<i32>>(mut self, v: T) -> Self {
12963        self.page_size = v.into();
12964        self
12965    }
12966
12967    /// Sets the value of [page_token][crate::model::ListNodePoolsRequest::page_token].
12968    pub fn set_page_token<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
12969        self.page_token = v.into();
12970        self
12971    }
12972
12973    /// Sets the value of [filter][crate::model::ListNodePoolsRequest::filter].
12974    pub fn set_filter<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
12975        self.filter = v.into();
12976        self
12977    }
12978
12979    /// Sets the value of [order_by][crate::model::ListNodePoolsRequest::order_by].
12980    pub fn set_order_by<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
12981        self.order_by = v.into();
12982        self
12983    }
12984}
12985
12986impl wkt::message::Message for ListNodePoolsRequest {
12987    fn typename() -> &'static str {
12988        "type.googleapis.com/google.cloud.edgecontainer.v1.ListNodePoolsRequest"
12989    }
12990}
12991
12992#[doc(hidden)]
12993impl<'de> serde::de::Deserialize<'de> for ListNodePoolsRequest {
12994    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
12995    where
12996        D: serde::Deserializer<'de>,
12997    {
12998        #[allow(non_camel_case_types)]
12999        #[doc(hidden)]
13000        #[derive(PartialEq, Eq, Hash)]
13001        enum __FieldTag {
13002            __parent,
13003            __page_size,
13004            __page_token,
13005            __filter,
13006            __order_by,
13007            Unknown(std::string::String),
13008        }
13009        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
13010            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
13011            where
13012                D: serde::Deserializer<'de>,
13013            {
13014                struct Visitor;
13015                impl<'de> serde::de::Visitor<'de> for Visitor {
13016                    type Value = __FieldTag;
13017                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
13018                        formatter.write_str("a field name for ListNodePoolsRequest")
13019                    }
13020                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
13021                    where
13022                        E: serde::de::Error,
13023                    {
13024                        use std::result::Result::Ok;
13025                        use std::string::ToString;
13026                        match value {
13027                            "parent" => Ok(__FieldTag::__parent),
13028                            "pageSize" => Ok(__FieldTag::__page_size),
13029                            "page_size" => Ok(__FieldTag::__page_size),
13030                            "pageToken" => Ok(__FieldTag::__page_token),
13031                            "page_token" => Ok(__FieldTag::__page_token),
13032                            "filter" => Ok(__FieldTag::__filter),
13033                            "orderBy" => Ok(__FieldTag::__order_by),
13034                            "order_by" => Ok(__FieldTag::__order_by),
13035                            _ => Ok(__FieldTag::Unknown(value.to_string())),
13036                        }
13037                    }
13038                }
13039                deserializer.deserialize_identifier(Visitor)
13040            }
13041        }
13042        struct Visitor;
13043        impl<'de> serde::de::Visitor<'de> for Visitor {
13044            type Value = ListNodePoolsRequest;
13045            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
13046                formatter.write_str("struct ListNodePoolsRequest")
13047            }
13048            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
13049            where
13050                A: serde::de::MapAccess<'de>,
13051            {
13052                #[allow(unused_imports)]
13053                use serde::de::Error;
13054                use std::option::Option::Some;
13055                let mut fields = std::collections::HashSet::new();
13056                let mut result = Self::Value::new();
13057                while let Some(tag) = map.next_key::<__FieldTag>()? {
13058                    #[allow(clippy::match_single_binding)]
13059                    match tag {
13060                        __FieldTag::__parent => {
13061                            if !fields.insert(__FieldTag::__parent) {
13062                                return std::result::Result::Err(A::Error::duplicate_field(
13063                                    "multiple values for parent",
13064                                ));
13065                            }
13066                            result.parent = map
13067                                .next_value::<std::option::Option<std::string::String>>()?
13068                                .unwrap_or_default();
13069                        }
13070                        __FieldTag::__page_size => {
13071                            if !fields.insert(__FieldTag::__page_size) {
13072                                return std::result::Result::Err(A::Error::duplicate_field(
13073                                    "multiple values for page_size",
13074                                ));
13075                            }
13076                            struct __With(std::option::Option<i32>);
13077                            impl<'de> serde::de::Deserialize<'de> for __With {
13078                                fn deserialize<D>(
13079                                    deserializer: D,
13080                                ) -> std::result::Result<Self, D::Error>
13081                                where
13082                                    D: serde::de::Deserializer<'de>,
13083                                {
13084                                    serde_with::As::< std::option::Option<wkt::internal::I32> >::deserialize(deserializer).map(__With)
13085                                }
13086                            }
13087                            result.page_size = map.next_value::<__With>()?.0.unwrap_or_default();
13088                        }
13089                        __FieldTag::__page_token => {
13090                            if !fields.insert(__FieldTag::__page_token) {
13091                                return std::result::Result::Err(A::Error::duplicate_field(
13092                                    "multiple values for page_token",
13093                                ));
13094                            }
13095                            result.page_token = map
13096                                .next_value::<std::option::Option<std::string::String>>()?
13097                                .unwrap_or_default();
13098                        }
13099                        __FieldTag::__filter => {
13100                            if !fields.insert(__FieldTag::__filter) {
13101                                return std::result::Result::Err(A::Error::duplicate_field(
13102                                    "multiple values for filter",
13103                                ));
13104                            }
13105                            result.filter = map
13106                                .next_value::<std::option::Option<std::string::String>>()?
13107                                .unwrap_or_default();
13108                        }
13109                        __FieldTag::__order_by => {
13110                            if !fields.insert(__FieldTag::__order_by) {
13111                                return std::result::Result::Err(A::Error::duplicate_field(
13112                                    "multiple values for order_by",
13113                                ));
13114                            }
13115                            result.order_by = map
13116                                .next_value::<std::option::Option<std::string::String>>()?
13117                                .unwrap_or_default();
13118                        }
13119                        __FieldTag::Unknown(key) => {
13120                            let value = map.next_value::<serde_json::Value>()?;
13121                            result._unknown_fields.insert(key, value);
13122                        }
13123                    }
13124                }
13125                std::result::Result::Ok(result)
13126            }
13127        }
13128        deserializer.deserialize_any(Visitor)
13129    }
13130}
13131
13132#[doc(hidden)]
13133impl serde::ser::Serialize for ListNodePoolsRequest {
13134    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
13135    where
13136        S: serde::ser::Serializer,
13137    {
13138        use serde::ser::SerializeMap;
13139        #[allow(unused_imports)]
13140        use std::option::Option::Some;
13141        let mut state = serializer.serialize_map(std::option::Option::None)?;
13142        if !self.parent.is_empty() {
13143            state.serialize_entry("parent", &self.parent)?;
13144        }
13145        if !wkt::internal::is_default(&self.page_size) {
13146            struct __With<'a>(&'a i32);
13147            impl<'a> serde::ser::Serialize for __With<'a> {
13148                fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
13149                where
13150                    S: serde::ser::Serializer,
13151                {
13152                    serde_with::As::<wkt::internal::I32>::serialize(self.0, serializer)
13153                }
13154            }
13155            state.serialize_entry("pageSize", &__With(&self.page_size))?;
13156        }
13157        if !self.page_token.is_empty() {
13158            state.serialize_entry("pageToken", &self.page_token)?;
13159        }
13160        if !self.filter.is_empty() {
13161            state.serialize_entry("filter", &self.filter)?;
13162        }
13163        if !self.order_by.is_empty() {
13164            state.serialize_entry("orderBy", &self.order_by)?;
13165        }
13166        if !self._unknown_fields.is_empty() {
13167            for (key, value) in self._unknown_fields.iter() {
13168                state.serialize_entry(key, &value)?;
13169            }
13170        }
13171        state.end()
13172    }
13173}
13174
13175impl std::fmt::Debug for ListNodePoolsRequest {
13176    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13177        let mut debug_struct = f.debug_struct("ListNodePoolsRequest");
13178        debug_struct.field("parent", &self.parent);
13179        debug_struct.field("page_size", &self.page_size);
13180        debug_struct.field("page_token", &self.page_token);
13181        debug_struct.field("filter", &self.filter);
13182        debug_struct.field("order_by", &self.order_by);
13183        if !self._unknown_fields.is_empty() {
13184            debug_struct.field("_unknown_fields", &self._unknown_fields);
13185        }
13186        debug_struct.finish()
13187    }
13188}
13189
13190/// List of node pools in a cluster.
13191#[derive(Clone, Default, PartialEq)]
13192#[non_exhaustive]
13193pub struct ListNodePoolsResponse {
13194    /// Node pools in the cluster.
13195    pub node_pools: std::vec::Vec<crate::model::NodePool>,
13196
13197    /// A token to retrieve next page of results.
13198    pub next_page_token: std::string::String,
13199
13200    /// Locations that could not be reached.
13201    pub unreachable: std::vec::Vec<std::string::String>,
13202
13203    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
13204}
13205
13206impl ListNodePoolsResponse {
13207    pub fn new() -> Self {
13208        std::default::Default::default()
13209    }
13210
13211    /// Sets the value of [node_pools][crate::model::ListNodePoolsResponse::node_pools].
13212    pub fn set_node_pools<T, V>(mut self, v: T) -> Self
13213    where
13214        T: std::iter::IntoIterator<Item = V>,
13215        V: std::convert::Into<crate::model::NodePool>,
13216    {
13217        use std::iter::Iterator;
13218        self.node_pools = v.into_iter().map(|i| i.into()).collect();
13219        self
13220    }
13221
13222    /// Sets the value of [next_page_token][crate::model::ListNodePoolsResponse::next_page_token].
13223    pub fn set_next_page_token<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
13224        self.next_page_token = v.into();
13225        self
13226    }
13227
13228    /// Sets the value of [unreachable][crate::model::ListNodePoolsResponse::unreachable].
13229    pub fn set_unreachable<T, V>(mut self, v: T) -> Self
13230    where
13231        T: std::iter::IntoIterator<Item = V>,
13232        V: std::convert::Into<std::string::String>,
13233    {
13234        use std::iter::Iterator;
13235        self.unreachable = v.into_iter().map(|i| i.into()).collect();
13236        self
13237    }
13238}
13239
13240impl wkt::message::Message for ListNodePoolsResponse {
13241    fn typename() -> &'static str {
13242        "type.googleapis.com/google.cloud.edgecontainer.v1.ListNodePoolsResponse"
13243    }
13244}
13245
13246#[doc(hidden)]
13247impl gax::paginator::internal::PageableResponse for ListNodePoolsResponse {
13248    type PageItem = crate::model::NodePool;
13249
13250    fn items(self) -> std::vec::Vec<Self::PageItem> {
13251        self.node_pools
13252    }
13253
13254    fn next_page_token(&self) -> std::string::String {
13255        use std::clone::Clone;
13256        self.next_page_token.clone()
13257    }
13258}
13259
13260#[doc(hidden)]
13261impl<'de> serde::de::Deserialize<'de> for ListNodePoolsResponse {
13262    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
13263    where
13264        D: serde::Deserializer<'de>,
13265    {
13266        #[allow(non_camel_case_types)]
13267        #[doc(hidden)]
13268        #[derive(PartialEq, Eq, Hash)]
13269        enum __FieldTag {
13270            __node_pools,
13271            __next_page_token,
13272            __unreachable,
13273            Unknown(std::string::String),
13274        }
13275        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
13276            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
13277            where
13278                D: serde::Deserializer<'de>,
13279            {
13280                struct Visitor;
13281                impl<'de> serde::de::Visitor<'de> for Visitor {
13282                    type Value = __FieldTag;
13283                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
13284                        formatter.write_str("a field name for ListNodePoolsResponse")
13285                    }
13286                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
13287                    where
13288                        E: serde::de::Error,
13289                    {
13290                        use std::result::Result::Ok;
13291                        use std::string::ToString;
13292                        match value {
13293                            "nodePools" => Ok(__FieldTag::__node_pools),
13294                            "node_pools" => Ok(__FieldTag::__node_pools),
13295                            "nextPageToken" => Ok(__FieldTag::__next_page_token),
13296                            "next_page_token" => Ok(__FieldTag::__next_page_token),
13297                            "unreachable" => Ok(__FieldTag::__unreachable),
13298                            _ => Ok(__FieldTag::Unknown(value.to_string())),
13299                        }
13300                    }
13301                }
13302                deserializer.deserialize_identifier(Visitor)
13303            }
13304        }
13305        struct Visitor;
13306        impl<'de> serde::de::Visitor<'de> for Visitor {
13307            type Value = ListNodePoolsResponse;
13308            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
13309                formatter.write_str("struct ListNodePoolsResponse")
13310            }
13311            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
13312            where
13313                A: serde::de::MapAccess<'de>,
13314            {
13315                #[allow(unused_imports)]
13316                use serde::de::Error;
13317                use std::option::Option::Some;
13318                let mut fields = std::collections::HashSet::new();
13319                let mut result = Self::Value::new();
13320                while let Some(tag) = map.next_key::<__FieldTag>()? {
13321                    #[allow(clippy::match_single_binding)]
13322                    match tag {
13323                        __FieldTag::__node_pools => {
13324                            if !fields.insert(__FieldTag::__node_pools) {
13325                                return std::result::Result::Err(A::Error::duplicate_field(
13326                                    "multiple values for node_pools",
13327                                ));
13328                            }
13329                            result.node_pools = map.next_value::<std::option::Option<std::vec::Vec<crate::model::NodePool>>>()?.unwrap_or_default();
13330                        }
13331                        __FieldTag::__next_page_token => {
13332                            if !fields.insert(__FieldTag::__next_page_token) {
13333                                return std::result::Result::Err(A::Error::duplicate_field(
13334                                    "multiple values for next_page_token",
13335                                ));
13336                            }
13337                            result.next_page_token = map
13338                                .next_value::<std::option::Option<std::string::String>>()?
13339                                .unwrap_or_default();
13340                        }
13341                        __FieldTag::__unreachable => {
13342                            if !fields.insert(__FieldTag::__unreachable) {
13343                                return std::result::Result::Err(A::Error::duplicate_field(
13344                                    "multiple values for unreachable",
13345                                ));
13346                            }
13347                            result.unreachable = map.next_value::<std::option::Option<std::vec::Vec<std::string::String>>>()?.unwrap_or_default();
13348                        }
13349                        __FieldTag::Unknown(key) => {
13350                            let value = map.next_value::<serde_json::Value>()?;
13351                            result._unknown_fields.insert(key, value);
13352                        }
13353                    }
13354                }
13355                std::result::Result::Ok(result)
13356            }
13357        }
13358        deserializer.deserialize_any(Visitor)
13359    }
13360}
13361
13362#[doc(hidden)]
13363impl serde::ser::Serialize for ListNodePoolsResponse {
13364    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
13365    where
13366        S: serde::ser::Serializer,
13367    {
13368        use serde::ser::SerializeMap;
13369        #[allow(unused_imports)]
13370        use std::option::Option::Some;
13371        let mut state = serializer.serialize_map(std::option::Option::None)?;
13372        if !self.node_pools.is_empty() {
13373            state.serialize_entry("nodePools", &self.node_pools)?;
13374        }
13375        if !self.next_page_token.is_empty() {
13376            state.serialize_entry("nextPageToken", &self.next_page_token)?;
13377        }
13378        if !self.unreachable.is_empty() {
13379            state.serialize_entry("unreachable", &self.unreachable)?;
13380        }
13381        if !self._unknown_fields.is_empty() {
13382            for (key, value) in self._unknown_fields.iter() {
13383                state.serialize_entry(key, &value)?;
13384            }
13385        }
13386        state.end()
13387    }
13388}
13389
13390impl std::fmt::Debug for ListNodePoolsResponse {
13391    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13392        let mut debug_struct = f.debug_struct("ListNodePoolsResponse");
13393        debug_struct.field("node_pools", &self.node_pools);
13394        debug_struct.field("next_page_token", &self.next_page_token);
13395        debug_struct.field("unreachable", &self.unreachable);
13396        if !self._unknown_fields.is_empty() {
13397            debug_struct.field("_unknown_fields", &self._unknown_fields);
13398        }
13399        debug_struct.finish()
13400    }
13401}
13402
13403/// Gets a node pool.
13404#[derive(Clone, Default, PartialEq)]
13405#[non_exhaustive]
13406pub struct GetNodePoolRequest {
13407    /// Required. The resource name of the node pool.
13408    pub name: std::string::String,
13409
13410    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
13411}
13412
13413impl GetNodePoolRequest {
13414    pub fn new() -> Self {
13415        std::default::Default::default()
13416    }
13417
13418    /// Sets the value of [name][crate::model::GetNodePoolRequest::name].
13419    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
13420        self.name = v.into();
13421        self
13422    }
13423}
13424
13425impl wkt::message::Message for GetNodePoolRequest {
13426    fn typename() -> &'static str {
13427        "type.googleapis.com/google.cloud.edgecontainer.v1.GetNodePoolRequest"
13428    }
13429}
13430
13431#[doc(hidden)]
13432impl<'de> serde::de::Deserialize<'de> for GetNodePoolRequest {
13433    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
13434    where
13435        D: serde::Deserializer<'de>,
13436    {
13437        #[allow(non_camel_case_types)]
13438        #[doc(hidden)]
13439        #[derive(PartialEq, Eq, Hash)]
13440        enum __FieldTag {
13441            __name,
13442            Unknown(std::string::String),
13443        }
13444        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
13445            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
13446            where
13447                D: serde::Deserializer<'de>,
13448            {
13449                struct Visitor;
13450                impl<'de> serde::de::Visitor<'de> for Visitor {
13451                    type Value = __FieldTag;
13452                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
13453                        formatter.write_str("a field name for GetNodePoolRequest")
13454                    }
13455                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
13456                    where
13457                        E: serde::de::Error,
13458                    {
13459                        use std::result::Result::Ok;
13460                        use std::string::ToString;
13461                        match value {
13462                            "name" => Ok(__FieldTag::__name),
13463                            _ => Ok(__FieldTag::Unknown(value.to_string())),
13464                        }
13465                    }
13466                }
13467                deserializer.deserialize_identifier(Visitor)
13468            }
13469        }
13470        struct Visitor;
13471        impl<'de> serde::de::Visitor<'de> for Visitor {
13472            type Value = GetNodePoolRequest;
13473            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
13474                formatter.write_str("struct GetNodePoolRequest")
13475            }
13476            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
13477            where
13478                A: serde::de::MapAccess<'de>,
13479            {
13480                #[allow(unused_imports)]
13481                use serde::de::Error;
13482                use std::option::Option::Some;
13483                let mut fields = std::collections::HashSet::new();
13484                let mut result = Self::Value::new();
13485                while let Some(tag) = map.next_key::<__FieldTag>()? {
13486                    #[allow(clippy::match_single_binding)]
13487                    match tag {
13488                        __FieldTag::__name => {
13489                            if !fields.insert(__FieldTag::__name) {
13490                                return std::result::Result::Err(A::Error::duplicate_field(
13491                                    "multiple values for name",
13492                                ));
13493                            }
13494                            result.name = map
13495                                .next_value::<std::option::Option<std::string::String>>()?
13496                                .unwrap_or_default();
13497                        }
13498                        __FieldTag::Unknown(key) => {
13499                            let value = map.next_value::<serde_json::Value>()?;
13500                            result._unknown_fields.insert(key, value);
13501                        }
13502                    }
13503                }
13504                std::result::Result::Ok(result)
13505            }
13506        }
13507        deserializer.deserialize_any(Visitor)
13508    }
13509}
13510
13511#[doc(hidden)]
13512impl serde::ser::Serialize for GetNodePoolRequest {
13513    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
13514    where
13515        S: serde::ser::Serializer,
13516    {
13517        use serde::ser::SerializeMap;
13518        #[allow(unused_imports)]
13519        use std::option::Option::Some;
13520        let mut state = serializer.serialize_map(std::option::Option::None)?;
13521        if !self.name.is_empty() {
13522            state.serialize_entry("name", &self.name)?;
13523        }
13524        if !self._unknown_fields.is_empty() {
13525            for (key, value) in self._unknown_fields.iter() {
13526                state.serialize_entry(key, &value)?;
13527            }
13528        }
13529        state.end()
13530    }
13531}
13532
13533impl std::fmt::Debug for GetNodePoolRequest {
13534    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13535        let mut debug_struct = f.debug_struct("GetNodePoolRequest");
13536        debug_struct.field("name", &self.name);
13537        if !self._unknown_fields.is_empty() {
13538            debug_struct.field("_unknown_fields", &self._unknown_fields);
13539        }
13540        debug_struct.finish()
13541    }
13542}
13543
13544/// Creates a node pool.
13545#[derive(Clone, Default, PartialEq)]
13546#[non_exhaustive]
13547pub struct CreateNodePoolRequest {
13548    /// Required. The parent cluster where this node pool will be created.
13549    pub parent: std::string::String,
13550
13551    /// Required. A client-specified unique identifier for the node pool.
13552    pub node_pool_id: std::string::String,
13553
13554    /// Required. The node pool to create.
13555    pub node_pool: std::option::Option<crate::model::NodePool>,
13556
13557    /// A unique identifier for this request. Restricted to 36 ASCII characters. A
13558    /// random UUID is recommended. This request is only idempotent if
13559    /// `request_id` is provided.
13560    pub request_id: std::string::String,
13561
13562    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
13563}
13564
13565impl CreateNodePoolRequest {
13566    pub fn new() -> Self {
13567        std::default::Default::default()
13568    }
13569
13570    /// Sets the value of [parent][crate::model::CreateNodePoolRequest::parent].
13571    pub fn set_parent<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
13572        self.parent = v.into();
13573        self
13574    }
13575
13576    /// Sets the value of [node_pool_id][crate::model::CreateNodePoolRequest::node_pool_id].
13577    pub fn set_node_pool_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
13578        self.node_pool_id = v.into();
13579        self
13580    }
13581
13582    /// Sets the value of [node_pool][crate::model::CreateNodePoolRequest::node_pool].
13583    pub fn set_node_pool<T>(mut self, v: T) -> Self
13584    where
13585        T: std::convert::Into<crate::model::NodePool>,
13586    {
13587        self.node_pool = std::option::Option::Some(v.into());
13588        self
13589    }
13590
13591    /// Sets or clears the value of [node_pool][crate::model::CreateNodePoolRequest::node_pool].
13592    pub fn set_or_clear_node_pool<T>(mut self, v: std::option::Option<T>) -> Self
13593    where
13594        T: std::convert::Into<crate::model::NodePool>,
13595    {
13596        self.node_pool = v.map(|x| x.into());
13597        self
13598    }
13599
13600    /// Sets the value of [request_id][crate::model::CreateNodePoolRequest::request_id].
13601    pub fn set_request_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
13602        self.request_id = v.into();
13603        self
13604    }
13605}
13606
13607impl wkt::message::Message for CreateNodePoolRequest {
13608    fn typename() -> &'static str {
13609        "type.googleapis.com/google.cloud.edgecontainer.v1.CreateNodePoolRequest"
13610    }
13611}
13612
13613#[doc(hidden)]
13614impl<'de> serde::de::Deserialize<'de> for CreateNodePoolRequest {
13615    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
13616    where
13617        D: serde::Deserializer<'de>,
13618    {
13619        #[allow(non_camel_case_types)]
13620        #[doc(hidden)]
13621        #[derive(PartialEq, Eq, Hash)]
13622        enum __FieldTag {
13623            __parent,
13624            __node_pool_id,
13625            __node_pool,
13626            __request_id,
13627            Unknown(std::string::String),
13628        }
13629        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
13630            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
13631            where
13632                D: serde::Deserializer<'de>,
13633            {
13634                struct Visitor;
13635                impl<'de> serde::de::Visitor<'de> for Visitor {
13636                    type Value = __FieldTag;
13637                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
13638                        formatter.write_str("a field name for CreateNodePoolRequest")
13639                    }
13640                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
13641                    where
13642                        E: serde::de::Error,
13643                    {
13644                        use std::result::Result::Ok;
13645                        use std::string::ToString;
13646                        match value {
13647                            "parent" => Ok(__FieldTag::__parent),
13648                            "nodePoolId" => Ok(__FieldTag::__node_pool_id),
13649                            "node_pool_id" => Ok(__FieldTag::__node_pool_id),
13650                            "nodePool" => Ok(__FieldTag::__node_pool),
13651                            "node_pool" => Ok(__FieldTag::__node_pool),
13652                            "requestId" => Ok(__FieldTag::__request_id),
13653                            "request_id" => Ok(__FieldTag::__request_id),
13654                            _ => Ok(__FieldTag::Unknown(value.to_string())),
13655                        }
13656                    }
13657                }
13658                deserializer.deserialize_identifier(Visitor)
13659            }
13660        }
13661        struct Visitor;
13662        impl<'de> serde::de::Visitor<'de> for Visitor {
13663            type Value = CreateNodePoolRequest;
13664            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
13665                formatter.write_str("struct CreateNodePoolRequest")
13666            }
13667            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
13668            where
13669                A: serde::de::MapAccess<'de>,
13670            {
13671                #[allow(unused_imports)]
13672                use serde::de::Error;
13673                use std::option::Option::Some;
13674                let mut fields = std::collections::HashSet::new();
13675                let mut result = Self::Value::new();
13676                while let Some(tag) = map.next_key::<__FieldTag>()? {
13677                    #[allow(clippy::match_single_binding)]
13678                    match tag {
13679                        __FieldTag::__parent => {
13680                            if !fields.insert(__FieldTag::__parent) {
13681                                return std::result::Result::Err(A::Error::duplicate_field(
13682                                    "multiple values for parent",
13683                                ));
13684                            }
13685                            result.parent = map
13686                                .next_value::<std::option::Option<std::string::String>>()?
13687                                .unwrap_or_default();
13688                        }
13689                        __FieldTag::__node_pool_id => {
13690                            if !fields.insert(__FieldTag::__node_pool_id) {
13691                                return std::result::Result::Err(A::Error::duplicate_field(
13692                                    "multiple values for node_pool_id",
13693                                ));
13694                            }
13695                            result.node_pool_id = map
13696                                .next_value::<std::option::Option<std::string::String>>()?
13697                                .unwrap_or_default();
13698                        }
13699                        __FieldTag::__node_pool => {
13700                            if !fields.insert(__FieldTag::__node_pool) {
13701                                return std::result::Result::Err(A::Error::duplicate_field(
13702                                    "multiple values for node_pool",
13703                                ));
13704                            }
13705                            result.node_pool =
13706                                map.next_value::<std::option::Option<crate::model::NodePool>>()?;
13707                        }
13708                        __FieldTag::__request_id => {
13709                            if !fields.insert(__FieldTag::__request_id) {
13710                                return std::result::Result::Err(A::Error::duplicate_field(
13711                                    "multiple values for request_id",
13712                                ));
13713                            }
13714                            result.request_id = map
13715                                .next_value::<std::option::Option<std::string::String>>()?
13716                                .unwrap_or_default();
13717                        }
13718                        __FieldTag::Unknown(key) => {
13719                            let value = map.next_value::<serde_json::Value>()?;
13720                            result._unknown_fields.insert(key, value);
13721                        }
13722                    }
13723                }
13724                std::result::Result::Ok(result)
13725            }
13726        }
13727        deserializer.deserialize_any(Visitor)
13728    }
13729}
13730
13731#[doc(hidden)]
13732impl serde::ser::Serialize for CreateNodePoolRequest {
13733    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
13734    where
13735        S: serde::ser::Serializer,
13736    {
13737        use serde::ser::SerializeMap;
13738        #[allow(unused_imports)]
13739        use std::option::Option::Some;
13740        let mut state = serializer.serialize_map(std::option::Option::None)?;
13741        if !self.parent.is_empty() {
13742            state.serialize_entry("parent", &self.parent)?;
13743        }
13744        if !self.node_pool_id.is_empty() {
13745            state.serialize_entry("nodePoolId", &self.node_pool_id)?;
13746        }
13747        if self.node_pool.is_some() {
13748            state.serialize_entry("nodePool", &self.node_pool)?;
13749        }
13750        if !self.request_id.is_empty() {
13751            state.serialize_entry("requestId", &self.request_id)?;
13752        }
13753        if !self._unknown_fields.is_empty() {
13754            for (key, value) in self._unknown_fields.iter() {
13755                state.serialize_entry(key, &value)?;
13756            }
13757        }
13758        state.end()
13759    }
13760}
13761
13762impl std::fmt::Debug for CreateNodePoolRequest {
13763    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13764        let mut debug_struct = f.debug_struct("CreateNodePoolRequest");
13765        debug_struct.field("parent", &self.parent);
13766        debug_struct.field("node_pool_id", &self.node_pool_id);
13767        debug_struct.field("node_pool", &self.node_pool);
13768        debug_struct.field("request_id", &self.request_id);
13769        if !self._unknown_fields.is_empty() {
13770            debug_struct.field("_unknown_fields", &self._unknown_fields);
13771        }
13772        debug_struct.finish()
13773    }
13774}
13775
13776/// Updates a node pool.
13777#[derive(Clone, Default, PartialEq)]
13778#[non_exhaustive]
13779pub struct UpdateNodePoolRequest {
13780    /// Field mask is used to specify the fields to be overwritten in the
13781    /// NodePool resource by the update.
13782    /// The fields specified in the update_mask are relative to the resource, not
13783    /// the full request. A field will be overwritten if it is in the mask. If the
13784    /// user does not provide a mask then all fields will be overwritten.
13785    pub update_mask: std::option::Option<wkt::FieldMask>,
13786
13787    /// The updated node pool.
13788    pub node_pool: std::option::Option<crate::model::NodePool>,
13789
13790    /// A unique identifier for this request. Restricted to 36 ASCII characters. A
13791    /// random UUID is recommended. This request is only idempotent if
13792    /// `request_id` is provided.
13793    pub request_id: std::string::String,
13794
13795    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
13796}
13797
13798impl UpdateNodePoolRequest {
13799    pub fn new() -> Self {
13800        std::default::Default::default()
13801    }
13802
13803    /// Sets the value of [update_mask][crate::model::UpdateNodePoolRequest::update_mask].
13804    pub fn set_update_mask<T>(mut self, v: T) -> Self
13805    where
13806        T: std::convert::Into<wkt::FieldMask>,
13807    {
13808        self.update_mask = std::option::Option::Some(v.into());
13809        self
13810    }
13811
13812    /// Sets or clears the value of [update_mask][crate::model::UpdateNodePoolRequest::update_mask].
13813    pub fn set_or_clear_update_mask<T>(mut self, v: std::option::Option<T>) -> Self
13814    where
13815        T: std::convert::Into<wkt::FieldMask>,
13816    {
13817        self.update_mask = v.map(|x| x.into());
13818        self
13819    }
13820
13821    /// Sets the value of [node_pool][crate::model::UpdateNodePoolRequest::node_pool].
13822    pub fn set_node_pool<T>(mut self, v: T) -> Self
13823    where
13824        T: std::convert::Into<crate::model::NodePool>,
13825    {
13826        self.node_pool = std::option::Option::Some(v.into());
13827        self
13828    }
13829
13830    /// Sets or clears the value of [node_pool][crate::model::UpdateNodePoolRequest::node_pool].
13831    pub fn set_or_clear_node_pool<T>(mut self, v: std::option::Option<T>) -> Self
13832    where
13833        T: std::convert::Into<crate::model::NodePool>,
13834    {
13835        self.node_pool = v.map(|x| x.into());
13836        self
13837    }
13838
13839    /// Sets the value of [request_id][crate::model::UpdateNodePoolRequest::request_id].
13840    pub fn set_request_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
13841        self.request_id = v.into();
13842        self
13843    }
13844}
13845
13846impl wkt::message::Message for UpdateNodePoolRequest {
13847    fn typename() -> &'static str {
13848        "type.googleapis.com/google.cloud.edgecontainer.v1.UpdateNodePoolRequest"
13849    }
13850}
13851
13852#[doc(hidden)]
13853impl<'de> serde::de::Deserialize<'de> for UpdateNodePoolRequest {
13854    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
13855    where
13856        D: serde::Deserializer<'de>,
13857    {
13858        #[allow(non_camel_case_types)]
13859        #[doc(hidden)]
13860        #[derive(PartialEq, Eq, Hash)]
13861        enum __FieldTag {
13862            __update_mask,
13863            __node_pool,
13864            __request_id,
13865            Unknown(std::string::String),
13866        }
13867        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
13868            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
13869            where
13870                D: serde::Deserializer<'de>,
13871            {
13872                struct Visitor;
13873                impl<'de> serde::de::Visitor<'de> for Visitor {
13874                    type Value = __FieldTag;
13875                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
13876                        formatter.write_str("a field name for UpdateNodePoolRequest")
13877                    }
13878                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
13879                    where
13880                        E: serde::de::Error,
13881                    {
13882                        use std::result::Result::Ok;
13883                        use std::string::ToString;
13884                        match value {
13885                            "updateMask" => Ok(__FieldTag::__update_mask),
13886                            "update_mask" => Ok(__FieldTag::__update_mask),
13887                            "nodePool" => Ok(__FieldTag::__node_pool),
13888                            "node_pool" => Ok(__FieldTag::__node_pool),
13889                            "requestId" => Ok(__FieldTag::__request_id),
13890                            "request_id" => Ok(__FieldTag::__request_id),
13891                            _ => Ok(__FieldTag::Unknown(value.to_string())),
13892                        }
13893                    }
13894                }
13895                deserializer.deserialize_identifier(Visitor)
13896            }
13897        }
13898        struct Visitor;
13899        impl<'de> serde::de::Visitor<'de> for Visitor {
13900            type Value = UpdateNodePoolRequest;
13901            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
13902                formatter.write_str("struct UpdateNodePoolRequest")
13903            }
13904            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
13905            where
13906                A: serde::de::MapAccess<'de>,
13907            {
13908                #[allow(unused_imports)]
13909                use serde::de::Error;
13910                use std::option::Option::Some;
13911                let mut fields = std::collections::HashSet::new();
13912                let mut result = Self::Value::new();
13913                while let Some(tag) = map.next_key::<__FieldTag>()? {
13914                    #[allow(clippy::match_single_binding)]
13915                    match tag {
13916                        __FieldTag::__update_mask => {
13917                            if !fields.insert(__FieldTag::__update_mask) {
13918                                return std::result::Result::Err(A::Error::duplicate_field(
13919                                    "multiple values for update_mask",
13920                                ));
13921                            }
13922                            result.update_mask =
13923                                map.next_value::<std::option::Option<wkt::FieldMask>>()?;
13924                        }
13925                        __FieldTag::__node_pool => {
13926                            if !fields.insert(__FieldTag::__node_pool) {
13927                                return std::result::Result::Err(A::Error::duplicate_field(
13928                                    "multiple values for node_pool",
13929                                ));
13930                            }
13931                            result.node_pool =
13932                                map.next_value::<std::option::Option<crate::model::NodePool>>()?;
13933                        }
13934                        __FieldTag::__request_id => {
13935                            if !fields.insert(__FieldTag::__request_id) {
13936                                return std::result::Result::Err(A::Error::duplicate_field(
13937                                    "multiple values for request_id",
13938                                ));
13939                            }
13940                            result.request_id = map
13941                                .next_value::<std::option::Option<std::string::String>>()?
13942                                .unwrap_or_default();
13943                        }
13944                        __FieldTag::Unknown(key) => {
13945                            let value = map.next_value::<serde_json::Value>()?;
13946                            result._unknown_fields.insert(key, value);
13947                        }
13948                    }
13949                }
13950                std::result::Result::Ok(result)
13951            }
13952        }
13953        deserializer.deserialize_any(Visitor)
13954    }
13955}
13956
13957#[doc(hidden)]
13958impl serde::ser::Serialize for UpdateNodePoolRequest {
13959    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
13960    where
13961        S: serde::ser::Serializer,
13962    {
13963        use serde::ser::SerializeMap;
13964        #[allow(unused_imports)]
13965        use std::option::Option::Some;
13966        let mut state = serializer.serialize_map(std::option::Option::None)?;
13967        if self.update_mask.is_some() {
13968            state.serialize_entry("updateMask", &self.update_mask)?;
13969        }
13970        if self.node_pool.is_some() {
13971            state.serialize_entry("nodePool", &self.node_pool)?;
13972        }
13973        if !self.request_id.is_empty() {
13974            state.serialize_entry("requestId", &self.request_id)?;
13975        }
13976        if !self._unknown_fields.is_empty() {
13977            for (key, value) in self._unknown_fields.iter() {
13978                state.serialize_entry(key, &value)?;
13979            }
13980        }
13981        state.end()
13982    }
13983}
13984
13985impl std::fmt::Debug for UpdateNodePoolRequest {
13986    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13987        let mut debug_struct = f.debug_struct("UpdateNodePoolRequest");
13988        debug_struct.field("update_mask", &self.update_mask);
13989        debug_struct.field("node_pool", &self.node_pool);
13990        debug_struct.field("request_id", &self.request_id);
13991        if !self._unknown_fields.is_empty() {
13992            debug_struct.field("_unknown_fields", &self._unknown_fields);
13993        }
13994        debug_struct.finish()
13995    }
13996}
13997
13998/// Deletes a node pool.
13999#[derive(Clone, Default, PartialEq)]
14000#[non_exhaustive]
14001pub struct DeleteNodePoolRequest {
14002    /// Required. The resource name of the node pool.
14003    pub name: std::string::String,
14004
14005    /// A unique identifier for this request. Restricted to 36 ASCII characters. A
14006    /// random UUID is recommended. This request is only idempotent if
14007    /// `request_id` is provided.
14008    pub request_id: std::string::String,
14009
14010    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
14011}
14012
14013impl DeleteNodePoolRequest {
14014    pub fn new() -> Self {
14015        std::default::Default::default()
14016    }
14017
14018    /// Sets the value of [name][crate::model::DeleteNodePoolRequest::name].
14019    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
14020        self.name = v.into();
14021        self
14022    }
14023
14024    /// Sets the value of [request_id][crate::model::DeleteNodePoolRequest::request_id].
14025    pub fn set_request_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
14026        self.request_id = v.into();
14027        self
14028    }
14029}
14030
14031impl wkt::message::Message for DeleteNodePoolRequest {
14032    fn typename() -> &'static str {
14033        "type.googleapis.com/google.cloud.edgecontainer.v1.DeleteNodePoolRequest"
14034    }
14035}
14036
14037#[doc(hidden)]
14038impl<'de> serde::de::Deserialize<'de> for DeleteNodePoolRequest {
14039    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
14040    where
14041        D: serde::Deserializer<'de>,
14042    {
14043        #[allow(non_camel_case_types)]
14044        #[doc(hidden)]
14045        #[derive(PartialEq, Eq, Hash)]
14046        enum __FieldTag {
14047            __name,
14048            __request_id,
14049            Unknown(std::string::String),
14050        }
14051        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
14052            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
14053            where
14054                D: serde::Deserializer<'de>,
14055            {
14056                struct Visitor;
14057                impl<'de> serde::de::Visitor<'de> for Visitor {
14058                    type Value = __FieldTag;
14059                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
14060                        formatter.write_str("a field name for DeleteNodePoolRequest")
14061                    }
14062                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
14063                    where
14064                        E: serde::de::Error,
14065                    {
14066                        use std::result::Result::Ok;
14067                        use std::string::ToString;
14068                        match value {
14069                            "name" => Ok(__FieldTag::__name),
14070                            "requestId" => Ok(__FieldTag::__request_id),
14071                            "request_id" => Ok(__FieldTag::__request_id),
14072                            _ => Ok(__FieldTag::Unknown(value.to_string())),
14073                        }
14074                    }
14075                }
14076                deserializer.deserialize_identifier(Visitor)
14077            }
14078        }
14079        struct Visitor;
14080        impl<'de> serde::de::Visitor<'de> for Visitor {
14081            type Value = DeleteNodePoolRequest;
14082            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
14083                formatter.write_str("struct DeleteNodePoolRequest")
14084            }
14085            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
14086            where
14087                A: serde::de::MapAccess<'de>,
14088            {
14089                #[allow(unused_imports)]
14090                use serde::de::Error;
14091                use std::option::Option::Some;
14092                let mut fields = std::collections::HashSet::new();
14093                let mut result = Self::Value::new();
14094                while let Some(tag) = map.next_key::<__FieldTag>()? {
14095                    #[allow(clippy::match_single_binding)]
14096                    match tag {
14097                        __FieldTag::__name => {
14098                            if !fields.insert(__FieldTag::__name) {
14099                                return std::result::Result::Err(A::Error::duplicate_field(
14100                                    "multiple values for name",
14101                                ));
14102                            }
14103                            result.name = map
14104                                .next_value::<std::option::Option<std::string::String>>()?
14105                                .unwrap_or_default();
14106                        }
14107                        __FieldTag::__request_id => {
14108                            if !fields.insert(__FieldTag::__request_id) {
14109                                return std::result::Result::Err(A::Error::duplicate_field(
14110                                    "multiple values for request_id",
14111                                ));
14112                            }
14113                            result.request_id = map
14114                                .next_value::<std::option::Option<std::string::String>>()?
14115                                .unwrap_or_default();
14116                        }
14117                        __FieldTag::Unknown(key) => {
14118                            let value = map.next_value::<serde_json::Value>()?;
14119                            result._unknown_fields.insert(key, value);
14120                        }
14121                    }
14122                }
14123                std::result::Result::Ok(result)
14124            }
14125        }
14126        deserializer.deserialize_any(Visitor)
14127    }
14128}
14129
14130#[doc(hidden)]
14131impl serde::ser::Serialize for DeleteNodePoolRequest {
14132    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
14133    where
14134        S: serde::ser::Serializer,
14135    {
14136        use serde::ser::SerializeMap;
14137        #[allow(unused_imports)]
14138        use std::option::Option::Some;
14139        let mut state = serializer.serialize_map(std::option::Option::None)?;
14140        if !self.name.is_empty() {
14141            state.serialize_entry("name", &self.name)?;
14142        }
14143        if !self.request_id.is_empty() {
14144            state.serialize_entry("requestId", &self.request_id)?;
14145        }
14146        if !self._unknown_fields.is_empty() {
14147            for (key, value) in self._unknown_fields.iter() {
14148                state.serialize_entry(key, &value)?;
14149            }
14150        }
14151        state.end()
14152    }
14153}
14154
14155impl std::fmt::Debug for DeleteNodePoolRequest {
14156    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14157        let mut debug_struct = f.debug_struct("DeleteNodePoolRequest");
14158        debug_struct.field("name", &self.name);
14159        debug_struct.field("request_id", &self.request_id);
14160        if !self._unknown_fields.is_empty() {
14161            debug_struct.field("_unknown_fields", &self._unknown_fields);
14162        }
14163        debug_struct.finish()
14164    }
14165}
14166
14167/// Lists machines in a site.
14168#[derive(Clone, Default, PartialEq)]
14169#[non_exhaustive]
14170pub struct ListMachinesRequest {
14171    /// Required. The parent site, which owns this collection of machines.
14172    pub parent: std::string::String,
14173
14174    /// The maximum number of resources to list.
14175    pub page_size: i32,
14176
14177    /// A page token received from previous list request.
14178    pub page_token: std::string::String,
14179
14180    /// Only resources matching this filter will be listed.
14181    pub filter: std::string::String,
14182
14183    /// Specifies the order in which resources will be listed.
14184    pub order_by: std::string::String,
14185
14186    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
14187}
14188
14189impl ListMachinesRequest {
14190    pub fn new() -> Self {
14191        std::default::Default::default()
14192    }
14193
14194    /// Sets the value of [parent][crate::model::ListMachinesRequest::parent].
14195    pub fn set_parent<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
14196        self.parent = v.into();
14197        self
14198    }
14199
14200    /// Sets the value of [page_size][crate::model::ListMachinesRequest::page_size].
14201    pub fn set_page_size<T: std::convert::Into<i32>>(mut self, v: T) -> Self {
14202        self.page_size = v.into();
14203        self
14204    }
14205
14206    /// Sets the value of [page_token][crate::model::ListMachinesRequest::page_token].
14207    pub fn set_page_token<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
14208        self.page_token = v.into();
14209        self
14210    }
14211
14212    /// Sets the value of [filter][crate::model::ListMachinesRequest::filter].
14213    pub fn set_filter<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
14214        self.filter = v.into();
14215        self
14216    }
14217
14218    /// Sets the value of [order_by][crate::model::ListMachinesRequest::order_by].
14219    pub fn set_order_by<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
14220        self.order_by = v.into();
14221        self
14222    }
14223}
14224
14225impl wkt::message::Message for ListMachinesRequest {
14226    fn typename() -> &'static str {
14227        "type.googleapis.com/google.cloud.edgecontainer.v1.ListMachinesRequest"
14228    }
14229}
14230
14231#[doc(hidden)]
14232impl<'de> serde::de::Deserialize<'de> for ListMachinesRequest {
14233    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
14234    where
14235        D: serde::Deserializer<'de>,
14236    {
14237        #[allow(non_camel_case_types)]
14238        #[doc(hidden)]
14239        #[derive(PartialEq, Eq, Hash)]
14240        enum __FieldTag {
14241            __parent,
14242            __page_size,
14243            __page_token,
14244            __filter,
14245            __order_by,
14246            Unknown(std::string::String),
14247        }
14248        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
14249            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
14250            where
14251                D: serde::Deserializer<'de>,
14252            {
14253                struct Visitor;
14254                impl<'de> serde::de::Visitor<'de> for Visitor {
14255                    type Value = __FieldTag;
14256                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
14257                        formatter.write_str("a field name for ListMachinesRequest")
14258                    }
14259                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
14260                    where
14261                        E: serde::de::Error,
14262                    {
14263                        use std::result::Result::Ok;
14264                        use std::string::ToString;
14265                        match value {
14266                            "parent" => Ok(__FieldTag::__parent),
14267                            "pageSize" => Ok(__FieldTag::__page_size),
14268                            "page_size" => Ok(__FieldTag::__page_size),
14269                            "pageToken" => Ok(__FieldTag::__page_token),
14270                            "page_token" => Ok(__FieldTag::__page_token),
14271                            "filter" => Ok(__FieldTag::__filter),
14272                            "orderBy" => Ok(__FieldTag::__order_by),
14273                            "order_by" => Ok(__FieldTag::__order_by),
14274                            _ => Ok(__FieldTag::Unknown(value.to_string())),
14275                        }
14276                    }
14277                }
14278                deserializer.deserialize_identifier(Visitor)
14279            }
14280        }
14281        struct Visitor;
14282        impl<'de> serde::de::Visitor<'de> for Visitor {
14283            type Value = ListMachinesRequest;
14284            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
14285                formatter.write_str("struct ListMachinesRequest")
14286            }
14287            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
14288            where
14289                A: serde::de::MapAccess<'de>,
14290            {
14291                #[allow(unused_imports)]
14292                use serde::de::Error;
14293                use std::option::Option::Some;
14294                let mut fields = std::collections::HashSet::new();
14295                let mut result = Self::Value::new();
14296                while let Some(tag) = map.next_key::<__FieldTag>()? {
14297                    #[allow(clippy::match_single_binding)]
14298                    match tag {
14299                        __FieldTag::__parent => {
14300                            if !fields.insert(__FieldTag::__parent) {
14301                                return std::result::Result::Err(A::Error::duplicate_field(
14302                                    "multiple values for parent",
14303                                ));
14304                            }
14305                            result.parent = map
14306                                .next_value::<std::option::Option<std::string::String>>()?
14307                                .unwrap_or_default();
14308                        }
14309                        __FieldTag::__page_size => {
14310                            if !fields.insert(__FieldTag::__page_size) {
14311                                return std::result::Result::Err(A::Error::duplicate_field(
14312                                    "multiple values for page_size",
14313                                ));
14314                            }
14315                            struct __With(std::option::Option<i32>);
14316                            impl<'de> serde::de::Deserialize<'de> for __With {
14317                                fn deserialize<D>(
14318                                    deserializer: D,
14319                                ) -> std::result::Result<Self, D::Error>
14320                                where
14321                                    D: serde::de::Deserializer<'de>,
14322                                {
14323                                    serde_with::As::< std::option::Option<wkt::internal::I32> >::deserialize(deserializer).map(__With)
14324                                }
14325                            }
14326                            result.page_size = map.next_value::<__With>()?.0.unwrap_or_default();
14327                        }
14328                        __FieldTag::__page_token => {
14329                            if !fields.insert(__FieldTag::__page_token) {
14330                                return std::result::Result::Err(A::Error::duplicate_field(
14331                                    "multiple values for page_token",
14332                                ));
14333                            }
14334                            result.page_token = map
14335                                .next_value::<std::option::Option<std::string::String>>()?
14336                                .unwrap_or_default();
14337                        }
14338                        __FieldTag::__filter => {
14339                            if !fields.insert(__FieldTag::__filter) {
14340                                return std::result::Result::Err(A::Error::duplicate_field(
14341                                    "multiple values for filter",
14342                                ));
14343                            }
14344                            result.filter = map
14345                                .next_value::<std::option::Option<std::string::String>>()?
14346                                .unwrap_or_default();
14347                        }
14348                        __FieldTag::__order_by => {
14349                            if !fields.insert(__FieldTag::__order_by) {
14350                                return std::result::Result::Err(A::Error::duplicate_field(
14351                                    "multiple values for order_by",
14352                                ));
14353                            }
14354                            result.order_by = map
14355                                .next_value::<std::option::Option<std::string::String>>()?
14356                                .unwrap_or_default();
14357                        }
14358                        __FieldTag::Unknown(key) => {
14359                            let value = map.next_value::<serde_json::Value>()?;
14360                            result._unknown_fields.insert(key, value);
14361                        }
14362                    }
14363                }
14364                std::result::Result::Ok(result)
14365            }
14366        }
14367        deserializer.deserialize_any(Visitor)
14368    }
14369}
14370
14371#[doc(hidden)]
14372impl serde::ser::Serialize for ListMachinesRequest {
14373    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
14374    where
14375        S: serde::ser::Serializer,
14376    {
14377        use serde::ser::SerializeMap;
14378        #[allow(unused_imports)]
14379        use std::option::Option::Some;
14380        let mut state = serializer.serialize_map(std::option::Option::None)?;
14381        if !self.parent.is_empty() {
14382            state.serialize_entry("parent", &self.parent)?;
14383        }
14384        if !wkt::internal::is_default(&self.page_size) {
14385            struct __With<'a>(&'a i32);
14386            impl<'a> serde::ser::Serialize for __With<'a> {
14387                fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
14388                where
14389                    S: serde::ser::Serializer,
14390                {
14391                    serde_with::As::<wkt::internal::I32>::serialize(self.0, serializer)
14392                }
14393            }
14394            state.serialize_entry("pageSize", &__With(&self.page_size))?;
14395        }
14396        if !self.page_token.is_empty() {
14397            state.serialize_entry("pageToken", &self.page_token)?;
14398        }
14399        if !self.filter.is_empty() {
14400            state.serialize_entry("filter", &self.filter)?;
14401        }
14402        if !self.order_by.is_empty() {
14403            state.serialize_entry("orderBy", &self.order_by)?;
14404        }
14405        if !self._unknown_fields.is_empty() {
14406            for (key, value) in self._unknown_fields.iter() {
14407                state.serialize_entry(key, &value)?;
14408            }
14409        }
14410        state.end()
14411    }
14412}
14413
14414impl std::fmt::Debug for ListMachinesRequest {
14415    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14416        let mut debug_struct = f.debug_struct("ListMachinesRequest");
14417        debug_struct.field("parent", &self.parent);
14418        debug_struct.field("page_size", &self.page_size);
14419        debug_struct.field("page_token", &self.page_token);
14420        debug_struct.field("filter", &self.filter);
14421        debug_struct.field("order_by", &self.order_by);
14422        if !self._unknown_fields.is_empty() {
14423            debug_struct.field("_unknown_fields", &self._unknown_fields);
14424        }
14425        debug_struct.finish()
14426    }
14427}
14428
14429/// List of machines in a site.
14430#[derive(Clone, Default, PartialEq)]
14431#[non_exhaustive]
14432pub struct ListMachinesResponse {
14433    /// Machines in the site.
14434    pub machines: std::vec::Vec<crate::model::Machine>,
14435
14436    /// A token to retrieve next page of results.
14437    pub next_page_token: std::string::String,
14438
14439    /// Locations that could not be reached.
14440    pub unreachable: std::vec::Vec<std::string::String>,
14441
14442    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
14443}
14444
14445impl ListMachinesResponse {
14446    pub fn new() -> Self {
14447        std::default::Default::default()
14448    }
14449
14450    /// Sets the value of [machines][crate::model::ListMachinesResponse::machines].
14451    pub fn set_machines<T, V>(mut self, v: T) -> Self
14452    where
14453        T: std::iter::IntoIterator<Item = V>,
14454        V: std::convert::Into<crate::model::Machine>,
14455    {
14456        use std::iter::Iterator;
14457        self.machines = v.into_iter().map(|i| i.into()).collect();
14458        self
14459    }
14460
14461    /// Sets the value of [next_page_token][crate::model::ListMachinesResponse::next_page_token].
14462    pub fn set_next_page_token<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
14463        self.next_page_token = v.into();
14464        self
14465    }
14466
14467    /// Sets the value of [unreachable][crate::model::ListMachinesResponse::unreachable].
14468    pub fn set_unreachable<T, V>(mut self, v: T) -> Self
14469    where
14470        T: std::iter::IntoIterator<Item = V>,
14471        V: std::convert::Into<std::string::String>,
14472    {
14473        use std::iter::Iterator;
14474        self.unreachable = v.into_iter().map(|i| i.into()).collect();
14475        self
14476    }
14477}
14478
14479impl wkt::message::Message for ListMachinesResponse {
14480    fn typename() -> &'static str {
14481        "type.googleapis.com/google.cloud.edgecontainer.v1.ListMachinesResponse"
14482    }
14483}
14484
14485#[doc(hidden)]
14486impl gax::paginator::internal::PageableResponse for ListMachinesResponse {
14487    type PageItem = crate::model::Machine;
14488
14489    fn items(self) -> std::vec::Vec<Self::PageItem> {
14490        self.machines
14491    }
14492
14493    fn next_page_token(&self) -> std::string::String {
14494        use std::clone::Clone;
14495        self.next_page_token.clone()
14496    }
14497}
14498
14499#[doc(hidden)]
14500impl<'de> serde::de::Deserialize<'de> for ListMachinesResponse {
14501    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
14502    where
14503        D: serde::Deserializer<'de>,
14504    {
14505        #[allow(non_camel_case_types)]
14506        #[doc(hidden)]
14507        #[derive(PartialEq, Eq, Hash)]
14508        enum __FieldTag {
14509            __machines,
14510            __next_page_token,
14511            __unreachable,
14512            Unknown(std::string::String),
14513        }
14514        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
14515            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
14516            where
14517                D: serde::Deserializer<'de>,
14518            {
14519                struct Visitor;
14520                impl<'de> serde::de::Visitor<'de> for Visitor {
14521                    type Value = __FieldTag;
14522                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
14523                        formatter.write_str("a field name for ListMachinesResponse")
14524                    }
14525                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
14526                    where
14527                        E: serde::de::Error,
14528                    {
14529                        use std::result::Result::Ok;
14530                        use std::string::ToString;
14531                        match value {
14532                            "machines" => Ok(__FieldTag::__machines),
14533                            "nextPageToken" => Ok(__FieldTag::__next_page_token),
14534                            "next_page_token" => Ok(__FieldTag::__next_page_token),
14535                            "unreachable" => Ok(__FieldTag::__unreachable),
14536                            _ => Ok(__FieldTag::Unknown(value.to_string())),
14537                        }
14538                    }
14539                }
14540                deserializer.deserialize_identifier(Visitor)
14541            }
14542        }
14543        struct Visitor;
14544        impl<'de> serde::de::Visitor<'de> for Visitor {
14545            type Value = ListMachinesResponse;
14546            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
14547                formatter.write_str("struct ListMachinesResponse")
14548            }
14549            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
14550            where
14551                A: serde::de::MapAccess<'de>,
14552            {
14553                #[allow(unused_imports)]
14554                use serde::de::Error;
14555                use std::option::Option::Some;
14556                let mut fields = std::collections::HashSet::new();
14557                let mut result = Self::Value::new();
14558                while let Some(tag) = map.next_key::<__FieldTag>()? {
14559                    #[allow(clippy::match_single_binding)]
14560                    match tag {
14561                        __FieldTag::__machines => {
14562                            if !fields.insert(__FieldTag::__machines) {
14563                                return std::result::Result::Err(A::Error::duplicate_field(
14564                                    "multiple values for machines",
14565                                ));
14566                            }
14567                            result.machines = map.next_value::<std::option::Option<std::vec::Vec<crate::model::Machine>>>()?.unwrap_or_default();
14568                        }
14569                        __FieldTag::__next_page_token => {
14570                            if !fields.insert(__FieldTag::__next_page_token) {
14571                                return std::result::Result::Err(A::Error::duplicate_field(
14572                                    "multiple values for next_page_token",
14573                                ));
14574                            }
14575                            result.next_page_token = map
14576                                .next_value::<std::option::Option<std::string::String>>()?
14577                                .unwrap_or_default();
14578                        }
14579                        __FieldTag::__unreachable => {
14580                            if !fields.insert(__FieldTag::__unreachable) {
14581                                return std::result::Result::Err(A::Error::duplicate_field(
14582                                    "multiple values for unreachable",
14583                                ));
14584                            }
14585                            result.unreachable = map.next_value::<std::option::Option<std::vec::Vec<std::string::String>>>()?.unwrap_or_default();
14586                        }
14587                        __FieldTag::Unknown(key) => {
14588                            let value = map.next_value::<serde_json::Value>()?;
14589                            result._unknown_fields.insert(key, value);
14590                        }
14591                    }
14592                }
14593                std::result::Result::Ok(result)
14594            }
14595        }
14596        deserializer.deserialize_any(Visitor)
14597    }
14598}
14599
14600#[doc(hidden)]
14601impl serde::ser::Serialize for ListMachinesResponse {
14602    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
14603    where
14604        S: serde::ser::Serializer,
14605    {
14606        use serde::ser::SerializeMap;
14607        #[allow(unused_imports)]
14608        use std::option::Option::Some;
14609        let mut state = serializer.serialize_map(std::option::Option::None)?;
14610        if !self.machines.is_empty() {
14611            state.serialize_entry("machines", &self.machines)?;
14612        }
14613        if !self.next_page_token.is_empty() {
14614            state.serialize_entry("nextPageToken", &self.next_page_token)?;
14615        }
14616        if !self.unreachable.is_empty() {
14617            state.serialize_entry("unreachable", &self.unreachable)?;
14618        }
14619        if !self._unknown_fields.is_empty() {
14620            for (key, value) in self._unknown_fields.iter() {
14621                state.serialize_entry(key, &value)?;
14622            }
14623        }
14624        state.end()
14625    }
14626}
14627
14628impl std::fmt::Debug for ListMachinesResponse {
14629    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14630        let mut debug_struct = f.debug_struct("ListMachinesResponse");
14631        debug_struct.field("machines", &self.machines);
14632        debug_struct.field("next_page_token", &self.next_page_token);
14633        debug_struct.field("unreachable", &self.unreachable);
14634        if !self._unknown_fields.is_empty() {
14635            debug_struct.field("_unknown_fields", &self._unknown_fields);
14636        }
14637        debug_struct.finish()
14638    }
14639}
14640
14641/// Gets a machine.
14642#[derive(Clone, Default, PartialEq)]
14643#[non_exhaustive]
14644pub struct GetMachineRequest {
14645    /// Required. The resource name of the machine.
14646    pub name: std::string::String,
14647
14648    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
14649}
14650
14651impl GetMachineRequest {
14652    pub fn new() -> Self {
14653        std::default::Default::default()
14654    }
14655
14656    /// Sets the value of [name][crate::model::GetMachineRequest::name].
14657    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
14658        self.name = v.into();
14659        self
14660    }
14661}
14662
14663impl wkt::message::Message for GetMachineRequest {
14664    fn typename() -> &'static str {
14665        "type.googleapis.com/google.cloud.edgecontainer.v1.GetMachineRequest"
14666    }
14667}
14668
14669#[doc(hidden)]
14670impl<'de> serde::de::Deserialize<'de> for GetMachineRequest {
14671    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
14672    where
14673        D: serde::Deserializer<'de>,
14674    {
14675        #[allow(non_camel_case_types)]
14676        #[doc(hidden)]
14677        #[derive(PartialEq, Eq, Hash)]
14678        enum __FieldTag {
14679            __name,
14680            Unknown(std::string::String),
14681        }
14682        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
14683            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
14684            where
14685                D: serde::Deserializer<'de>,
14686            {
14687                struct Visitor;
14688                impl<'de> serde::de::Visitor<'de> for Visitor {
14689                    type Value = __FieldTag;
14690                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
14691                        formatter.write_str("a field name for GetMachineRequest")
14692                    }
14693                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
14694                    where
14695                        E: serde::de::Error,
14696                    {
14697                        use std::result::Result::Ok;
14698                        use std::string::ToString;
14699                        match value {
14700                            "name" => Ok(__FieldTag::__name),
14701                            _ => Ok(__FieldTag::Unknown(value.to_string())),
14702                        }
14703                    }
14704                }
14705                deserializer.deserialize_identifier(Visitor)
14706            }
14707        }
14708        struct Visitor;
14709        impl<'de> serde::de::Visitor<'de> for Visitor {
14710            type Value = GetMachineRequest;
14711            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
14712                formatter.write_str("struct GetMachineRequest")
14713            }
14714            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
14715            where
14716                A: serde::de::MapAccess<'de>,
14717            {
14718                #[allow(unused_imports)]
14719                use serde::de::Error;
14720                use std::option::Option::Some;
14721                let mut fields = std::collections::HashSet::new();
14722                let mut result = Self::Value::new();
14723                while let Some(tag) = map.next_key::<__FieldTag>()? {
14724                    #[allow(clippy::match_single_binding)]
14725                    match tag {
14726                        __FieldTag::__name => {
14727                            if !fields.insert(__FieldTag::__name) {
14728                                return std::result::Result::Err(A::Error::duplicate_field(
14729                                    "multiple values for name",
14730                                ));
14731                            }
14732                            result.name = map
14733                                .next_value::<std::option::Option<std::string::String>>()?
14734                                .unwrap_or_default();
14735                        }
14736                        __FieldTag::Unknown(key) => {
14737                            let value = map.next_value::<serde_json::Value>()?;
14738                            result._unknown_fields.insert(key, value);
14739                        }
14740                    }
14741                }
14742                std::result::Result::Ok(result)
14743            }
14744        }
14745        deserializer.deserialize_any(Visitor)
14746    }
14747}
14748
14749#[doc(hidden)]
14750impl serde::ser::Serialize for GetMachineRequest {
14751    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
14752    where
14753        S: serde::ser::Serializer,
14754    {
14755        use serde::ser::SerializeMap;
14756        #[allow(unused_imports)]
14757        use std::option::Option::Some;
14758        let mut state = serializer.serialize_map(std::option::Option::None)?;
14759        if !self.name.is_empty() {
14760            state.serialize_entry("name", &self.name)?;
14761        }
14762        if !self._unknown_fields.is_empty() {
14763            for (key, value) in self._unknown_fields.iter() {
14764                state.serialize_entry(key, &value)?;
14765            }
14766        }
14767        state.end()
14768    }
14769}
14770
14771impl std::fmt::Debug for GetMachineRequest {
14772    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14773        let mut debug_struct = f.debug_struct("GetMachineRequest");
14774        debug_struct.field("name", &self.name);
14775        if !self._unknown_fields.is_empty() {
14776            debug_struct.field("_unknown_fields", &self._unknown_fields);
14777        }
14778        debug_struct.finish()
14779    }
14780}
14781
14782/// Lists VPN connections.
14783#[derive(Clone, Default, PartialEq)]
14784#[non_exhaustive]
14785pub struct ListVpnConnectionsRequest {
14786    /// Required. The parent location, which owns this collection of VPN
14787    /// connections.
14788    pub parent: std::string::String,
14789
14790    /// The maximum number of resources to list.
14791    pub page_size: i32,
14792
14793    /// A page token received from previous list request.
14794    pub page_token: std::string::String,
14795
14796    /// Only resources matching this filter will be listed.
14797    pub filter: std::string::String,
14798
14799    /// Specifies the order in which resources will be listed.
14800    pub order_by: std::string::String,
14801
14802    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
14803}
14804
14805impl ListVpnConnectionsRequest {
14806    pub fn new() -> Self {
14807        std::default::Default::default()
14808    }
14809
14810    /// Sets the value of [parent][crate::model::ListVpnConnectionsRequest::parent].
14811    pub fn set_parent<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
14812        self.parent = v.into();
14813        self
14814    }
14815
14816    /// Sets the value of [page_size][crate::model::ListVpnConnectionsRequest::page_size].
14817    pub fn set_page_size<T: std::convert::Into<i32>>(mut self, v: T) -> Self {
14818        self.page_size = v.into();
14819        self
14820    }
14821
14822    /// Sets the value of [page_token][crate::model::ListVpnConnectionsRequest::page_token].
14823    pub fn set_page_token<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
14824        self.page_token = v.into();
14825        self
14826    }
14827
14828    /// Sets the value of [filter][crate::model::ListVpnConnectionsRequest::filter].
14829    pub fn set_filter<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
14830        self.filter = v.into();
14831        self
14832    }
14833
14834    /// Sets the value of [order_by][crate::model::ListVpnConnectionsRequest::order_by].
14835    pub fn set_order_by<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
14836        self.order_by = v.into();
14837        self
14838    }
14839}
14840
14841impl wkt::message::Message for ListVpnConnectionsRequest {
14842    fn typename() -> &'static str {
14843        "type.googleapis.com/google.cloud.edgecontainer.v1.ListVpnConnectionsRequest"
14844    }
14845}
14846
14847#[doc(hidden)]
14848impl<'de> serde::de::Deserialize<'de> for ListVpnConnectionsRequest {
14849    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
14850    where
14851        D: serde::Deserializer<'de>,
14852    {
14853        #[allow(non_camel_case_types)]
14854        #[doc(hidden)]
14855        #[derive(PartialEq, Eq, Hash)]
14856        enum __FieldTag {
14857            __parent,
14858            __page_size,
14859            __page_token,
14860            __filter,
14861            __order_by,
14862            Unknown(std::string::String),
14863        }
14864        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
14865            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
14866            where
14867                D: serde::Deserializer<'de>,
14868            {
14869                struct Visitor;
14870                impl<'de> serde::de::Visitor<'de> for Visitor {
14871                    type Value = __FieldTag;
14872                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
14873                        formatter.write_str("a field name for ListVpnConnectionsRequest")
14874                    }
14875                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
14876                    where
14877                        E: serde::de::Error,
14878                    {
14879                        use std::result::Result::Ok;
14880                        use std::string::ToString;
14881                        match value {
14882                            "parent" => Ok(__FieldTag::__parent),
14883                            "pageSize" => Ok(__FieldTag::__page_size),
14884                            "page_size" => Ok(__FieldTag::__page_size),
14885                            "pageToken" => Ok(__FieldTag::__page_token),
14886                            "page_token" => Ok(__FieldTag::__page_token),
14887                            "filter" => Ok(__FieldTag::__filter),
14888                            "orderBy" => Ok(__FieldTag::__order_by),
14889                            "order_by" => Ok(__FieldTag::__order_by),
14890                            _ => Ok(__FieldTag::Unknown(value.to_string())),
14891                        }
14892                    }
14893                }
14894                deserializer.deserialize_identifier(Visitor)
14895            }
14896        }
14897        struct Visitor;
14898        impl<'de> serde::de::Visitor<'de> for Visitor {
14899            type Value = ListVpnConnectionsRequest;
14900            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
14901                formatter.write_str("struct ListVpnConnectionsRequest")
14902            }
14903            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
14904            where
14905                A: serde::de::MapAccess<'de>,
14906            {
14907                #[allow(unused_imports)]
14908                use serde::de::Error;
14909                use std::option::Option::Some;
14910                let mut fields = std::collections::HashSet::new();
14911                let mut result = Self::Value::new();
14912                while let Some(tag) = map.next_key::<__FieldTag>()? {
14913                    #[allow(clippy::match_single_binding)]
14914                    match tag {
14915                        __FieldTag::__parent => {
14916                            if !fields.insert(__FieldTag::__parent) {
14917                                return std::result::Result::Err(A::Error::duplicate_field(
14918                                    "multiple values for parent",
14919                                ));
14920                            }
14921                            result.parent = map
14922                                .next_value::<std::option::Option<std::string::String>>()?
14923                                .unwrap_or_default();
14924                        }
14925                        __FieldTag::__page_size => {
14926                            if !fields.insert(__FieldTag::__page_size) {
14927                                return std::result::Result::Err(A::Error::duplicate_field(
14928                                    "multiple values for page_size",
14929                                ));
14930                            }
14931                            struct __With(std::option::Option<i32>);
14932                            impl<'de> serde::de::Deserialize<'de> for __With {
14933                                fn deserialize<D>(
14934                                    deserializer: D,
14935                                ) -> std::result::Result<Self, D::Error>
14936                                where
14937                                    D: serde::de::Deserializer<'de>,
14938                                {
14939                                    serde_with::As::< std::option::Option<wkt::internal::I32> >::deserialize(deserializer).map(__With)
14940                                }
14941                            }
14942                            result.page_size = map.next_value::<__With>()?.0.unwrap_or_default();
14943                        }
14944                        __FieldTag::__page_token => {
14945                            if !fields.insert(__FieldTag::__page_token) {
14946                                return std::result::Result::Err(A::Error::duplicate_field(
14947                                    "multiple values for page_token",
14948                                ));
14949                            }
14950                            result.page_token = map
14951                                .next_value::<std::option::Option<std::string::String>>()?
14952                                .unwrap_or_default();
14953                        }
14954                        __FieldTag::__filter => {
14955                            if !fields.insert(__FieldTag::__filter) {
14956                                return std::result::Result::Err(A::Error::duplicate_field(
14957                                    "multiple values for filter",
14958                                ));
14959                            }
14960                            result.filter = map
14961                                .next_value::<std::option::Option<std::string::String>>()?
14962                                .unwrap_or_default();
14963                        }
14964                        __FieldTag::__order_by => {
14965                            if !fields.insert(__FieldTag::__order_by) {
14966                                return std::result::Result::Err(A::Error::duplicate_field(
14967                                    "multiple values for order_by",
14968                                ));
14969                            }
14970                            result.order_by = map
14971                                .next_value::<std::option::Option<std::string::String>>()?
14972                                .unwrap_or_default();
14973                        }
14974                        __FieldTag::Unknown(key) => {
14975                            let value = map.next_value::<serde_json::Value>()?;
14976                            result._unknown_fields.insert(key, value);
14977                        }
14978                    }
14979                }
14980                std::result::Result::Ok(result)
14981            }
14982        }
14983        deserializer.deserialize_any(Visitor)
14984    }
14985}
14986
14987#[doc(hidden)]
14988impl serde::ser::Serialize for ListVpnConnectionsRequest {
14989    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
14990    where
14991        S: serde::ser::Serializer,
14992    {
14993        use serde::ser::SerializeMap;
14994        #[allow(unused_imports)]
14995        use std::option::Option::Some;
14996        let mut state = serializer.serialize_map(std::option::Option::None)?;
14997        if !self.parent.is_empty() {
14998            state.serialize_entry("parent", &self.parent)?;
14999        }
15000        if !wkt::internal::is_default(&self.page_size) {
15001            struct __With<'a>(&'a i32);
15002            impl<'a> serde::ser::Serialize for __With<'a> {
15003                fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
15004                where
15005                    S: serde::ser::Serializer,
15006                {
15007                    serde_with::As::<wkt::internal::I32>::serialize(self.0, serializer)
15008                }
15009            }
15010            state.serialize_entry("pageSize", &__With(&self.page_size))?;
15011        }
15012        if !self.page_token.is_empty() {
15013            state.serialize_entry("pageToken", &self.page_token)?;
15014        }
15015        if !self.filter.is_empty() {
15016            state.serialize_entry("filter", &self.filter)?;
15017        }
15018        if !self.order_by.is_empty() {
15019            state.serialize_entry("orderBy", &self.order_by)?;
15020        }
15021        if !self._unknown_fields.is_empty() {
15022            for (key, value) in self._unknown_fields.iter() {
15023                state.serialize_entry(key, &value)?;
15024            }
15025        }
15026        state.end()
15027    }
15028}
15029
15030impl std::fmt::Debug for ListVpnConnectionsRequest {
15031    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15032        let mut debug_struct = f.debug_struct("ListVpnConnectionsRequest");
15033        debug_struct.field("parent", &self.parent);
15034        debug_struct.field("page_size", &self.page_size);
15035        debug_struct.field("page_token", &self.page_token);
15036        debug_struct.field("filter", &self.filter);
15037        debug_struct.field("order_by", &self.order_by);
15038        if !self._unknown_fields.is_empty() {
15039            debug_struct.field("_unknown_fields", &self._unknown_fields);
15040        }
15041        debug_struct.finish()
15042    }
15043}
15044
15045/// List of VPN connections in a location.
15046#[derive(Clone, Default, PartialEq)]
15047#[non_exhaustive]
15048pub struct ListVpnConnectionsResponse {
15049    /// VpnConnections in the location.
15050    pub vpn_connections: std::vec::Vec<crate::model::VpnConnection>,
15051
15052    /// A token to retrieve next page of results.
15053    pub next_page_token: std::string::String,
15054
15055    /// Locations that could not be reached.
15056    pub unreachable: std::vec::Vec<std::string::String>,
15057
15058    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
15059}
15060
15061impl ListVpnConnectionsResponse {
15062    pub fn new() -> Self {
15063        std::default::Default::default()
15064    }
15065
15066    /// Sets the value of [vpn_connections][crate::model::ListVpnConnectionsResponse::vpn_connections].
15067    pub fn set_vpn_connections<T, V>(mut self, v: T) -> Self
15068    where
15069        T: std::iter::IntoIterator<Item = V>,
15070        V: std::convert::Into<crate::model::VpnConnection>,
15071    {
15072        use std::iter::Iterator;
15073        self.vpn_connections = v.into_iter().map(|i| i.into()).collect();
15074        self
15075    }
15076
15077    /// Sets the value of [next_page_token][crate::model::ListVpnConnectionsResponse::next_page_token].
15078    pub fn set_next_page_token<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
15079        self.next_page_token = v.into();
15080        self
15081    }
15082
15083    /// Sets the value of [unreachable][crate::model::ListVpnConnectionsResponse::unreachable].
15084    pub fn set_unreachable<T, V>(mut self, v: T) -> Self
15085    where
15086        T: std::iter::IntoIterator<Item = V>,
15087        V: std::convert::Into<std::string::String>,
15088    {
15089        use std::iter::Iterator;
15090        self.unreachable = v.into_iter().map(|i| i.into()).collect();
15091        self
15092    }
15093}
15094
15095impl wkt::message::Message for ListVpnConnectionsResponse {
15096    fn typename() -> &'static str {
15097        "type.googleapis.com/google.cloud.edgecontainer.v1.ListVpnConnectionsResponse"
15098    }
15099}
15100
15101#[doc(hidden)]
15102impl gax::paginator::internal::PageableResponse for ListVpnConnectionsResponse {
15103    type PageItem = crate::model::VpnConnection;
15104
15105    fn items(self) -> std::vec::Vec<Self::PageItem> {
15106        self.vpn_connections
15107    }
15108
15109    fn next_page_token(&self) -> std::string::String {
15110        use std::clone::Clone;
15111        self.next_page_token.clone()
15112    }
15113}
15114
15115#[doc(hidden)]
15116impl<'de> serde::de::Deserialize<'de> for ListVpnConnectionsResponse {
15117    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
15118    where
15119        D: serde::Deserializer<'de>,
15120    {
15121        #[allow(non_camel_case_types)]
15122        #[doc(hidden)]
15123        #[derive(PartialEq, Eq, Hash)]
15124        enum __FieldTag {
15125            __vpn_connections,
15126            __next_page_token,
15127            __unreachable,
15128            Unknown(std::string::String),
15129        }
15130        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
15131            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
15132            where
15133                D: serde::Deserializer<'de>,
15134            {
15135                struct Visitor;
15136                impl<'de> serde::de::Visitor<'de> for Visitor {
15137                    type Value = __FieldTag;
15138                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
15139                        formatter.write_str("a field name for ListVpnConnectionsResponse")
15140                    }
15141                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
15142                    where
15143                        E: serde::de::Error,
15144                    {
15145                        use std::result::Result::Ok;
15146                        use std::string::ToString;
15147                        match value {
15148                            "vpnConnections" => Ok(__FieldTag::__vpn_connections),
15149                            "vpn_connections" => Ok(__FieldTag::__vpn_connections),
15150                            "nextPageToken" => Ok(__FieldTag::__next_page_token),
15151                            "next_page_token" => Ok(__FieldTag::__next_page_token),
15152                            "unreachable" => Ok(__FieldTag::__unreachable),
15153                            _ => Ok(__FieldTag::Unknown(value.to_string())),
15154                        }
15155                    }
15156                }
15157                deserializer.deserialize_identifier(Visitor)
15158            }
15159        }
15160        struct Visitor;
15161        impl<'de> serde::de::Visitor<'de> for Visitor {
15162            type Value = ListVpnConnectionsResponse;
15163            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
15164                formatter.write_str("struct ListVpnConnectionsResponse")
15165            }
15166            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
15167            where
15168                A: serde::de::MapAccess<'de>,
15169            {
15170                #[allow(unused_imports)]
15171                use serde::de::Error;
15172                use std::option::Option::Some;
15173                let mut fields = std::collections::HashSet::new();
15174                let mut result = Self::Value::new();
15175                while let Some(tag) = map.next_key::<__FieldTag>()? {
15176                    #[allow(clippy::match_single_binding)]
15177                    match tag {
15178                        __FieldTag::__vpn_connections => {
15179                            if !fields.insert(__FieldTag::__vpn_connections) {
15180                                return std::result::Result::Err(A::Error::duplicate_field(
15181                                    "multiple values for vpn_connections",
15182                                ));
15183                            }
15184                            result.vpn_connections = map.next_value::<std::option::Option<std::vec::Vec<crate::model::VpnConnection>>>()?.unwrap_or_default();
15185                        }
15186                        __FieldTag::__next_page_token => {
15187                            if !fields.insert(__FieldTag::__next_page_token) {
15188                                return std::result::Result::Err(A::Error::duplicate_field(
15189                                    "multiple values for next_page_token",
15190                                ));
15191                            }
15192                            result.next_page_token = map
15193                                .next_value::<std::option::Option<std::string::String>>()?
15194                                .unwrap_or_default();
15195                        }
15196                        __FieldTag::__unreachable => {
15197                            if !fields.insert(__FieldTag::__unreachable) {
15198                                return std::result::Result::Err(A::Error::duplicate_field(
15199                                    "multiple values for unreachable",
15200                                ));
15201                            }
15202                            result.unreachable = map.next_value::<std::option::Option<std::vec::Vec<std::string::String>>>()?.unwrap_or_default();
15203                        }
15204                        __FieldTag::Unknown(key) => {
15205                            let value = map.next_value::<serde_json::Value>()?;
15206                            result._unknown_fields.insert(key, value);
15207                        }
15208                    }
15209                }
15210                std::result::Result::Ok(result)
15211            }
15212        }
15213        deserializer.deserialize_any(Visitor)
15214    }
15215}
15216
15217#[doc(hidden)]
15218impl serde::ser::Serialize for ListVpnConnectionsResponse {
15219    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
15220    where
15221        S: serde::ser::Serializer,
15222    {
15223        use serde::ser::SerializeMap;
15224        #[allow(unused_imports)]
15225        use std::option::Option::Some;
15226        let mut state = serializer.serialize_map(std::option::Option::None)?;
15227        if !self.vpn_connections.is_empty() {
15228            state.serialize_entry("vpnConnections", &self.vpn_connections)?;
15229        }
15230        if !self.next_page_token.is_empty() {
15231            state.serialize_entry("nextPageToken", &self.next_page_token)?;
15232        }
15233        if !self.unreachable.is_empty() {
15234            state.serialize_entry("unreachable", &self.unreachable)?;
15235        }
15236        if !self._unknown_fields.is_empty() {
15237            for (key, value) in self._unknown_fields.iter() {
15238                state.serialize_entry(key, &value)?;
15239            }
15240        }
15241        state.end()
15242    }
15243}
15244
15245impl std::fmt::Debug for ListVpnConnectionsResponse {
15246    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15247        let mut debug_struct = f.debug_struct("ListVpnConnectionsResponse");
15248        debug_struct.field("vpn_connections", &self.vpn_connections);
15249        debug_struct.field("next_page_token", &self.next_page_token);
15250        debug_struct.field("unreachable", &self.unreachable);
15251        if !self._unknown_fields.is_empty() {
15252            debug_struct.field("_unknown_fields", &self._unknown_fields);
15253        }
15254        debug_struct.finish()
15255    }
15256}
15257
15258/// Gets a VPN connection.
15259#[derive(Clone, Default, PartialEq)]
15260#[non_exhaustive]
15261pub struct GetVpnConnectionRequest {
15262    /// Required. The resource name of the vpn connection.
15263    pub name: std::string::String,
15264
15265    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
15266}
15267
15268impl GetVpnConnectionRequest {
15269    pub fn new() -> Self {
15270        std::default::Default::default()
15271    }
15272
15273    /// Sets the value of [name][crate::model::GetVpnConnectionRequest::name].
15274    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
15275        self.name = v.into();
15276        self
15277    }
15278}
15279
15280impl wkt::message::Message for GetVpnConnectionRequest {
15281    fn typename() -> &'static str {
15282        "type.googleapis.com/google.cloud.edgecontainer.v1.GetVpnConnectionRequest"
15283    }
15284}
15285
15286#[doc(hidden)]
15287impl<'de> serde::de::Deserialize<'de> for GetVpnConnectionRequest {
15288    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
15289    where
15290        D: serde::Deserializer<'de>,
15291    {
15292        #[allow(non_camel_case_types)]
15293        #[doc(hidden)]
15294        #[derive(PartialEq, Eq, Hash)]
15295        enum __FieldTag {
15296            __name,
15297            Unknown(std::string::String),
15298        }
15299        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
15300            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
15301            where
15302                D: serde::Deserializer<'de>,
15303            {
15304                struct Visitor;
15305                impl<'de> serde::de::Visitor<'de> for Visitor {
15306                    type Value = __FieldTag;
15307                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
15308                        formatter.write_str("a field name for GetVpnConnectionRequest")
15309                    }
15310                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
15311                    where
15312                        E: serde::de::Error,
15313                    {
15314                        use std::result::Result::Ok;
15315                        use std::string::ToString;
15316                        match value {
15317                            "name" => Ok(__FieldTag::__name),
15318                            _ => Ok(__FieldTag::Unknown(value.to_string())),
15319                        }
15320                    }
15321                }
15322                deserializer.deserialize_identifier(Visitor)
15323            }
15324        }
15325        struct Visitor;
15326        impl<'de> serde::de::Visitor<'de> for Visitor {
15327            type Value = GetVpnConnectionRequest;
15328            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
15329                formatter.write_str("struct GetVpnConnectionRequest")
15330            }
15331            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
15332            where
15333                A: serde::de::MapAccess<'de>,
15334            {
15335                #[allow(unused_imports)]
15336                use serde::de::Error;
15337                use std::option::Option::Some;
15338                let mut fields = std::collections::HashSet::new();
15339                let mut result = Self::Value::new();
15340                while let Some(tag) = map.next_key::<__FieldTag>()? {
15341                    #[allow(clippy::match_single_binding)]
15342                    match tag {
15343                        __FieldTag::__name => {
15344                            if !fields.insert(__FieldTag::__name) {
15345                                return std::result::Result::Err(A::Error::duplicate_field(
15346                                    "multiple values for name",
15347                                ));
15348                            }
15349                            result.name = map
15350                                .next_value::<std::option::Option<std::string::String>>()?
15351                                .unwrap_or_default();
15352                        }
15353                        __FieldTag::Unknown(key) => {
15354                            let value = map.next_value::<serde_json::Value>()?;
15355                            result._unknown_fields.insert(key, value);
15356                        }
15357                    }
15358                }
15359                std::result::Result::Ok(result)
15360            }
15361        }
15362        deserializer.deserialize_any(Visitor)
15363    }
15364}
15365
15366#[doc(hidden)]
15367impl serde::ser::Serialize for GetVpnConnectionRequest {
15368    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
15369    where
15370        S: serde::ser::Serializer,
15371    {
15372        use serde::ser::SerializeMap;
15373        #[allow(unused_imports)]
15374        use std::option::Option::Some;
15375        let mut state = serializer.serialize_map(std::option::Option::None)?;
15376        if !self.name.is_empty() {
15377            state.serialize_entry("name", &self.name)?;
15378        }
15379        if !self._unknown_fields.is_empty() {
15380            for (key, value) in self._unknown_fields.iter() {
15381                state.serialize_entry(key, &value)?;
15382            }
15383        }
15384        state.end()
15385    }
15386}
15387
15388impl std::fmt::Debug for GetVpnConnectionRequest {
15389    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15390        let mut debug_struct = f.debug_struct("GetVpnConnectionRequest");
15391        debug_struct.field("name", &self.name);
15392        if !self._unknown_fields.is_empty() {
15393            debug_struct.field("_unknown_fields", &self._unknown_fields);
15394        }
15395        debug_struct.finish()
15396    }
15397}
15398
15399/// Creates a VPN connection.
15400#[derive(Clone, Default, PartialEq)]
15401#[non_exhaustive]
15402pub struct CreateVpnConnectionRequest {
15403    /// Required. The parent location where this vpn connection will be created.
15404    pub parent: std::string::String,
15405
15406    /// Required. The VPN connection identifier.
15407    pub vpn_connection_id: std::string::String,
15408
15409    /// Required. The VPN connection to create.
15410    pub vpn_connection: std::option::Option<crate::model::VpnConnection>,
15411
15412    /// A unique identifier for this request. Restricted to 36 ASCII characters. A
15413    /// random UUID is recommended. This request is only idempotent if
15414    /// `request_id` is provided.
15415    pub request_id: std::string::String,
15416
15417    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
15418}
15419
15420impl CreateVpnConnectionRequest {
15421    pub fn new() -> Self {
15422        std::default::Default::default()
15423    }
15424
15425    /// Sets the value of [parent][crate::model::CreateVpnConnectionRequest::parent].
15426    pub fn set_parent<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
15427        self.parent = v.into();
15428        self
15429    }
15430
15431    /// Sets the value of [vpn_connection_id][crate::model::CreateVpnConnectionRequest::vpn_connection_id].
15432    pub fn set_vpn_connection_id<T: std::convert::Into<std::string::String>>(
15433        mut self,
15434        v: T,
15435    ) -> Self {
15436        self.vpn_connection_id = v.into();
15437        self
15438    }
15439
15440    /// Sets the value of [vpn_connection][crate::model::CreateVpnConnectionRequest::vpn_connection].
15441    pub fn set_vpn_connection<T>(mut self, v: T) -> Self
15442    where
15443        T: std::convert::Into<crate::model::VpnConnection>,
15444    {
15445        self.vpn_connection = std::option::Option::Some(v.into());
15446        self
15447    }
15448
15449    /// Sets or clears the value of [vpn_connection][crate::model::CreateVpnConnectionRequest::vpn_connection].
15450    pub fn set_or_clear_vpn_connection<T>(mut self, v: std::option::Option<T>) -> Self
15451    where
15452        T: std::convert::Into<crate::model::VpnConnection>,
15453    {
15454        self.vpn_connection = v.map(|x| x.into());
15455        self
15456    }
15457
15458    /// Sets the value of [request_id][crate::model::CreateVpnConnectionRequest::request_id].
15459    pub fn set_request_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
15460        self.request_id = v.into();
15461        self
15462    }
15463}
15464
15465impl wkt::message::Message for CreateVpnConnectionRequest {
15466    fn typename() -> &'static str {
15467        "type.googleapis.com/google.cloud.edgecontainer.v1.CreateVpnConnectionRequest"
15468    }
15469}
15470
15471#[doc(hidden)]
15472impl<'de> serde::de::Deserialize<'de> for CreateVpnConnectionRequest {
15473    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
15474    where
15475        D: serde::Deserializer<'de>,
15476    {
15477        #[allow(non_camel_case_types)]
15478        #[doc(hidden)]
15479        #[derive(PartialEq, Eq, Hash)]
15480        enum __FieldTag {
15481            __parent,
15482            __vpn_connection_id,
15483            __vpn_connection,
15484            __request_id,
15485            Unknown(std::string::String),
15486        }
15487        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
15488            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
15489            where
15490                D: serde::Deserializer<'de>,
15491            {
15492                struct Visitor;
15493                impl<'de> serde::de::Visitor<'de> for Visitor {
15494                    type Value = __FieldTag;
15495                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
15496                        formatter.write_str("a field name for CreateVpnConnectionRequest")
15497                    }
15498                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
15499                    where
15500                        E: serde::de::Error,
15501                    {
15502                        use std::result::Result::Ok;
15503                        use std::string::ToString;
15504                        match value {
15505                            "parent" => Ok(__FieldTag::__parent),
15506                            "vpnConnectionId" => Ok(__FieldTag::__vpn_connection_id),
15507                            "vpn_connection_id" => Ok(__FieldTag::__vpn_connection_id),
15508                            "vpnConnection" => Ok(__FieldTag::__vpn_connection),
15509                            "vpn_connection" => Ok(__FieldTag::__vpn_connection),
15510                            "requestId" => Ok(__FieldTag::__request_id),
15511                            "request_id" => Ok(__FieldTag::__request_id),
15512                            _ => Ok(__FieldTag::Unknown(value.to_string())),
15513                        }
15514                    }
15515                }
15516                deserializer.deserialize_identifier(Visitor)
15517            }
15518        }
15519        struct Visitor;
15520        impl<'de> serde::de::Visitor<'de> for Visitor {
15521            type Value = CreateVpnConnectionRequest;
15522            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
15523                formatter.write_str("struct CreateVpnConnectionRequest")
15524            }
15525            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
15526            where
15527                A: serde::de::MapAccess<'de>,
15528            {
15529                #[allow(unused_imports)]
15530                use serde::de::Error;
15531                use std::option::Option::Some;
15532                let mut fields = std::collections::HashSet::new();
15533                let mut result = Self::Value::new();
15534                while let Some(tag) = map.next_key::<__FieldTag>()? {
15535                    #[allow(clippy::match_single_binding)]
15536                    match tag {
15537                        __FieldTag::__parent => {
15538                            if !fields.insert(__FieldTag::__parent) {
15539                                return std::result::Result::Err(A::Error::duplicate_field(
15540                                    "multiple values for parent",
15541                                ));
15542                            }
15543                            result.parent = map
15544                                .next_value::<std::option::Option<std::string::String>>()?
15545                                .unwrap_or_default();
15546                        }
15547                        __FieldTag::__vpn_connection_id => {
15548                            if !fields.insert(__FieldTag::__vpn_connection_id) {
15549                                return std::result::Result::Err(A::Error::duplicate_field(
15550                                    "multiple values for vpn_connection_id",
15551                                ));
15552                            }
15553                            result.vpn_connection_id = map
15554                                .next_value::<std::option::Option<std::string::String>>()?
15555                                .unwrap_or_default();
15556                        }
15557                        __FieldTag::__vpn_connection => {
15558                            if !fields.insert(__FieldTag::__vpn_connection) {
15559                                return std::result::Result::Err(A::Error::duplicate_field(
15560                                    "multiple values for vpn_connection",
15561                                ));
15562                            }
15563                            result.vpn_connection = map
15564                                .next_value::<std::option::Option<crate::model::VpnConnection>>()?;
15565                        }
15566                        __FieldTag::__request_id => {
15567                            if !fields.insert(__FieldTag::__request_id) {
15568                                return std::result::Result::Err(A::Error::duplicate_field(
15569                                    "multiple values for request_id",
15570                                ));
15571                            }
15572                            result.request_id = map
15573                                .next_value::<std::option::Option<std::string::String>>()?
15574                                .unwrap_or_default();
15575                        }
15576                        __FieldTag::Unknown(key) => {
15577                            let value = map.next_value::<serde_json::Value>()?;
15578                            result._unknown_fields.insert(key, value);
15579                        }
15580                    }
15581                }
15582                std::result::Result::Ok(result)
15583            }
15584        }
15585        deserializer.deserialize_any(Visitor)
15586    }
15587}
15588
15589#[doc(hidden)]
15590impl serde::ser::Serialize for CreateVpnConnectionRequest {
15591    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
15592    where
15593        S: serde::ser::Serializer,
15594    {
15595        use serde::ser::SerializeMap;
15596        #[allow(unused_imports)]
15597        use std::option::Option::Some;
15598        let mut state = serializer.serialize_map(std::option::Option::None)?;
15599        if !self.parent.is_empty() {
15600            state.serialize_entry("parent", &self.parent)?;
15601        }
15602        if !self.vpn_connection_id.is_empty() {
15603            state.serialize_entry("vpnConnectionId", &self.vpn_connection_id)?;
15604        }
15605        if self.vpn_connection.is_some() {
15606            state.serialize_entry("vpnConnection", &self.vpn_connection)?;
15607        }
15608        if !self.request_id.is_empty() {
15609            state.serialize_entry("requestId", &self.request_id)?;
15610        }
15611        if !self._unknown_fields.is_empty() {
15612            for (key, value) in self._unknown_fields.iter() {
15613                state.serialize_entry(key, &value)?;
15614            }
15615        }
15616        state.end()
15617    }
15618}
15619
15620impl std::fmt::Debug for CreateVpnConnectionRequest {
15621    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15622        let mut debug_struct = f.debug_struct("CreateVpnConnectionRequest");
15623        debug_struct.field("parent", &self.parent);
15624        debug_struct.field("vpn_connection_id", &self.vpn_connection_id);
15625        debug_struct.field("vpn_connection", &self.vpn_connection);
15626        debug_struct.field("request_id", &self.request_id);
15627        if !self._unknown_fields.is_empty() {
15628            debug_struct.field("_unknown_fields", &self._unknown_fields);
15629        }
15630        debug_struct.finish()
15631    }
15632}
15633
15634/// Deletes a vpn connection.
15635#[derive(Clone, Default, PartialEq)]
15636#[non_exhaustive]
15637pub struct DeleteVpnConnectionRequest {
15638    /// Required. The resource name of the vpn connection.
15639    pub name: std::string::String,
15640
15641    /// A unique identifier for this request. Restricted to 36 ASCII characters. A
15642    /// random UUID is recommended. This request is only idempotent if
15643    /// `request_id` is provided.
15644    pub request_id: std::string::String,
15645
15646    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
15647}
15648
15649impl DeleteVpnConnectionRequest {
15650    pub fn new() -> Self {
15651        std::default::Default::default()
15652    }
15653
15654    /// Sets the value of [name][crate::model::DeleteVpnConnectionRequest::name].
15655    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
15656        self.name = v.into();
15657        self
15658    }
15659
15660    /// Sets the value of [request_id][crate::model::DeleteVpnConnectionRequest::request_id].
15661    pub fn set_request_id<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
15662        self.request_id = v.into();
15663        self
15664    }
15665}
15666
15667impl wkt::message::Message for DeleteVpnConnectionRequest {
15668    fn typename() -> &'static str {
15669        "type.googleapis.com/google.cloud.edgecontainer.v1.DeleteVpnConnectionRequest"
15670    }
15671}
15672
15673#[doc(hidden)]
15674impl<'de> serde::de::Deserialize<'de> for DeleteVpnConnectionRequest {
15675    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
15676    where
15677        D: serde::Deserializer<'de>,
15678    {
15679        #[allow(non_camel_case_types)]
15680        #[doc(hidden)]
15681        #[derive(PartialEq, Eq, Hash)]
15682        enum __FieldTag {
15683            __name,
15684            __request_id,
15685            Unknown(std::string::String),
15686        }
15687        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
15688            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
15689            where
15690                D: serde::Deserializer<'de>,
15691            {
15692                struct Visitor;
15693                impl<'de> serde::de::Visitor<'de> for Visitor {
15694                    type Value = __FieldTag;
15695                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
15696                        formatter.write_str("a field name for DeleteVpnConnectionRequest")
15697                    }
15698                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
15699                    where
15700                        E: serde::de::Error,
15701                    {
15702                        use std::result::Result::Ok;
15703                        use std::string::ToString;
15704                        match value {
15705                            "name" => Ok(__FieldTag::__name),
15706                            "requestId" => Ok(__FieldTag::__request_id),
15707                            "request_id" => Ok(__FieldTag::__request_id),
15708                            _ => Ok(__FieldTag::Unknown(value.to_string())),
15709                        }
15710                    }
15711                }
15712                deserializer.deserialize_identifier(Visitor)
15713            }
15714        }
15715        struct Visitor;
15716        impl<'de> serde::de::Visitor<'de> for Visitor {
15717            type Value = DeleteVpnConnectionRequest;
15718            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
15719                formatter.write_str("struct DeleteVpnConnectionRequest")
15720            }
15721            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
15722            where
15723                A: serde::de::MapAccess<'de>,
15724            {
15725                #[allow(unused_imports)]
15726                use serde::de::Error;
15727                use std::option::Option::Some;
15728                let mut fields = std::collections::HashSet::new();
15729                let mut result = Self::Value::new();
15730                while let Some(tag) = map.next_key::<__FieldTag>()? {
15731                    #[allow(clippy::match_single_binding)]
15732                    match tag {
15733                        __FieldTag::__name => {
15734                            if !fields.insert(__FieldTag::__name) {
15735                                return std::result::Result::Err(A::Error::duplicate_field(
15736                                    "multiple values for name",
15737                                ));
15738                            }
15739                            result.name = map
15740                                .next_value::<std::option::Option<std::string::String>>()?
15741                                .unwrap_or_default();
15742                        }
15743                        __FieldTag::__request_id => {
15744                            if !fields.insert(__FieldTag::__request_id) {
15745                                return std::result::Result::Err(A::Error::duplicate_field(
15746                                    "multiple values for request_id",
15747                                ));
15748                            }
15749                            result.request_id = map
15750                                .next_value::<std::option::Option<std::string::String>>()?
15751                                .unwrap_or_default();
15752                        }
15753                        __FieldTag::Unknown(key) => {
15754                            let value = map.next_value::<serde_json::Value>()?;
15755                            result._unknown_fields.insert(key, value);
15756                        }
15757                    }
15758                }
15759                std::result::Result::Ok(result)
15760            }
15761        }
15762        deserializer.deserialize_any(Visitor)
15763    }
15764}
15765
15766#[doc(hidden)]
15767impl serde::ser::Serialize for DeleteVpnConnectionRequest {
15768    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
15769    where
15770        S: serde::ser::Serializer,
15771    {
15772        use serde::ser::SerializeMap;
15773        #[allow(unused_imports)]
15774        use std::option::Option::Some;
15775        let mut state = serializer.serialize_map(std::option::Option::None)?;
15776        if !self.name.is_empty() {
15777            state.serialize_entry("name", &self.name)?;
15778        }
15779        if !self.request_id.is_empty() {
15780            state.serialize_entry("requestId", &self.request_id)?;
15781        }
15782        if !self._unknown_fields.is_empty() {
15783            for (key, value) in self._unknown_fields.iter() {
15784                state.serialize_entry(key, &value)?;
15785            }
15786        }
15787        state.end()
15788    }
15789}
15790
15791impl std::fmt::Debug for DeleteVpnConnectionRequest {
15792    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15793        let mut debug_struct = f.debug_struct("DeleteVpnConnectionRequest");
15794        debug_struct.field("name", &self.name);
15795        debug_struct.field("request_id", &self.request_id);
15796        if !self._unknown_fields.is_empty() {
15797            debug_struct.field("_unknown_fields", &self._unknown_fields);
15798        }
15799        debug_struct.finish()
15800    }
15801}
15802
15803/// Gets the server config.
15804#[derive(Clone, Default, PartialEq)]
15805#[non_exhaustive]
15806pub struct GetServerConfigRequest {
15807    /// Required. The name (project and location) of the server config to get,
15808    /// specified in the format `projects/*/locations/*`.
15809    pub name: std::string::String,
15810
15811    _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
15812}
15813
15814impl GetServerConfigRequest {
15815    pub fn new() -> Self {
15816        std::default::Default::default()
15817    }
15818
15819    /// Sets the value of [name][crate::model::GetServerConfigRequest::name].
15820    pub fn set_name<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
15821        self.name = v.into();
15822        self
15823    }
15824}
15825
15826impl wkt::message::Message for GetServerConfigRequest {
15827    fn typename() -> &'static str {
15828        "type.googleapis.com/google.cloud.edgecontainer.v1.GetServerConfigRequest"
15829    }
15830}
15831
15832#[doc(hidden)]
15833impl<'de> serde::de::Deserialize<'de> for GetServerConfigRequest {
15834    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
15835    where
15836        D: serde::Deserializer<'de>,
15837    {
15838        #[allow(non_camel_case_types)]
15839        #[doc(hidden)]
15840        #[derive(PartialEq, Eq, Hash)]
15841        enum __FieldTag {
15842            __name,
15843            Unknown(std::string::String),
15844        }
15845        impl<'de> serde::de::Deserialize<'de> for __FieldTag {
15846            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
15847            where
15848                D: serde::Deserializer<'de>,
15849            {
15850                struct Visitor;
15851                impl<'de> serde::de::Visitor<'de> for Visitor {
15852                    type Value = __FieldTag;
15853                    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
15854                        formatter.write_str("a field name for GetServerConfigRequest")
15855                    }
15856                    fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
15857                    where
15858                        E: serde::de::Error,
15859                    {
15860                        use std::result::Result::Ok;
15861                        use std::string::ToString;
15862                        match value {
15863                            "name" => Ok(__FieldTag::__name),
15864                            _ => Ok(__FieldTag::Unknown(value.to_string())),
15865                        }
15866                    }
15867                }
15868                deserializer.deserialize_identifier(Visitor)
15869            }
15870        }
15871        struct Visitor;
15872        impl<'de> serde::de::Visitor<'de> for Visitor {
15873            type Value = GetServerConfigRequest;
15874            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
15875                formatter.write_str("struct GetServerConfigRequest")
15876            }
15877            fn visit_map<A>(self, mut map: A) -> std::result::Result<Self::Value, A::Error>
15878            where
15879                A: serde::de::MapAccess<'de>,
15880            {
15881                #[allow(unused_imports)]
15882                use serde::de::Error;
15883                use std::option::Option::Some;
15884                let mut fields = std::collections::HashSet::new();
15885                let mut result = Self::Value::new();
15886                while let Some(tag) = map.next_key::<__FieldTag>()? {
15887                    #[allow(clippy::match_single_binding)]
15888                    match tag {
15889                        __FieldTag::__name => {
15890                            if !fields.insert(__FieldTag::__name) {
15891                                return std::result::Result::Err(A::Error::duplicate_field(
15892                                    "multiple values for name",
15893                                ));
15894                            }
15895                            result.name = map
15896                                .next_value::<std::option::Option<std::string::String>>()?
15897                                .unwrap_or_default();
15898                        }
15899                        __FieldTag::Unknown(key) => {
15900                            let value = map.next_value::<serde_json::Value>()?;
15901                            result._unknown_fields.insert(key, value);
15902                        }
15903                    }
15904                }
15905                std::result::Result::Ok(result)
15906            }
15907        }
15908        deserializer.deserialize_any(Visitor)
15909    }
15910}
15911
15912#[doc(hidden)]
15913impl serde::ser::Serialize for GetServerConfigRequest {
15914    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
15915    where
15916        S: serde::ser::Serializer,
15917    {
15918        use serde::ser::SerializeMap;
15919        #[allow(unused_imports)]
15920        use std::option::Option::Some;
15921        let mut state = serializer.serialize_map(std::option::Option::None)?;
15922        if !self.name.is_empty() {
15923            state.serialize_entry("name", &self.name)?;
15924        }
15925        if !self._unknown_fields.is_empty() {
15926            for (key, value) in self._unknown_fields.iter() {
15927                state.serialize_entry(key, &value)?;
15928            }
15929        }
15930        state.end()
15931    }
15932}
15933
15934impl std::fmt::Debug for GetServerConfigRequest {
15935    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15936        let mut debug_struct = f.debug_struct("GetServerConfigRequest");
15937        debug_struct.field("name", &self.name);
15938        if !self._unknown_fields.is_empty() {
15939            debug_struct.field("_unknown_fields", &self._unknown_fields);
15940        }
15941        debug_struct.finish()
15942    }
15943}
15944
15945/// Represents the accessibility state of a customer-managed KMS key used for
15946/// CMEK integration.
15947///
15948/// # Working with unknown values
15949///
15950/// This enum is defined as `#[non_exhaustive]` because Google Cloud may add
15951/// additional enum variants at any time. Adding new variants is not considered
15952/// a breaking change. Applications should write their code in anticipation of:
15953///
15954/// - New values appearing in future releases of the client library, **and**
15955/// - New values received dynamically, without application changes.
15956///
15957/// Please consult the [Working with enums] section in the user guide for some
15958/// guidelines.
15959///
15960/// [Working with enums]: https://google-cloud-rust.github.io/working_with_enums.html
15961#[derive(Clone, Debug, PartialEq)]
15962#[non_exhaustive]
15963pub enum KmsKeyState {
15964    /// Unspecified.
15965    Unspecified,
15966    /// The key is available for use, and dependent resources should be accessible.
15967    KeyAvailable,
15968    /// The key is unavailable for an unspecified reason. Dependent resources may
15969    /// be inaccessible.
15970    KeyUnavailable,
15971    /// If set, the enum was initialized with an unknown value.
15972    ///
15973    /// Applications can examine the value using [KmsKeyState::value] or
15974    /// [KmsKeyState::name].
15975    UnknownValue(kms_key_state::UnknownValue),
15976}
15977
15978#[doc(hidden)]
15979pub mod kms_key_state {
15980    #[allow(unused_imports)]
15981    use super::*;
15982    #[derive(Clone, Debug, PartialEq)]
15983    pub struct UnknownValue(pub(crate) wkt::internal::UnknownEnumValue);
15984}
15985
15986impl KmsKeyState {
15987    /// Gets the enum value.
15988    ///
15989    /// Returns `None` if the enum contains an unknown value deserialized from
15990    /// the string representation of enums.
15991    pub fn value(&self) -> std::option::Option<i32> {
15992        match self {
15993            Self::Unspecified => std::option::Option::Some(0),
15994            Self::KeyAvailable => std::option::Option::Some(1),
15995            Self::KeyUnavailable => std::option::Option::Some(2),
15996            Self::UnknownValue(u) => u.0.value(),
15997        }
15998    }
15999
16000    /// Gets the enum value as a string.
16001    ///
16002    /// Returns `None` if the enum contains an unknown value deserialized from
16003    /// the integer representation of enums.
16004    pub fn name(&self) -> std::option::Option<&str> {
16005        match self {
16006            Self::Unspecified => std::option::Option::Some("KMS_KEY_STATE_UNSPECIFIED"),
16007            Self::KeyAvailable => std::option::Option::Some("KMS_KEY_STATE_KEY_AVAILABLE"),
16008            Self::KeyUnavailable => std::option::Option::Some("KMS_KEY_STATE_KEY_UNAVAILABLE"),
16009            Self::UnknownValue(u) => u.0.name(),
16010        }
16011    }
16012}
16013
16014impl std::default::Default for KmsKeyState {
16015    fn default() -> Self {
16016        use std::convert::From;
16017        Self::from(0)
16018    }
16019}
16020
16021impl std::fmt::Display for KmsKeyState {
16022    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
16023        wkt::internal::display_enum(f, self.name(), self.value())
16024    }
16025}
16026
16027impl std::convert::From<i32> for KmsKeyState {
16028    fn from(value: i32) -> Self {
16029        match value {
16030            0 => Self::Unspecified,
16031            1 => Self::KeyAvailable,
16032            2 => Self::KeyUnavailable,
16033            _ => Self::UnknownValue(kms_key_state::UnknownValue(
16034                wkt::internal::UnknownEnumValue::Integer(value),
16035            )),
16036        }
16037    }
16038}
16039
16040impl std::convert::From<&str> for KmsKeyState {
16041    fn from(value: &str) -> Self {
16042        use std::string::ToString;
16043        match value {
16044            "KMS_KEY_STATE_UNSPECIFIED" => Self::Unspecified,
16045            "KMS_KEY_STATE_KEY_AVAILABLE" => Self::KeyAvailable,
16046            "KMS_KEY_STATE_KEY_UNAVAILABLE" => Self::KeyUnavailable,
16047            _ => Self::UnknownValue(kms_key_state::UnknownValue(
16048                wkt::internal::UnknownEnumValue::String(value.to_string()),
16049            )),
16050        }
16051    }
16052}
16053
16054impl serde::ser::Serialize for KmsKeyState {
16055    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
16056    where
16057        S: serde::Serializer,
16058    {
16059        match self {
16060            Self::Unspecified => serializer.serialize_i32(0),
16061            Self::KeyAvailable => serializer.serialize_i32(1),
16062            Self::KeyUnavailable => serializer.serialize_i32(2),
16063            Self::UnknownValue(u) => u.0.serialize(serializer),
16064        }
16065    }
16066}
16067
16068impl<'de> serde::de::Deserialize<'de> for KmsKeyState {
16069    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
16070    where
16071        D: serde::Deserializer<'de>,
16072    {
16073        deserializer.deserialize_any(wkt::internal::EnumVisitor::<KmsKeyState>::new(
16074            ".google.cloud.edgecontainer.v1.KmsKeyState",
16075        ))
16076    }
16077}
16078
16079/// Represents if the resource is in lock down state or pending.
16080///
16081/// # Working with unknown values
16082///
16083/// This enum is defined as `#[non_exhaustive]` because Google Cloud may add
16084/// additional enum variants at any time. Adding new variants is not considered
16085/// a breaking change. Applications should write their code in anticipation of:
16086///
16087/// - New values appearing in future releases of the client library, **and**
16088/// - New values received dynamically, without application changes.
16089///
16090/// Please consult the [Working with enums] section in the user guide for some
16091/// guidelines.
16092///
16093/// [Working with enums]: https://google-cloud-rust.github.io/working_with_enums.html
16094#[derive(Clone, Debug, PartialEq)]
16095#[non_exhaustive]
16096pub enum ResourceState {
16097    /// Default value.
16098    Unspecified,
16099    /// The resource is in LOCK DOWN state.
16100    LockDown,
16101    /// The resource is pending lock down.
16102    LockDownPending,
16103    /// If set, the enum was initialized with an unknown value.
16104    ///
16105    /// Applications can examine the value using [ResourceState::value] or
16106    /// [ResourceState::name].
16107    UnknownValue(resource_state::UnknownValue),
16108}
16109
16110#[doc(hidden)]
16111pub mod resource_state {
16112    #[allow(unused_imports)]
16113    use super::*;
16114    #[derive(Clone, Debug, PartialEq)]
16115    pub struct UnknownValue(pub(crate) wkt::internal::UnknownEnumValue);
16116}
16117
16118impl ResourceState {
16119    /// Gets the enum value.
16120    ///
16121    /// Returns `None` if the enum contains an unknown value deserialized from
16122    /// the string representation of enums.
16123    pub fn value(&self) -> std::option::Option<i32> {
16124        match self {
16125            Self::Unspecified => std::option::Option::Some(0),
16126            Self::LockDown => std::option::Option::Some(1),
16127            Self::LockDownPending => std::option::Option::Some(2),
16128            Self::UnknownValue(u) => u.0.value(),
16129        }
16130    }
16131
16132    /// Gets the enum value as a string.
16133    ///
16134    /// Returns `None` if the enum contains an unknown value deserialized from
16135    /// the integer representation of enums.
16136    pub fn name(&self) -> std::option::Option<&str> {
16137        match self {
16138            Self::Unspecified => std::option::Option::Some("RESOURCE_STATE_UNSPECIFIED"),
16139            Self::LockDown => std::option::Option::Some("RESOURCE_STATE_LOCK_DOWN"),
16140            Self::LockDownPending => std::option::Option::Some("RESOURCE_STATE_LOCK_DOWN_PENDING"),
16141            Self::UnknownValue(u) => u.0.name(),
16142        }
16143    }
16144}
16145
16146impl std::default::Default for ResourceState {
16147    fn default() -> Self {
16148        use std::convert::From;
16149        Self::from(0)
16150    }
16151}
16152
16153impl std::fmt::Display for ResourceState {
16154    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
16155        wkt::internal::display_enum(f, self.name(), self.value())
16156    }
16157}
16158
16159impl std::convert::From<i32> for ResourceState {
16160    fn from(value: i32) -> Self {
16161        match value {
16162            0 => Self::Unspecified,
16163            1 => Self::LockDown,
16164            2 => Self::LockDownPending,
16165            _ => Self::UnknownValue(resource_state::UnknownValue(
16166                wkt::internal::UnknownEnumValue::Integer(value),
16167            )),
16168        }
16169    }
16170}
16171
16172impl std::convert::From<&str> for ResourceState {
16173    fn from(value: &str) -> Self {
16174        use std::string::ToString;
16175        match value {
16176            "RESOURCE_STATE_UNSPECIFIED" => Self::Unspecified,
16177            "RESOURCE_STATE_LOCK_DOWN" => Self::LockDown,
16178            "RESOURCE_STATE_LOCK_DOWN_PENDING" => Self::LockDownPending,
16179            _ => Self::UnknownValue(resource_state::UnknownValue(
16180                wkt::internal::UnknownEnumValue::String(value.to_string()),
16181            )),
16182        }
16183    }
16184}
16185
16186impl serde::ser::Serialize for ResourceState {
16187    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
16188    where
16189        S: serde::Serializer,
16190    {
16191        match self {
16192            Self::Unspecified => serializer.serialize_i32(0),
16193            Self::LockDown => serializer.serialize_i32(1),
16194            Self::LockDownPending => serializer.serialize_i32(2),
16195            Self::UnknownValue(u) => u.0.serialize(serializer),
16196        }
16197    }
16198}
16199
16200impl<'de> serde::de::Deserialize<'de> for ResourceState {
16201    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
16202    where
16203        D: serde::Deserializer<'de>,
16204    {
16205        deserializer.deserialize_any(wkt::internal::EnumVisitor::<ResourceState>::new(
16206            ".google.cloud.edgecontainer.v1.ResourceState",
16207        ))
16208    }
16209}