google_cloud_redis_cluster_v1/
builder.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
17pub mod cloud_redis_cluster {
18    use crate::Result;
19
20    /// A builder for [CloudRedisCluster][crate::client::CloudRedisCluster].
21    ///
22    /// ```
23    /// # tokio_test::block_on(async {
24    /// # use google_cloud_redis_cluster_v1::*;
25    /// # use builder::cloud_redis_cluster::ClientBuilder;
26    /// # use client::CloudRedisCluster;
27    /// let builder : ClientBuilder = CloudRedisCluster::builder();
28    /// let client = builder
29    ///     .with_endpoint("https://redis.googleapis.com")
30    ///     .build().await?;
31    /// # gax::client_builder::Result::<()>::Ok(()) });
32    /// ```
33    pub type ClientBuilder =
34        gax::client_builder::ClientBuilder<client::Factory, gaxi::options::Credentials>;
35
36    pub(crate) mod client {
37        use super::super::super::client::CloudRedisCluster;
38        pub struct Factory;
39        impl gax::client_builder::internal::ClientFactory for Factory {
40            type Client = CloudRedisCluster;
41            type Credentials = gaxi::options::Credentials;
42            async fn build(
43                self,
44                config: gaxi::options::ClientConfig,
45            ) -> gax::client_builder::Result<Self::Client> {
46                Self::Client::new(config).await
47            }
48        }
49    }
50
51    /// Common implementation for [crate::client::CloudRedisCluster] request builders.
52    #[derive(Clone, Debug)]
53    pub(crate) struct RequestBuilder<R: std::default::Default> {
54        stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
55        request: R,
56        options: gax::options::RequestOptions,
57    }
58
59    impl<R> RequestBuilder<R>
60    where
61        R: std::default::Default,
62    {
63        pub(crate) fn new(
64            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
65        ) -> Self {
66            Self {
67                stub,
68                request: R::default(),
69                options: gax::options::RequestOptions::default(),
70            }
71        }
72    }
73
74    /// The request builder for [CloudRedisCluster::list_clusters][crate::client::CloudRedisCluster::list_clusters] calls.
75    ///
76    /// # Example
77    /// ```no_run
78    /// # use google_cloud_redis_cluster_v1::builder;
79    /// use builder::cloud_redis_cluster::ListClusters;
80    /// # tokio_test::block_on(async {
81    /// use gax::paginator::ItemPaginator;
82    ///
83    /// let builder = prepare_request_builder();
84    /// let mut items = builder.by_item();
85    /// while let Some(result) = items.next().await {
86    ///   let item = result?;
87    /// }
88    /// # gax::Result::<()>::Ok(()) });
89    ///
90    /// fn prepare_request_builder() -> ListClusters {
91    ///   # panic!();
92    ///   // ... details omitted ...
93    /// }
94    /// ```
95    #[derive(Clone, Debug)]
96    pub struct ListClusters(RequestBuilder<crate::model::ListClustersRequest>);
97
98    impl ListClusters {
99        pub(crate) fn new(
100            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
101        ) -> Self {
102            Self(RequestBuilder::new(stub))
103        }
104
105        /// Sets the full request, replacing any prior values.
106        pub fn with_request<V: Into<crate::model::ListClustersRequest>>(mut self, v: V) -> Self {
107            self.0.request = v.into();
108            self
109        }
110
111        /// Sets all the options, replacing any prior values.
112        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
113            self.0.options = v.into();
114            self
115        }
116
117        /// Sends the request.
118        pub async fn send(self) -> Result<crate::model::ListClustersResponse> {
119            (*self.0.stub)
120                .list_clusters(self.0.request, self.0.options)
121                .await
122                .map(gax::response::Response::into_body)
123        }
124
125        /// Streams each page in the collection.
126        pub fn by_page(
127            self,
128        ) -> impl gax::paginator::Paginator<crate::model::ListClustersResponse, gax::error::Error>
129        {
130            use std::clone::Clone;
131            let token = self.0.request.page_token.clone();
132            let execute = move |token: String| {
133                let mut builder = self.clone();
134                builder.0.request = builder.0.request.set_page_token(token);
135                builder.send()
136            };
137            gax::paginator::internal::new_paginator(token, execute)
138        }
139
140        /// Streams each item in the collection.
141        pub fn by_item(
142            self,
143        ) -> impl gax::paginator::ItemPaginator<crate::model::ListClustersResponse, gax::error::Error>
144        {
145            use gax::paginator::Paginator;
146            self.by_page().items()
147        }
148
149        /// Sets the value of [parent][crate::model::ListClustersRequest::parent].
150        ///
151        /// This is a **required** field for requests.
152        pub fn set_parent<T: Into<std::string::String>>(mut self, v: T) -> Self {
153            self.0.request.parent = v.into();
154            self
155        }
156
157        /// Sets the value of [page_size][crate::model::ListClustersRequest::page_size].
158        pub fn set_page_size<T: Into<i32>>(mut self, v: T) -> Self {
159            self.0.request.page_size = v.into();
160            self
161        }
162
163        /// Sets the value of [page_token][crate::model::ListClustersRequest::page_token].
164        pub fn set_page_token<T: Into<std::string::String>>(mut self, v: T) -> Self {
165            self.0.request.page_token = v.into();
166            self
167        }
168    }
169
170    #[doc(hidden)]
171    impl gax::options::internal::RequestBuilder for ListClusters {
172        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
173            &mut self.0.options
174        }
175    }
176
177    /// The request builder for [CloudRedisCluster::get_cluster][crate::client::CloudRedisCluster::get_cluster] calls.
178    ///
179    /// # Example
180    /// ```no_run
181    /// # use google_cloud_redis_cluster_v1::builder;
182    /// use builder::cloud_redis_cluster::GetCluster;
183    /// # tokio_test::block_on(async {
184    ///
185    /// let builder = prepare_request_builder();
186    /// let response = builder.send().await?;
187    /// # gax::Result::<()>::Ok(()) });
188    ///
189    /// fn prepare_request_builder() -> GetCluster {
190    ///   # panic!();
191    ///   // ... details omitted ...
192    /// }
193    /// ```
194    #[derive(Clone, Debug)]
195    pub struct GetCluster(RequestBuilder<crate::model::GetClusterRequest>);
196
197    impl GetCluster {
198        pub(crate) fn new(
199            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
200        ) -> Self {
201            Self(RequestBuilder::new(stub))
202        }
203
204        /// Sets the full request, replacing any prior values.
205        pub fn with_request<V: Into<crate::model::GetClusterRequest>>(mut self, v: V) -> Self {
206            self.0.request = v.into();
207            self
208        }
209
210        /// Sets all the options, replacing any prior values.
211        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
212            self.0.options = v.into();
213            self
214        }
215
216        /// Sends the request.
217        pub async fn send(self) -> Result<crate::model::Cluster> {
218            (*self.0.stub)
219                .get_cluster(self.0.request, self.0.options)
220                .await
221                .map(gax::response::Response::into_body)
222        }
223
224        /// Sets the value of [name][crate::model::GetClusterRequest::name].
225        ///
226        /// This is a **required** field for requests.
227        pub fn set_name<T: Into<std::string::String>>(mut self, v: T) -> Self {
228            self.0.request.name = v.into();
229            self
230        }
231    }
232
233    #[doc(hidden)]
234    impl gax::options::internal::RequestBuilder for GetCluster {
235        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
236            &mut self.0.options
237        }
238    }
239
240    /// The request builder for [CloudRedisCluster::update_cluster][crate::client::CloudRedisCluster::update_cluster] calls.
241    ///
242    /// # Example
243    /// ```no_run
244    /// # use google_cloud_redis_cluster_v1::builder;
245    /// use builder::cloud_redis_cluster::UpdateCluster;
246    /// # tokio_test::block_on(async {
247    /// use lro::Poller;
248    ///
249    /// let builder = prepare_request_builder();
250    /// let response = builder.poller().until_done().await?;
251    /// # gax::Result::<()>::Ok(()) });
252    ///
253    /// fn prepare_request_builder() -> UpdateCluster {
254    ///   # panic!();
255    ///   // ... details omitted ...
256    /// }
257    /// ```
258    #[derive(Clone, Debug)]
259    pub struct UpdateCluster(RequestBuilder<crate::model::UpdateClusterRequest>);
260
261    impl UpdateCluster {
262        pub(crate) fn new(
263            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
264        ) -> Self {
265            Self(RequestBuilder::new(stub))
266        }
267
268        /// Sets the full request, replacing any prior values.
269        pub fn with_request<V: Into<crate::model::UpdateClusterRequest>>(mut self, v: V) -> Self {
270            self.0.request = v.into();
271            self
272        }
273
274        /// Sets all the options, replacing any prior values.
275        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
276            self.0.options = v.into();
277            self
278        }
279
280        /// Sends the request.
281        ///
282        /// # Long running operations
283        ///
284        /// This starts, but does not poll, a longrunning operation. More information
285        /// on [update_cluster][crate::client::CloudRedisCluster::update_cluster].
286        pub async fn send(self) -> Result<longrunning::model::Operation> {
287            (*self.0.stub)
288                .update_cluster(self.0.request, self.0.options)
289                .await
290                .map(gax::response::Response::into_body)
291        }
292
293        /// Creates a [Poller][lro::Poller] to work with `update_cluster`.
294        pub fn poller(self) -> impl lro::Poller<crate::model::Cluster, wkt::Any> {
295            type Operation = lro::internal::Operation<crate::model::Cluster, wkt::Any>;
296            let polling_error_policy = self.0.stub.get_polling_error_policy(&self.0.options);
297            let polling_backoff_policy = self.0.stub.get_polling_backoff_policy(&self.0.options);
298
299            let stub = self.0.stub.clone();
300            let mut options = self.0.options.clone();
301            options.set_retry_policy(gax::retry_policy::NeverRetry);
302            let query = move |name| {
303                let stub = stub.clone();
304                let options = options.clone();
305                async {
306                    let op = GetOperation::new(stub)
307                        .set_name(name)
308                        .with_options(options)
309                        .send()
310                        .await?;
311                    Ok(Operation::new(op))
312                }
313            };
314
315            let start = move || async {
316                let op = self.send().await?;
317                Ok(Operation::new(op))
318            };
319
320            lro::internal::new_poller(polling_error_policy, polling_backoff_policy, start, query)
321        }
322
323        /// Sets the value of [update_mask][crate::model::UpdateClusterRequest::update_mask].
324        ///
325        /// This is a **required** field for requests.
326        pub fn set_update_mask<T>(mut self, v: T) -> Self
327        where
328            T: std::convert::Into<wkt::FieldMask>,
329        {
330            self.0.request.update_mask = std::option::Option::Some(v.into());
331            self
332        }
333
334        /// Sets or clears the value of [update_mask][crate::model::UpdateClusterRequest::update_mask].
335        ///
336        /// This is a **required** field for requests.
337        pub fn set_or_clear_update_mask<T>(mut self, v: std::option::Option<T>) -> Self
338        where
339            T: std::convert::Into<wkt::FieldMask>,
340        {
341            self.0.request.update_mask = v.map(|x| x.into());
342            self
343        }
344
345        /// Sets the value of [cluster][crate::model::UpdateClusterRequest::cluster].
346        ///
347        /// This is a **required** field for requests.
348        pub fn set_cluster<T>(mut self, v: T) -> Self
349        where
350            T: std::convert::Into<crate::model::Cluster>,
351        {
352            self.0.request.cluster = std::option::Option::Some(v.into());
353            self
354        }
355
356        /// Sets or clears the value of [cluster][crate::model::UpdateClusterRequest::cluster].
357        ///
358        /// This is a **required** field for requests.
359        pub fn set_or_clear_cluster<T>(mut self, v: std::option::Option<T>) -> Self
360        where
361            T: std::convert::Into<crate::model::Cluster>,
362        {
363            self.0.request.cluster = v.map(|x| x.into());
364            self
365        }
366
367        /// Sets the value of [request_id][crate::model::UpdateClusterRequest::request_id].
368        pub fn set_request_id<T: Into<std::string::String>>(mut self, v: T) -> Self {
369            self.0.request.request_id = v.into();
370            self
371        }
372    }
373
374    #[doc(hidden)]
375    impl gax::options::internal::RequestBuilder for UpdateCluster {
376        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
377            &mut self.0.options
378        }
379    }
380
381    /// The request builder for [CloudRedisCluster::delete_cluster][crate::client::CloudRedisCluster::delete_cluster] calls.
382    ///
383    /// # Example
384    /// ```no_run
385    /// # use google_cloud_redis_cluster_v1::builder;
386    /// use builder::cloud_redis_cluster::DeleteCluster;
387    /// # tokio_test::block_on(async {
388    /// use lro::Poller;
389    ///
390    /// let builder = prepare_request_builder();
391    /// let response = builder.poller().until_done().await?;
392    /// # gax::Result::<()>::Ok(()) });
393    ///
394    /// fn prepare_request_builder() -> DeleteCluster {
395    ///   # panic!();
396    ///   // ... details omitted ...
397    /// }
398    /// ```
399    #[derive(Clone, Debug)]
400    pub struct DeleteCluster(RequestBuilder<crate::model::DeleteClusterRequest>);
401
402    impl DeleteCluster {
403        pub(crate) fn new(
404            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
405        ) -> Self {
406            Self(RequestBuilder::new(stub))
407        }
408
409        /// Sets the full request, replacing any prior values.
410        pub fn with_request<V: Into<crate::model::DeleteClusterRequest>>(mut self, v: V) -> Self {
411            self.0.request = v.into();
412            self
413        }
414
415        /// Sets all the options, replacing any prior values.
416        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
417            self.0.options = v.into();
418            self
419        }
420
421        /// Sends the request.
422        ///
423        /// # Long running operations
424        ///
425        /// This starts, but does not poll, a longrunning operation. More information
426        /// on [delete_cluster][crate::client::CloudRedisCluster::delete_cluster].
427        pub async fn send(self) -> Result<longrunning::model::Operation> {
428            (*self.0.stub)
429                .delete_cluster(self.0.request, self.0.options)
430                .await
431                .map(gax::response::Response::into_body)
432        }
433
434        /// Creates a [Poller][lro::Poller] to work with `delete_cluster`.
435        pub fn poller(self) -> impl lro::Poller<(), wkt::Any> {
436            type Operation = lro::internal::Operation<wkt::Empty, wkt::Any>;
437            let polling_error_policy = self.0.stub.get_polling_error_policy(&self.0.options);
438            let polling_backoff_policy = self.0.stub.get_polling_backoff_policy(&self.0.options);
439
440            let stub = self.0.stub.clone();
441            let mut options = self.0.options.clone();
442            options.set_retry_policy(gax::retry_policy::NeverRetry);
443            let query = move |name| {
444                let stub = stub.clone();
445                let options = options.clone();
446                async {
447                    let op = GetOperation::new(stub)
448                        .set_name(name)
449                        .with_options(options)
450                        .send()
451                        .await?;
452                    Ok(Operation::new(op))
453                }
454            };
455
456            let start = move || async {
457                let op = self.send().await?;
458                Ok(Operation::new(op))
459            };
460
461            lro::internal::new_unit_response_poller(
462                polling_error_policy,
463                polling_backoff_policy,
464                start,
465                query,
466            )
467        }
468
469        /// Sets the value of [name][crate::model::DeleteClusterRequest::name].
470        ///
471        /// This is a **required** field for requests.
472        pub fn set_name<T: Into<std::string::String>>(mut self, v: T) -> Self {
473            self.0.request.name = v.into();
474            self
475        }
476
477        /// Sets the value of [request_id][crate::model::DeleteClusterRequest::request_id].
478        pub fn set_request_id<T: Into<std::string::String>>(mut self, v: T) -> Self {
479            self.0.request.request_id = v.into();
480            self
481        }
482    }
483
484    #[doc(hidden)]
485    impl gax::options::internal::RequestBuilder for DeleteCluster {
486        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
487            &mut self.0.options
488        }
489    }
490
491    /// The request builder for [CloudRedisCluster::create_cluster][crate::client::CloudRedisCluster::create_cluster] calls.
492    ///
493    /// # Example
494    /// ```no_run
495    /// # use google_cloud_redis_cluster_v1::builder;
496    /// use builder::cloud_redis_cluster::CreateCluster;
497    /// # tokio_test::block_on(async {
498    /// use lro::Poller;
499    ///
500    /// let builder = prepare_request_builder();
501    /// let response = builder.poller().until_done().await?;
502    /// # gax::Result::<()>::Ok(()) });
503    ///
504    /// fn prepare_request_builder() -> CreateCluster {
505    ///   # panic!();
506    ///   // ... details omitted ...
507    /// }
508    /// ```
509    #[derive(Clone, Debug)]
510    pub struct CreateCluster(RequestBuilder<crate::model::CreateClusterRequest>);
511
512    impl CreateCluster {
513        pub(crate) fn new(
514            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
515        ) -> Self {
516            Self(RequestBuilder::new(stub))
517        }
518
519        /// Sets the full request, replacing any prior values.
520        pub fn with_request<V: Into<crate::model::CreateClusterRequest>>(mut self, v: V) -> Self {
521            self.0.request = v.into();
522            self
523        }
524
525        /// Sets all the options, replacing any prior values.
526        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
527            self.0.options = v.into();
528            self
529        }
530
531        /// Sends the request.
532        ///
533        /// # Long running operations
534        ///
535        /// This starts, but does not poll, a longrunning operation. More information
536        /// on [create_cluster][crate::client::CloudRedisCluster::create_cluster].
537        pub async fn send(self) -> Result<longrunning::model::Operation> {
538            (*self.0.stub)
539                .create_cluster(self.0.request, self.0.options)
540                .await
541                .map(gax::response::Response::into_body)
542        }
543
544        /// Creates a [Poller][lro::Poller] to work with `create_cluster`.
545        pub fn poller(self) -> impl lro::Poller<crate::model::Cluster, wkt::Any> {
546            type Operation = lro::internal::Operation<crate::model::Cluster, wkt::Any>;
547            let polling_error_policy = self.0.stub.get_polling_error_policy(&self.0.options);
548            let polling_backoff_policy = self.0.stub.get_polling_backoff_policy(&self.0.options);
549
550            let stub = self.0.stub.clone();
551            let mut options = self.0.options.clone();
552            options.set_retry_policy(gax::retry_policy::NeverRetry);
553            let query = move |name| {
554                let stub = stub.clone();
555                let options = options.clone();
556                async {
557                    let op = GetOperation::new(stub)
558                        .set_name(name)
559                        .with_options(options)
560                        .send()
561                        .await?;
562                    Ok(Operation::new(op))
563                }
564            };
565
566            let start = move || async {
567                let op = self.send().await?;
568                Ok(Operation::new(op))
569            };
570
571            lro::internal::new_poller(polling_error_policy, polling_backoff_policy, start, query)
572        }
573
574        /// Sets the value of [parent][crate::model::CreateClusterRequest::parent].
575        ///
576        /// This is a **required** field for requests.
577        pub fn set_parent<T: Into<std::string::String>>(mut self, v: T) -> Self {
578            self.0.request.parent = v.into();
579            self
580        }
581
582        /// Sets the value of [cluster_id][crate::model::CreateClusterRequest::cluster_id].
583        ///
584        /// This is a **required** field for requests.
585        pub fn set_cluster_id<T: Into<std::string::String>>(mut self, v: T) -> Self {
586            self.0.request.cluster_id = v.into();
587            self
588        }
589
590        /// Sets the value of [cluster][crate::model::CreateClusterRequest::cluster].
591        ///
592        /// This is a **required** field for requests.
593        pub fn set_cluster<T>(mut self, v: T) -> Self
594        where
595            T: std::convert::Into<crate::model::Cluster>,
596        {
597            self.0.request.cluster = std::option::Option::Some(v.into());
598            self
599        }
600
601        /// Sets or clears the value of [cluster][crate::model::CreateClusterRequest::cluster].
602        ///
603        /// This is a **required** field for requests.
604        pub fn set_or_clear_cluster<T>(mut self, v: std::option::Option<T>) -> Self
605        where
606            T: std::convert::Into<crate::model::Cluster>,
607        {
608            self.0.request.cluster = v.map(|x| x.into());
609            self
610        }
611
612        /// Sets the value of [request_id][crate::model::CreateClusterRequest::request_id].
613        pub fn set_request_id<T: Into<std::string::String>>(mut self, v: T) -> Self {
614            self.0.request.request_id = v.into();
615            self
616        }
617    }
618
619    #[doc(hidden)]
620    impl gax::options::internal::RequestBuilder for CreateCluster {
621        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
622            &mut self.0.options
623        }
624    }
625
626    /// The request builder for [CloudRedisCluster::get_cluster_certificate_authority][crate::client::CloudRedisCluster::get_cluster_certificate_authority] calls.
627    ///
628    /// # Example
629    /// ```no_run
630    /// # use google_cloud_redis_cluster_v1::builder;
631    /// use builder::cloud_redis_cluster::GetClusterCertificateAuthority;
632    /// # tokio_test::block_on(async {
633    ///
634    /// let builder = prepare_request_builder();
635    /// let response = builder.send().await?;
636    /// # gax::Result::<()>::Ok(()) });
637    ///
638    /// fn prepare_request_builder() -> GetClusterCertificateAuthority {
639    ///   # panic!();
640    ///   // ... details omitted ...
641    /// }
642    /// ```
643    #[derive(Clone, Debug)]
644    pub struct GetClusterCertificateAuthority(
645        RequestBuilder<crate::model::GetClusterCertificateAuthorityRequest>,
646    );
647
648    impl GetClusterCertificateAuthority {
649        pub(crate) fn new(
650            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
651        ) -> Self {
652            Self(RequestBuilder::new(stub))
653        }
654
655        /// Sets the full request, replacing any prior values.
656        pub fn with_request<V: Into<crate::model::GetClusterCertificateAuthorityRequest>>(
657            mut self,
658            v: V,
659        ) -> Self {
660            self.0.request = v.into();
661            self
662        }
663
664        /// Sets all the options, replacing any prior values.
665        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
666            self.0.options = v.into();
667            self
668        }
669
670        /// Sends the request.
671        pub async fn send(self) -> Result<crate::model::CertificateAuthority> {
672            (*self.0.stub)
673                .get_cluster_certificate_authority(self.0.request, self.0.options)
674                .await
675                .map(gax::response::Response::into_body)
676        }
677
678        /// Sets the value of [name][crate::model::GetClusterCertificateAuthorityRequest::name].
679        ///
680        /// This is a **required** field for requests.
681        pub fn set_name<T: Into<std::string::String>>(mut self, v: T) -> Self {
682            self.0.request.name = v.into();
683            self
684        }
685    }
686
687    #[doc(hidden)]
688    impl gax::options::internal::RequestBuilder for GetClusterCertificateAuthority {
689        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
690            &mut self.0.options
691        }
692    }
693
694    /// The request builder for [CloudRedisCluster::reschedule_cluster_maintenance][crate::client::CloudRedisCluster::reschedule_cluster_maintenance] calls.
695    ///
696    /// # Example
697    /// ```no_run
698    /// # use google_cloud_redis_cluster_v1::builder;
699    /// use builder::cloud_redis_cluster::RescheduleClusterMaintenance;
700    /// # tokio_test::block_on(async {
701    /// use lro::Poller;
702    ///
703    /// let builder = prepare_request_builder();
704    /// let response = builder.poller().until_done().await?;
705    /// # gax::Result::<()>::Ok(()) });
706    ///
707    /// fn prepare_request_builder() -> RescheduleClusterMaintenance {
708    ///   # panic!();
709    ///   // ... details omitted ...
710    /// }
711    /// ```
712    #[derive(Clone, Debug)]
713    pub struct RescheduleClusterMaintenance(
714        RequestBuilder<crate::model::RescheduleClusterMaintenanceRequest>,
715    );
716
717    impl RescheduleClusterMaintenance {
718        pub(crate) fn new(
719            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
720        ) -> Self {
721            Self(RequestBuilder::new(stub))
722        }
723
724        /// Sets the full request, replacing any prior values.
725        pub fn with_request<V: Into<crate::model::RescheduleClusterMaintenanceRequest>>(
726            mut self,
727            v: V,
728        ) -> Self {
729            self.0.request = v.into();
730            self
731        }
732
733        /// Sets all the options, replacing any prior values.
734        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
735            self.0.options = v.into();
736            self
737        }
738
739        /// Sends the request.
740        ///
741        /// # Long running operations
742        ///
743        /// This starts, but does not poll, a longrunning operation. More information
744        /// on [reschedule_cluster_maintenance][crate::client::CloudRedisCluster::reschedule_cluster_maintenance].
745        pub async fn send(self) -> Result<longrunning::model::Operation> {
746            (*self.0.stub)
747                .reschedule_cluster_maintenance(self.0.request, self.0.options)
748                .await
749                .map(gax::response::Response::into_body)
750        }
751
752        /// Creates a [Poller][lro::Poller] to work with `reschedule_cluster_maintenance`.
753        pub fn poller(self) -> impl lro::Poller<crate::model::Cluster, wkt::Any> {
754            type Operation = lro::internal::Operation<crate::model::Cluster, wkt::Any>;
755            let polling_error_policy = self.0.stub.get_polling_error_policy(&self.0.options);
756            let polling_backoff_policy = self.0.stub.get_polling_backoff_policy(&self.0.options);
757
758            let stub = self.0.stub.clone();
759            let mut options = self.0.options.clone();
760            options.set_retry_policy(gax::retry_policy::NeverRetry);
761            let query = move |name| {
762                let stub = stub.clone();
763                let options = options.clone();
764                async {
765                    let op = GetOperation::new(stub)
766                        .set_name(name)
767                        .with_options(options)
768                        .send()
769                        .await?;
770                    Ok(Operation::new(op))
771                }
772            };
773
774            let start = move || async {
775                let op = self.send().await?;
776                Ok(Operation::new(op))
777            };
778
779            lro::internal::new_poller(polling_error_policy, polling_backoff_policy, start, query)
780        }
781
782        /// Sets the value of [name][crate::model::RescheduleClusterMaintenanceRequest::name].
783        ///
784        /// This is a **required** field for requests.
785        pub fn set_name<T: Into<std::string::String>>(mut self, v: T) -> Self {
786            self.0.request.name = v.into();
787            self
788        }
789
790        /// Sets the value of [reschedule_type][crate::model::RescheduleClusterMaintenanceRequest::reschedule_type].
791        ///
792        /// This is a **required** field for requests.
793        pub fn set_reschedule_type<
794            T: Into<crate::model::reschedule_cluster_maintenance_request::RescheduleType>,
795        >(
796            mut self,
797            v: T,
798        ) -> Self {
799            self.0.request.reschedule_type = v.into();
800            self
801        }
802
803        /// Sets the value of [schedule_time][crate::model::RescheduleClusterMaintenanceRequest::schedule_time].
804        pub fn set_schedule_time<T>(mut self, v: T) -> Self
805        where
806            T: std::convert::Into<wkt::Timestamp>,
807        {
808            self.0.request.schedule_time = std::option::Option::Some(v.into());
809            self
810        }
811
812        /// Sets or clears the value of [schedule_time][crate::model::RescheduleClusterMaintenanceRequest::schedule_time].
813        pub fn set_or_clear_schedule_time<T>(mut self, v: std::option::Option<T>) -> Self
814        where
815            T: std::convert::Into<wkt::Timestamp>,
816        {
817            self.0.request.schedule_time = v.map(|x| x.into());
818            self
819        }
820    }
821
822    #[doc(hidden)]
823    impl gax::options::internal::RequestBuilder for RescheduleClusterMaintenance {
824        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
825            &mut self.0.options
826        }
827    }
828
829    /// The request builder for [CloudRedisCluster::list_backup_collections][crate::client::CloudRedisCluster::list_backup_collections] calls.
830    ///
831    /// # Example
832    /// ```no_run
833    /// # use google_cloud_redis_cluster_v1::builder;
834    /// use builder::cloud_redis_cluster::ListBackupCollections;
835    /// # tokio_test::block_on(async {
836    /// use gax::paginator::ItemPaginator;
837    ///
838    /// let builder = prepare_request_builder();
839    /// let mut items = builder.by_item();
840    /// while let Some(result) = items.next().await {
841    ///   let item = result?;
842    /// }
843    /// # gax::Result::<()>::Ok(()) });
844    ///
845    /// fn prepare_request_builder() -> ListBackupCollections {
846    ///   # panic!();
847    ///   // ... details omitted ...
848    /// }
849    /// ```
850    #[derive(Clone, Debug)]
851    pub struct ListBackupCollections(RequestBuilder<crate::model::ListBackupCollectionsRequest>);
852
853    impl ListBackupCollections {
854        pub(crate) fn new(
855            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
856        ) -> Self {
857            Self(RequestBuilder::new(stub))
858        }
859
860        /// Sets the full request, replacing any prior values.
861        pub fn with_request<V: Into<crate::model::ListBackupCollectionsRequest>>(
862            mut self,
863            v: V,
864        ) -> Self {
865            self.0.request = v.into();
866            self
867        }
868
869        /// Sets all the options, replacing any prior values.
870        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
871            self.0.options = v.into();
872            self
873        }
874
875        /// Sends the request.
876        pub async fn send(self) -> Result<crate::model::ListBackupCollectionsResponse> {
877            (*self.0.stub)
878                .list_backup_collections(self.0.request, self.0.options)
879                .await
880                .map(gax::response::Response::into_body)
881        }
882
883        /// Streams each page in the collection.
884        pub fn by_page(
885            self,
886        ) -> impl gax::paginator::Paginator<crate::model::ListBackupCollectionsResponse, gax::error::Error>
887        {
888            use std::clone::Clone;
889            let token = self.0.request.page_token.clone();
890            let execute = move |token: String| {
891                let mut builder = self.clone();
892                builder.0.request = builder.0.request.set_page_token(token);
893                builder.send()
894            };
895            gax::paginator::internal::new_paginator(token, execute)
896        }
897
898        /// Streams each item in the collection.
899        pub fn by_item(
900            self,
901        ) -> impl gax::paginator::ItemPaginator<
902            crate::model::ListBackupCollectionsResponse,
903            gax::error::Error,
904        > {
905            use gax::paginator::Paginator;
906            self.by_page().items()
907        }
908
909        /// Sets the value of [parent][crate::model::ListBackupCollectionsRequest::parent].
910        ///
911        /// This is a **required** field for requests.
912        pub fn set_parent<T: Into<std::string::String>>(mut self, v: T) -> Self {
913            self.0.request.parent = v.into();
914            self
915        }
916
917        /// Sets the value of [page_size][crate::model::ListBackupCollectionsRequest::page_size].
918        pub fn set_page_size<T: Into<i32>>(mut self, v: T) -> Self {
919            self.0.request.page_size = v.into();
920            self
921        }
922
923        /// Sets the value of [page_token][crate::model::ListBackupCollectionsRequest::page_token].
924        pub fn set_page_token<T: Into<std::string::String>>(mut self, v: T) -> Self {
925            self.0.request.page_token = v.into();
926            self
927        }
928    }
929
930    #[doc(hidden)]
931    impl gax::options::internal::RequestBuilder for ListBackupCollections {
932        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
933            &mut self.0.options
934        }
935    }
936
937    /// The request builder for [CloudRedisCluster::get_backup_collection][crate::client::CloudRedisCluster::get_backup_collection] calls.
938    ///
939    /// # Example
940    /// ```no_run
941    /// # use google_cloud_redis_cluster_v1::builder;
942    /// use builder::cloud_redis_cluster::GetBackupCollection;
943    /// # tokio_test::block_on(async {
944    ///
945    /// let builder = prepare_request_builder();
946    /// let response = builder.send().await?;
947    /// # gax::Result::<()>::Ok(()) });
948    ///
949    /// fn prepare_request_builder() -> GetBackupCollection {
950    ///   # panic!();
951    ///   // ... details omitted ...
952    /// }
953    /// ```
954    #[derive(Clone, Debug)]
955    pub struct GetBackupCollection(RequestBuilder<crate::model::GetBackupCollectionRequest>);
956
957    impl GetBackupCollection {
958        pub(crate) fn new(
959            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
960        ) -> Self {
961            Self(RequestBuilder::new(stub))
962        }
963
964        /// Sets the full request, replacing any prior values.
965        pub fn with_request<V: Into<crate::model::GetBackupCollectionRequest>>(
966            mut self,
967            v: V,
968        ) -> Self {
969            self.0.request = v.into();
970            self
971        }
972
973        /// Sets all the options, replacing any prior values.
974        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
975            self.0.options = v.into();
976            self
977        }
978
979        /// Sends the request.
980        pub async fn send(self) -> Result<crate::model::BackupCollection> {
981            (*self.0.stub)
982                .get_backup_collection(self.0.request, self.0.options)
983                .await
984                .map(gax::response::Response::into_body)
985        }
986
987        /// Sets the value of [name][crate::model::GetBackupCollectionRequest::name].
988        ///
989        /// This is a **required** field for requests.
990        pub fn set_name<T: Into<std::string::String>>(mut self, v: T) -> Self {
991            self.0.request.name = v.into();
992            self
993        }
994    }
995
996    #[doc(hidden)]
997    impl gax::options::internal::RequestBuilder for GetBackupCollection {
998        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
999            &mut self.0.options
1000        }
1001    }
1002
1003    /// The request builder for [CloudRedisCluster::list_backups][crate::client::CloudRedisCluster::list_backups] calls.
1004    ///
1005    /// # Example
1006    /// ```no_run
1007    /// # use google_cloud_redis_cluster_v1::builder;
1008    /// use builder::cloud_redis_cluster::ListBackups;
1009    /// # tokio_test::block_on(async {
1010    /// use gax::paginator::ItemPaginator;
1011    ///
1012    /// let builder = prepare_request_builder();
1013    /// let mut items = builder.by_item();
1014    /// while let Some(result) = items.next().await {
1015    ///   let item = result?;
1016    /// }
1017    /// # gax::Result::<()>::Ok(()) });
1018    ///
1019    /// fn prepare_request_builder() -> ListBackups {
1020    ///   # panic!();
1021    ///   // ... details omitted ...
1022    /// }
1023    /// ```
1024    #[derive(Clone, Debug)]
1025    pub struct ListBackups(RequestBuilder<crate::model::ListBackupsRequest>);
1026
1027    impl ListBackups {
1028        pub(crate) fn new(
1029            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
1030        ) -> Self {
1031            Self(RequestBuilder::new(stub))
1032        }
1033
1034        /// Sets the full request, replacing any prior values.
1035        pub fn with_request<V: Into<crate::model::ListBackupsRequest>>(mut self, v: V) -> Self {
1036            self.0.request = v.into();
1037            self
1038        }
1039
1040        /// Sets all the options, replacing any prior values.
1041        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
1042            self.0.options = v.into();
1043            self
1044        }
1045
1046        /// Sends the request.
1047        pub async fn send(self) -> Result<crate::model::ListBackupsResponse> {
1048            (*self.0.stub)
1049                .list_backups(self.0.request, self.0.options)
1050                .await
1051                .map(gax::response::Response::into_body)
1052        }
1053
1054        /// Streams each page in the collection.
1055        pub fn by_page(
1056            self,
1057        ) -> impl gax::paginator::Paginator<crate::model::ListBackupsResponse, gax::error::Error>
1058        {
1059            use std::clone::Clone;
1060            let token = self.0.request.page_token.clone();
1061            let execute = move |token: String| {
1062                let mut builder = self.clone();
1063                builder.0.request = builder.0.request.set_page_token(token);
1064                builder.send()
1065            };
1066            gax::paginator::internal::new_paginator(token, execute)
1067        }
1068
1069        /// Streams each item in the collection.
1070        pub fn by_item(
1071            self,
1072        ) -> impl gax::paginator::ItemPaginator<crate::model::ListBackupsResponse, gax::error::Error>
1073        {
1074            use gax::paginator::Paginator;
1075            self.by_page().items()
1076        }
1077
1078        /// Sets the value of [parent][crate::model::ListBackupsRequest::parent].
1079        ///
1080        /// This is a **required** field for requests.
1081        pub fn set_parent<T: Into<std::string::String>>(mut self, v: T) -> Self {
1082            self.0.request.parent = v.into();
1083            self
1084        }
1085
1086        /// Sets the value of [page_size][crate::model::ListBackupsRequest::page_size].
1087        pub fn set_page_size<T: Into<i32>>(mut self, v: T) -> Self {
1088            self.0.request.page_size = v.into();
1089            self
1090        }
1091
1092        /// Sets the value of [page_token][crate::model::ListBackupsRequest::page_token].
1093        pub fn set_page_token<T: Into<std::string::String>>(mut self, v: T) -> Self {
1094            self.0.request.page_token = v.into();
1095            self
1096        }
1097    }
1098
1099    #[doc(hidden)]
1100    impl gax::options::internal::RequestBuilder for ListBackups {
1101        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
1102            &mut self.0.options
1103        }
1104    }
1105
1106    /// The request builder for [CloudRedisCluster::get_backup][crate::client::CloudRedisCluster::get_backup] calls.
1107    ///
1108    /// # Example
1109    /// ```no_run
1110    /// # use google_cloud_redis_cluster_v1::builder;
1111    /// use builder::cloud_redis_cluster::GetBackup;
1112    /// # tokio_test::block_on(async {
1113    ///
1114    /// let builder = prepare_request_builder();
1115    /// let response = builder.send().await?;
1116    /// # gax::Result::<()>::Ok(()) });
1117    ///
1118    /// fn prepare_request_builder() -> GetBackup {
1119    ///   # panic!();
1120    ///   // ... details omitted ...
1121    /// }
1122    /// ```
1123    #[derive(Clone, Debug)]
1124    pub struct GetBackup(RequestBuilder<crate::model::GetBackupRequest>);
1125
1126    impl GetBackup {
1127        pub(crate) fn new(
1128            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
1129        ) -> Self {
1130            Self(RequestBuilder::new(stub))
1131        }
1132
1133        /// Sets the full request, replacing any prior values.
1134        pub fn with_request<V: Into<crate::model::GetBackupRequest>>(mut self, v: V) -> Self {
1135            self.0.request = v.into();
1136            self
1137        }
1138
1139        /// Sets all the options, replacing any prior values.
1140        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
1141            self.0.options = v.into();
1142            self
1143        }
1144
1145        /// Sends the request.
1146        pub async fn send(self) -> Result<crate::model::Backup> {
1147            (*self.0.stub)
1148                .get_backup(self.0.request, self.0.options)
1149                .await
1150                .map(gax::response::Response::into_body)
1151        }
1152
1153        /// Sets the value of [name][crate::model::GetBackupRequest::name].
1154        ///
1155        /// This is a **required** field for requests.
1156        pub fn set_name<T: Into<std::string::String>>(mut self, v: T) -> Self {
1157            self.0.request.name = v.into();
1158            self
1159        }
1160    }
1161
1162    #[doc(hidden)]
1163    impl gax::options::internal::RequestBuilder for GetBackup {
1164        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
1165            &mut self.0.options
1166        }
1167    }
1168
1169    /// The request builder for [CloudRedisCluster::delete_backup][crate::client::CloudRedisCluster::delete_backup] calls.
1170    ///
1171    /// # Example
1172    /// ```no_run
1173    /// # use google_cloud_redis_cluster_v1::builder;
1174    /// use builder::cloud_redis_cluster::DeleteBackup;
1175    /// # tokio_test::block_on(async {
1176    /// use lro::Poller;
1177    ///
1178    /// let builder = prepare_request_builder();
1179    /// let response = builder.poller().until_done().await?;
1180    /// # gax::Result::<()>::Ok(()) });
1181    ///
1182    /// fn prepare_request_builder() -> DeleteBackup {
1183    ///   # panic!();
1184    ///   // ... details omitted ...
1185    /// }
1186    /// ```
1187    #[derive(Clone, Debug)]
1188    pub struct DeleteBackup(RequestBuilder<crate::model::DeleteBackupRequest>);
1189
1190    impl DeleteBackup {
1191        pub(crate) fn new(
1192            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
1193        ) -> Self {
1194            Self(RequestBuilder::new(stub))
1195        }
1196
1197        /// Sets the full request, replacing any prior values.
1198        pub fn with_request<V: Into<crate::model::DeleteBackupRequest>>(mut self, v: V) -> Self {
1199            self.0.request = v.into();
1200            self
1201        }
1202
1203        /// Sets all the options, replacing any prior values.
1204        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
1205            self.0.options = v.into();
1206            self
1207        }
1208
1209        /// Sends the request.
1210        ///
1211        /// # Long running operations
1212        ///
1213        /// This starts, but does not poll, a longrunning operation. More information
1214        /// on [delete_backup][crate::client::CloudRedisCluster::delete_backup].
1215        pub async fn send(self) -> Result<longrunning::model::Operation> {
1216            (*self.0.stub)
1217                .delete_backup(self.0.request, self.0.options)
1218                .await
1219                .map(gax::response::Response::into_body)
1220        }
1221
1222        /// Creates a [Poller][lro::Poller] to work with `delete_backup`.
1223        pub fn poller(self) -> impl lro::Poller<(), wkt::Any> {
1224            type Operation = lro::internal::Operation<wkt::Empty, wkt::Any>;
1225            let polling_error_policy = self.0.stub.get_polling_error_policy(&self.0.options);
1226            let polling_backoff_policy = self.0.stub.get_polling_backoff_policy(&self.0.options);
1227
1228            let stub = self.0.stub.clone();
1229            let mut options = self.0.options.clone();
1230            options.set_retry_policy(gax::retry_policy::NeverRetry);
1231            let query = move |name| {
1232                let stub = stub.clone();
1233                let options = options.clone();
1234                async {
1235                    let op = GetOperation::new(stub)
1236                        .set_name(name)
1237                        .with_options(options)
1238                        .send()
1239                        .await?;
1240                    Ok(Operation::new(op))
1241                }
1242            };
1243
1244            let start = move || async {
1245                let op = self.send().await?;
1246                Ok(Operation::new(op))
1247            };
1248
1249            lro::internal::new_unit_response_poller(
1250                polling_error_policy,
1251                polling_backoff_policy,
1252                start,
1253                query,
1254            )
1255        }
1256
1257        /// Sets the value of [name][crate::model::DeleteBackupRequest::name].
1258        ///
1259        /// This is a **required** field for requests.
1260        pub fn set_name<T: Into<std::string::String>>(mut self, v: T) -> Self {
1261            self.0.request.name = v.into();
1262            self
1263        }
1264
1265        /// Sets the value of [request_id][crate::model::DeleteBackupRequest::request_id].
1266        pub fn set_request_id<T: Into<std::string::String>>(mut self, v: T) -> Self {
1267            self.0.request.request_id = v.into();
1268            self
1269        }
1270    }
1271
1272    #[doc(hidden)]
1273    impl gax::options::internal::RequestBuilder for DeleteBackup {
1274        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
1275            &mut self.0.options
1276        }
1277    }
1278
1279    /// The request builder for [CloudRedisCluster::export_backup][crate::client::CloudRedisCluster::export_backup] calls.
1280    ///
1281    /// # Example
1282    /// ```no_run
1283    /// # use google_cloud_redis_cluster_v1::builder;
1284    /// use builder::cloud_redis_cluster::ExportBackup;
1285    /// # tokio_test::block_on(async {
1286    /// use lro::Poller;
1287    ///
1288    /// let builder = prepare_request_builder();
1289    /// let response = builder.poller().until_done().await?;
1290    /// # gax::Result::<()>::Ok(()) });
1291    ///
1292    /// fn prepare_request_builder() -> ExportBackup {
1293    ///   # panic!();
1294    ///   // ... details omitted ...
1295    /// }
1296    /// ```
1297    #[derive(Clone, Debug)]
1298    pub struct ExportBackup(RequestBuilder<crate::model::ExportBackupRequest>);
1299
1300    impl ExportBackup {
1301        pub(crate) fn new(
1302            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
1303        ) -> Self {
1304            Self(RequestBuilder::new(stub))
1305        }
1306
1307        /// Sets the full request, replacing any prior values.
1308        pub fn with_request<V: Into<crate::model::ExportBackupRequest>>(mut self, v: V) -> Self {
1309            self.0.request = v.into();
1310            self
1311        }
1312
1313        /// Sets all the options, replacing any prior values.
1314        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
1315            self.0.options = v.into();
1316            self
1317        }
1318
1319        /// Sends the request.
1320        ///
1321        /// # Long running operations
1322        ///
1323        /// This starts, but does not poll, a longrunning operation. More information
1324        /// on [export_backup][crate::client::CloudRedisCluster::export_backup].
1325        pub async fn send(self) -> Result<longrunning::model::Operation> {
1326            (*self.0.stub)
1327                .export_backup(self.0.request, self.0.options)
1328                .await
1329                .map(gax::response::Response::into_body)
1330        }
1331
1332        /// Creates a [Poller][lro::Poller] to work with `export_backup`.
1333        pub fn poller(self) -> impl lro::Poller<crate::model::Backup, wkt::Any> {
1334            type Operation = lro::internal::Operation<crate::model::Backup, wkt::Any>;
1335            let polling_error_policy = self.0.stub.get_polling_error_policy(&self.0.options);
1336            let polling_backoff_policy = self.0.stub.get_polling_backoff_policy(&self.0.options);
1337
1338            let stub = self.0.stub.clone();
1339            let mut options = self.0.options.clone();
1340            options.set_retry_policy(gax::retry_policy::NeverRetry);
1341            let query = move |name| {
1342                let stub = stub.clone();
1343                let options = options.clone();
1344                async {
1345                    let op = GetOperation::new(stub)
1346                        .set_name(name)
1347                        .with_options(options)
1348                        .send()
1349                        .await?;
1350                    Ok(Operation::new(op))
1351                }
1352            };
1353
1354            let start = move || async {
1355                let op = self.send().await?;
1356                Ok(Operation::new(op))
1357            };
1358
1359            lro::internal::new_poller(polling_error_policy, polling_backoff_policy, start, query)
1360        }
1361
1362        /// Sets the value of [name][crate::model::ExportBackupRequest::name].
1363        ///
1364        /// This is a **required** field for requests.
1365        pub fn set_name<T: Into<std::string::String>>(mut self, v: T) -> Self {
1366            self.0.request.name = v.into();
1367            self
1368        }
1369
1370        /// Sets the value of [destination][crate::model::ExportBackupRequest::destination].
1371        ///
1372        /// Note that all the setters affecting `destination` are
1373        /// mutually exclusive.
1374        pub fn set_destination<
1375            T: Into<Option<crate::model::export_backup_request::Destination>>,
1376        >(
1377            mut self,
1378            v: T,
1379        ) -> Self {
1380            self.0.request.destination = v.into();
1381            self
1382        }
1383
1384        /// Sets the value of [destination][crate::model::ExportBackupRequest::destination]
1385        /// to hold a `GcsBucket`.
1386        ///
1387        /// Note that all the setters affecting `destination` are
1388        /// mutually exclusive.
1389        pub fn set_gcs_bucket<T: std::convert::Into<std::string::String>>(mut self, v: T) -> Self {
1390            self.0.request = self.0.request.set_gcs_bucket(v);
1391            self
1392        }
1393    }
1394
1395    #[doc(hidden)]
1396    impl gax::options::internal::RequestBuilder for ExportBackup {
1397        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
1398            &mut self.0.options
1399        }
1400    }
1401
1402    /// The request builder for [CloudRedisCluster::backup_cluster][crate::client::CloudRedisCluster::backup_cluster] calls.
1403    ///
1404    /// # Example
1405    /// ```no_run
1406    /// # use google_cloud_redis_cluster_v1::builder;
1407    /// use builder::cloud_redis_cluster::BackupCluster;
1408    /// # tokio_test::block_on(async {
1409    /// use lro::Poller;
1410    ///
1411    /// let builder = prepare_request_builder();
1412    /// let response = builder.poller().until_done().await?;
1413    /// # gax::Result::<()>::Ok(()) });
1414    ///
1415    /// fn prepare_request_builder() -> BackupCluster {
1416    ///   # panic!();
1417    ///   // ... details omitted ...
1418    /// }
1419    /// ```
1420    #[derive(Clone, Debug)]
1421    pub struct BackupCluster(RequestBuilder<crate::model::BackupClusterRequest>);
1422
1423    impl BackupCluster {
1424        pub(crate) fn new(
1425            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
1426        ) -> Self {
1427            Self(RequestBuilder::new(stub))
1428        }
1429
1430        /// Sets the full request, replacing any prior values.
1431        pub fn with_request<V: Into<crate::model::BackupClusterRequest>>(mut self, v: V) -> Self {
1432            self.0.request = v.into();
1433            self
1434        }
1435
1436        /// Sets all the options, replacing any prior values.
1437        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
1438            self.0.options = v.into();
1439            self
1440        }
1441
1442        /// Sends the request.
1443        ///
1444        /// # Long running operations
1445        ///
1446        /// This starts, but does not poll, a longrunning operation. More information
1447        /// on [backup_cluster][crate::client::CloudRedisCluster::backup_cluster].
1448        pub async fn send(self) -> Result<longrunning::model::Operation> {
1449            (*self.0.stub)
1450                .backup_cluster(self.0.request, self.0.options)
1451                .await
1452                .map(gax::response::Response::into_body)
1453        }
1454
1455        /// Creates a [Poller][lro::Poller] to work with `backup_cluster`.
1456        pub fn poller(self) -> impl lro::Poller<crate::model::Cluster, wkt::Any> {
1457            type Operation = lro::internal::Operation<crate::model::Cluster, wkt::Any>;
1458            let polling_error_policy = self.0.stub.get_polling_error_policy(&self.0.options);
1459            let polling_backoff_policy = self.0.stub.get_polling_backoff_policy(&self.0.options);
1460
1461            let stub = self.0.stub.clone();
1462            let mut options = self.0.options.clone();
1463            options.set_retry_policy(gax::retry_policy::NeverRetry);
1464            let query = move |name| {
1465                let stub = stub.clone();
1466                let options = options.clone();
1467                async {
1468                    let op = GetOperation::new(stub)
1469                        .set_name(name)
1470                        .with_options(options)
1471                        .send()
1472                        .await?;
1473                    Ok(Operation::new(op))
1474                }
1475            };
1476
1477            let start = move || async {
1478                let op = self.send().await?;
1479                Ok(Operation::new(op))
1480            };
1481
1482            lro::internal::new_poller(polling_error_policy, polling_backoff_policy, start, query)
1483        }
1484
1485        /// Sets the value of [name][crate::model::BackupClusterRequest::name].
1486        ///
1487        /// This is a **required** field for requests.
1488        pub fn set_name<T: Into<std::string::String>>(mut self, v: T) -> Self {
1489            self.0.request.name = v.into();
1490            self
1491        }
1492
1493        /// Sets the value of [ttl][crate::model::BackupClusterRequest::ttl].
1494        pub fn set_ttl<T>(mut self, v: T) -> Self
1495        where
1496            T: std::convert::Into<wkt::Duration>,
1497        {
1498            self.0.request.ttl = std::option::Option::Some(v.into());
1499            self
1500        }
1501
1502        /// Sets or clears the value of [ttl][crate::model::BackupClusterRequest::ttl].
1503        pub fn set_or_clear_ttl<T>(mut self, v: std::option::Option<T>) -> Self
1504        where
1505            T: std::convert::Into<wkt::Duration>,
1506        {
1507            self.0.request.ttl = v.map(|x| x.into());
1508            self
1509        }
1510
1511        /// Sets the value of [backup_id][crate::model::BackupClusterRequest::backup_id].
1512        pub fn set_backup_id<T>(mut self, v: T) -> Self
1513        where
1514            T: std::convert::Into<std::string::String>,
1515        {
1516            self.0.request.backup_id = std::option::Option::Some(v.into());
1517            self
1518        }
1519
1520        /// Sets or clears the value of [backup_id][crate::model::BackupClusterRequest::backup_id].
1521        pub fn set_or_clear_backup_id<T>(mut self, v: std::option::Option<T>) -> Self
1522        where
1523            T: std::convert::Into<std::string::String>,
1524        {
1525            self.0.request.backup_id = v.map(|x| x.into());
1526            self
1527        }
1528    }
1529
1530    #[doc(hidden)]
1531    impl gax::options::internal::RequestBuilder for BackupCluster {
1532        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
1533            &mut self.0.options
1534        }
1535    }
1536
1537    /// The request builder for [CloudRedisCluster::list_locations][crate::client::CloudRedisCluster::list_locations] calls.
1538    ///
1539    /// # Example
1540    /// ```no_run
1541    /// # use google_cloud_redis_cluster_v1::builder;
1542    /// use builder::cloud_redis_cluster::ListLocations;
1543    /// # tokio_test::block_on(async {
1544    /// use gax::paginator::ItemPaginator;
1545    ///
1546    /// let builder = prepare_request_builder();
1547    /// let mut items = builder.by_item();
1548    /// while let Some(result) = items.next().await {
1549    ///   let item = result?;
1550    /// }
1551    /// # gax::Result::<()>::Ok(()) });
1552    ///
1553    /// fn prepare_request_builder() -> ListLocations {
1554    ///   # panic!();
1555    ///   // ... details omitted ...
1556    /// }
1557    /// ```
1558    #[derive(Clone, Debug)]
1559    pub struct ListLocations(RequestBuilder<location::model::ListLocationsRequest>);
1560
1561    impl ListLocations {
1562        pub(crate) fn new(
1563            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
1564        ) -> Self {
1565            Self(RequestBuilder::new(stub))
1566        }
1567
1568        /// Sets the full request, replacing any prior values.
1569        pub fn with_request<V: Into<location::model::ListLocationsRequest>>(
1570            mut self,
1571            v: V,
1572        ) -> Self {
1573            self.0.request = v.into();
1574            self
1575        }
1576
1577        /// Sets all the options, replacing any prior values.
1578        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
1579            self.0.options = v.into();
1580            self
1581        }
1582
1583        /// Sends the request.
1584        pub async fn send(self) -> Result<location::model::ListLocationsResponse> {
1585            (*self.0.stub)
1586                .list_locations(self.0.request, self.0.options)
1587                .await
1588                .map(gax::response::Response::into_body)
1589        }
1590
1591        /// Streams each page in the collection.
1592        pub fn by_page(
1593            self,
1594        ) -> impl gax::paginator::Paginator<location::model::ListLocationsResponse, gax::error::Error>
1595        {
1596            use std::clone::Clone;
1597            let token = self.0.request.page_token.clone();
1598            let execute = move |token: String| {
1599                let mut builder = self.clone();
1600                builder.0.request = builder.0.request.set_page_token(token);
1601                builder.send()
1602            };
1603            gax::paginator::internal::new_paginator(token, execute)
1604        }
1605
1606        /// Streams each item in the collection.
1607        pub fn by_item(
1608            self,
1609        ) -> impl gax::paginator::ItemPaginator<location::model::ListLocationsResponse, gax::error::Error>
1610        {
1611            use gax::paginator::Paginator;
1612            self.by_page().items()
1613        }
1614
1615        /// Sets the value of [name][location::model::ListLocationsRequest::name].
1616        pub fn set_name<T: Into<std::string::String>>(mut self, v: T) -> Self {
1617            self.0.request.name = v.into();
1618            self
1619        }
1620
1621        /// Sets the value of [filter][location::model::ListLocationsRequest::filter].
1622        pub fn set_filter<T: Into<std::string::String>>(mut self, v: T) -> Self {
1623            self.0.request.filter = v.into();
1624            self
1625        }
1626
1627        /// Sets the value of [page_size][location::model::ListLocationsRequest::page_size].
1628        pub fn set_page_size<T: Into<i32>>(mut self, v: T) -> Self {
1629            self.0.request.page_size = v.into();
1630            self
1631        }
1632
1633        /// Sets the value of [page_token][location::model::ListLocationsRequest::page_token].
1634        pub fn set_page_token<T: Into<std::string::String>>(mut self, v: T) -> Self {
1635            self.0.request.page_token = v.into();
1636            self
1637        }
1638    }
1639
1640    #[doc(hidden)]
1641    impl gax::options::internal::RequestBuilder for ListLocations {
1642        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
1643            &mut self.0.options
1644        }
1645    }
1646
1647    /// The request builder for [CloudRedisCluster::get_location][crate::client::CloudRedisCluster::get_location] calls.
1648    ///
1649    /// # Example
1650    /// ```no_run
1651    /// # use google_cloud_redis_cluster_v1::builder;
1652    /// use builder::cloud_redis_cluster::GetLocation;
1653    /// # tokio_test::block_on(async {
1654    ///
1655    /// let builder = prepare_request_builder();
1656    /// let response = builder.send().await?;
1657    /// # gax::Result::<()>::Ok(()) });
1658    ///
1659    /// fn prepare_request_builder() -> GetLocation {
1660    ///   # panic!();
1661    ///   // ... details omitted ...
1662    /// }
1663    /// ```
1664    #[derive(Clone, Debug)]
1665    pub struct GetLocation(RequestBuilder<location::model::GetLocationRequest>);
1666
1667    impl GetLocation {
1668        pub(crate) fn new(
1669            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
1670        ) -> Self {
1671            Self(RequestBuilder::new(stub))
1672        }
1673
1674        /// Sets the full request, replacing any prior values.
1675        pub fn with_request<V: Into<location::model::GetLocationRequest>>(mut self, v: V) -> Self {
1676            self.0.request = v.into();
1677            self
1678        }
1679
1680        /// Sets all the options, replacing any prior values.
1681        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
1682            self.0.options = v.into();
1683            self
1684        }
1685
1686        /// Sends the request.
1687        pub async fn send(self) -> Result<location::model::Location> {
1688            (*self.0.stub)
1689                .get_location(self.0.request, self.0.options)
1690                .await
1691                .map(gax::response::Response::into_body)
1692        }
1693
1694        /// Sets the value of [name][location::model::GetLocationRequest::name].
1695        pub fn set_name<T: Into<std::string::String>>(mut self, v: T) -> Self {
1696            self.0.request.name = v.into();
1697            self
1698        }
1699    }
1700
1701    #[doc(hidden)]
1702    impl gax::options::internal::RequestBuilder for GetLocation {
1703        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
1704            &mut self.0.options
1705        }
1706    }
1707
1708    /// The request builder for [CloudRedisCluster::list_operations][crate::client::CloudRedisCluster::list_operations] calls.
1709    ///
1710    /// # Example
1711    /// ```no_run
1712    /// # use google_cloud_redis_cluster_v1::builder;
1713    /// use builder::cloud_redis_cluster::ListOperations;
1714    /// # tokio_test::block_on(async {
1715    /// use gax::paginator::ItemPaginator;
1716    ///
1717    /// let builder = prepare_request_builder();
1718    /// let mut items = builder.by_item();
1719    /// while let Some(result) = items.next().await {
1720    ///   let item = result?;
1721    /// }
1722    /// # gax::Result::<()>::Ok(()) });
1723    ///
1724    /// fn prepare_request_builder() -> ListOperations {
1725    ///   # panic!();
1726    ///   // ... details omitted ...
1727    /// }
1728    /// ```
1729    #[derive(Clone, Debug)]
1730    pub struct ListOperations(RequestBuilder<longrunning::model::ListOperationsRequest>);
1731
1732    impl ListOperations {
1733        pub(crate) fn new(
1734            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
1735        ) -> Self {
1736            Self(RequestBuilder::new(stub))
1737        }
1738
1739        /// Sets the full request, replacing any prior values.
1740        pub fn with_request<V: Into<longrunning::model::ListOperationsRequest>>(
1741            mut self,
1742            v: V,
1743        ) -> Self {
1744            self.0.request = v.into();
1745            self
1746        }
1747
1748        /// Sets all the options, replacing any prior values.
1749        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
1750            self.0.options = v.into();
1751            self
1752        }
1753
1754        /// Sends the request.
1755        pub async fn send(self) -> Result<longrunning::model::ListOperationsResponse> {
1756            (*self.0.stub)
1757                .list_operations(self.0.request, self.0.options)
1758                .await
1759                .map(gax::response::Response::into_body)
1760        }
1761
1762        /// Streams each page in the collection.
1763        pub fn by_page(
1764            self,
1765        ) -> impl gax::paginator::Paginator<longrunning::model::ListOperationsResponse, gax::error::Error>
1766        {
1767            use std::clone::Clone;
1768            let token = self.0.request.page_token.clone();
1769            let execute = move |token: String| {
1770                let mut builder = self.clone();
1771                builder.0.request = builder.0.request.set_page_token(token);
1772                builder.send()
1773            };
1774            gax::paginator::internal::new_paginator(token, execute)
1775        }
1776
1777        /// Streams each item in the collection.
1778        pub fn by_item(
1779            self,
1780        ) -> impl gax::paginator::ItemPaginator<
1781            longrunning::model::ListOperationsResponse,
1782            gax::error::Error,
1783        > {
1784            use gax::paginator::Paginator;
1785            self.by_page().items()
1786        }
1787
1788        /// Sets the value of [name][longrunning::model::ListOperationsRequest::name].
1789        pub fn set_name<T: Into<std::string::String>>(mut self, v: T) -> Self {
1790            self.0.request.name = v.into();
1791            self
1792        }
1793
1794        /// Sets the value of [filter][longrunning::model::ListOperationsRequest::filter].
1795        pub fn set_filter<T: Into<std::string::String>>(mut self, v: T) -> Self {
1796            self.0.request.filter = v.into();
1797            self
1798        }
1799
1800        /// Sets the value of [page_size][longrunning::model::ListOperationsRequest::page_size].
1801        pub fn set_page_size<T: Into<i32>>(mut self, v: T) -> Self {
1802            self.0.request.page_size = v.into();
1803            self
1804        }
1805
1806        /// Sets the value of [page_token][longrunning::model::ListOperationsRequest::page_token].
1807        pub fn set_page_token<T: Into<std::string::String>>(mut self, v: T) -> Self {
1808            self.0.request.page_token = v.into();
1809            self
1810        }
1811
1812        /// Sets the value of [return_partial_success][longrunning::model::ListOperationsRequest::return_partial_success].
1813        pub fn set_return_partial_success<T: Into<bool>>(mut self, v: T) -> Self {
1814            self.0.request.return_partial_success = v.into();
1815            self
1816        }
1817    }
1818
1819    #[doc(hidden)]
1820    impl gax::options::internal::RequestBuilder for ListOperations {
1821        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
1822            &mut self.0.options
1823        }
1824    }
1825
1826    /// The request builder for [CloudRedisCluster::get_operation][crate::client::CloudRedisCluster::get_operation] calls.
1827    ///
1828    /// # Example
1829    /// ```no_run
1830    /// # use google_cloud_redis_cluster_v1::builder;
1831    /// use builder::cloud_redis_cluster::GetOperation;
1832    /// # tokio_test::block_on(async {
1833    ///
1834    /// let builder = prepare_request_builder();
1835    /// let response = builder.send().await?;
1836    /// # gax::Result::<()>::Ok(()) });
1837    ///
1838    /// fn prepare_request_builder() -> GetOperation {
1839    ///   # panic!();
1840    ///   // ... details omitted ...
1841    /// }
1842    /// ```
1843    #[derive(Clone, Debug)]
1844    pub struct GetOperation(RequestBuilder<longrunning::model::GetOperationRequest>);
1845
1846    impl GetOperation {
1847        pub(crate) fn new(
1848            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
1849        ) -> Self {
1850            Self(RequestBuilder::new(stub))
1851        }
1852
1853        /// Sets the full request, replacing any prior values.
1854        pub fn with_request<V: Into<longrunning::model::GetOperationRequest>>(
1855            mut self,
1856            v: V,
1857        ) -> Self {
1858            self.0.request = v.into();
1859            self
1860        }
1861
1862        /// Sets all the options, replacing any prior values.
1863        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
1864            self.0.options = v.into();
1865            self
1866        }
1867
1868        /// Sends the request.
1869        pub async fn send(self) -> Result<longrunning::model::Operation> {
1870            (*self.0.stub)
1871                .get_operation(self.0.request, self.0.options)
1872                .await
1873                .map(gax::response::Response::into_body)
1874        }
1875
1876        /// Sets the value of [name][longrunning::model::GetOperationRequest::name].
1877        pub fn set_name<T: Into<std::string::String>>(mut self, v: T) -> Self {
1878            self.0.request.name = v.into();
1879            self
1880        }
1881    }
1882
1883    #[doc(hidden)]
1884    impl gax::options::internal::RequestBuilder for GetOperation {
1885        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
1886            &mut self.0.options
1887        }
1888    }
1889
1890    /// The request builder for [CloudRedisCluster::delete_operation][crate::client::CloudRedisCluster::delete_operation] calls.
1891    ///
1892    /// # Example
1893    /// ```no_run
1894    /// # use google_cloud_redis_cluster_v1::builder;
1895    /// use builder::cloud_redis_cluster::DeleteOperation;
1896    /// # tokio_test::block_on(async {
1897    ///
1898    /// let builder = prepare_request_builder();
1899    /// let response = builder.send().await?;
1900    /// # gax::Result::<()>::Ok(()) });
1901    ///
1902    /// fn prepare_request_builder() -> DeleteOperation {
1903    ///   # panic!();
1904    ///   // ... details omitted ...
1905    /// }
1906    /// ```
1907    #[derive(Clone, Debug)]
1908    pub struct DeleteOperation(RequestBuilder<longrunning::model::DeleteOperationRequest>);
1909
1910    impl DeleteOperation {
1911        pub(crate) fn new(
1912            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
1913        ) -> Self {
1914            Self(RequestBuilder::new(stub))
1915        }
1916
1917        /// Sets the full request, replacing any prior values.
1918        pub fn with_request<V: Into<longrunning::model::DeleteOperationRequest>>(
1919            mut self,
1920            v: V,
1921        ) -> Self {
1922            self.0.request = v.into();
1923            self
1924        }
1925
1926        /// Sets all the options, replacing any prior values.
1927        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
1928            self.0.options = v.into();
1929            self
1930        }
1931
1932        /// Sends the request.
1933        pub async fn send(self) -> Result<()> {
1934            (*self.0.stub)
1935                .delete_operation(self.0.request, self.0.options)
1936                .await
1937                .map(gax::response::Response::into_body)
1938        }
1939
1940        /// Sets the value of [name][longrunning::model::DeleteOperationRequest::name].
1941        pub fn set_name<T: Into<std::string::String>>(mut self, v: T) -> Self {
1942            self.0.request.name = v.into();
1943            self
1944        }
1945    }
1946
1947    #[doc(hidden)]
1948    impl gax::options::internal::RequestBuilder for DeleteOperation {
1949        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
1950            &mut self.0.options
1951        }
1952    }
1953
1954    /// The request builder for [CloudRedisCluster::cancel_operation][crate::client::CloudRedisCluster::cancel_operation] calls.
1955    ///
1956    /// # Example
1957    /// ```no_run
1958    /// # use google_cloud_redis_cluster_v1::builder;
1959    /// use builder::cloud_redis_cluster::CancelOperation;
1960    /// # tokio_test::block_on(async {
1961    ///
1962    /// let builder = prepare_request_builder();
1963    /// let response = builder.send().await?;
1964    /// # gax::Result::<()>::Ok(()) });
1965    ///
1966    /// fn prepare_request_builder() -> CancelOperation {
1967    ///   # panic!();
1968    ///   // ... details omitted ...
1969    /// }
1970    /// ```
1971    #[derive(Clone, Debug)]
1972    pub struct CancelOperation(RequestBuilder<longrunning::model::CancelOperationRequest>);
1973
1974    impl CancelOperation {
1975        pub(crate) fn new(
1976            stub: std::sync::Arc<dyn super::super::stub::dynamic::CloudRedisCluster>,
1977        ) -> Self {
1978            Self(RequestBuilder::new(stub))
1979        }
1980
1981        /// Sets the full request, replacing any prior values.
1982        pub fn with_request<V: Into<longrunning::model::CancelOperationRequest>>(
1983            mut self,
1984            v: V,
1985        ) -> Self {
1986            self.0.request = v.into();
1987            self
1988        }
1989
1990        /// Sets all the options, replacing any prior values.
1991        pub fn with_options<V: Into<gax::options::RequestOptions>>(mut self, v: V) -> Self {
1992            self.0.options = v.into();
1993            self
1994        }
1995
1996        /// Sends the request.
1997        pub async fn send(self) -> Result<()> {
1998            (*self.0.stub)
1999                .cancel_operation(self.0.request, self.0.options)
2000                .await
2001                .map(gax::response::Response::into_body)
2002        }
2003
2004        /// Sets the value of [name][longrunning::model::CancelOperationRequest::name].
2005        pub fn set_name<T: Into<std::string::String>>(mut self, v: T) -> Self {
2006            self.0.request.name = v.into();
2007            self
2008        }
2009    }
2010
2011    #[doc(hidden)]
2012    impl gax::options::internal::RequestBuilder for CancelOperation {
2013        fn request_options(&mut self) -> &mut gax::options::RequestOptions {
2014            &mut self.0.options
2015        }
2016    }
2017}