Skip to main content

origincloud_pvs/generated/
origincloud.pvs.v1beta1.rs

1// Code generated by origincloud-sdk-generator. DO NOT EDIT.
2// source: origincloud/pvs/v1beta1/snapshot.proto
3// source: origincloud/pvs/v1beta1/storage_class.proto
4// source: origincloud/pvs/v1beta1/volume.proto
5
6/// A point-in-time copy of a volume.
7#[derive(Clone, PartialEq, ::prost::Message)]
8pub struct Snapshot {
9    /// The snapshot's resource name.
10    #[prost(string, tag = "1")]
11    pub name: ::prost::alloc::string::String,
12    /// The snapshot's URN, the identifier access policies and the audit log
13    /// use.
14    #[prost(string, tag = "2")]
15    pub urn: ::prost::alloc::string::String,
16    /// The volume copied, in the same project and zone.
17    #[prost(string, tag = "3")]
18    pub source_volume: ::prost::alloc::string::String,
19    /// The source volume's size in GiB when it was copied: the least a volume
20    /// created from the snapshot holds.
21    #[prost(int32, tag = "4")]
22    pub source_size_gib: i32,
23    /// Where the copy is.
24    #[prost(enumeration = "snapshot::State", tag = "5")]
25    pub state: i32,
26    /// Why the snapshot is in `snapshot::State::Error`; empty otherwise.
27    #[prost(string, tag = "6")]
28    pub state_reason: ::prost::alloc::string::String,
29    /// Whether it is protected.
30    #[prost(enumeration = "snapshot::ProtectionState", tag = "7")]
31    pub protection_state: i32,
32    /// Why the last protection change failed, when `protection_state` is
33    /// `snapshot::ProtectionState::ProtectionFailed`.
34    #[prost(string, tag = "8")]
35    pub protection_reason: ::prost::alloc::string::String,
36    /// The principal that took the snapshot, such as `user:<id>` or
37    /// `service_account:<id>`.
38    #[prost(string, tag = "10")]
39    pub creator: ::prost::alloc::string::String,
40    /// Labels of your own, at most 50. The `origin:name` tag is the name the
41    /// console shows.
42    #[prost(btree_map = "string, string", tag = "11")]
43    pub tags: ::prost::alloc::collections::BTreeMap<
44        ::prost::alloc::string::String,
45        ::prost::alloc::string::String,
46    >,
47}
48/// Nested message and enum types in `Snapshot`.
49pub mod snapshot {
50    /// Where the copy is.
51    #[derive(
52        Clone,
53        Copy,
54        Debug,
55        PartialEq,
56        Eq,
57        Hash,
58        PartialOrd,
59        Ord,
60        ::prost::Enumeration
61    )]
62    #[repr(i32)]
63    pub enum State {
64        /// Not set.
65        Unspecified = 0,
66        /// Being copied.
67        Pending = 1,
68        /// Copied.
69        Completed = 2,
70        /// Being deleted.
71        Deleting = 3,
72        /// Deleted. Readable by name for a day, never listed.
73        Deleted = 4,
74        /// The copy or its removal failed; `state_reason` says which. There is
75        /// no usable copy behind it: delete it.
76        Error = 5,
77    }
78    impl State {
79        /// String value of the enum field names used in the ProtoBuf definition.
80        ///
81        /// The values are not transformed in any way and thus are considered stable
82        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
83        pub fn as_str_name(&self) -> &'static str {
84            match self {
85                Self::Unspecified => "STATE_UNSPECIFIED",
86                Self::Pending => "PENDING",
87                Self::Completed => "COMPLETED",
88                Self::Deleting => "DELETING",
89                Self::Deleted => "DELETED",
90                Self::Error => "ERROR",
91            }
92        }
93        /// Creates an enum from field names used in the ProtoBuf definition.
94        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
95            match value {
96                "STATE_UNSPECIFIED" => Some(Self::Unspecified),
97                "PENDING" => Some(Self::Pending),
98                "COMPLETED" => Some(Self::Completed),
99                "DELETING" => Some(Self::Deleting),
100                "DELETED" => Some(Self::Deleted),
101                "ERROR" => Some(Self::Error),
102                _ => None,
103            }
104        }
105    }
106    /// Whether the snapshot is protected, independently of `state`.
107    #[derive(
108        Clone,
109        Copy,
110        Debug,
111        PartialEq,
112        Eq,
113        Hash,
114        PartialOrd,
115        Ord,
116        ::prost::Enumeration
117    )]
118    #[repr(i32)]
119    pub enum ProtectionState {
120        /// Not set.
121        Unspecified = 0,
122        /// Not protected: it can be deleted, and is no source.
123        Unprotected = 1,
124        /// Becoming protected.
125        Protecting = 2,
126        /// Protected: a source of volumes and images, and can't be deleted.
127        Protected = 3,
128        /// Becoming unprotected.
129        Unprotecting = 4,
130        /// The last change couldn't be applied; `protection_reason` says why.
131        /// Protect or unprotect it again.
132        ProtectionFailed = 5,
133    }
134    impl ProtectionState {
135        /// String value of the enum field names used in the ProtoBuf definition.
136        ///
137        /// The values are not transformed in any way and thus are considered stable
138        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
139        pub fn as_str_name(&self) -> &'static str {
140            match self {
141                Self::Unspecified => "PROTECTION_STATE_UNSPECIFIED",
142                Self::Unprotected => "UNPROTECTED",
143                Self::Protecting => "PROTECTING",
144                Self::Protected => "PROTECTED",
145                Self::Unprotecting => "UNPROTECTING",
146                Self::ProtectionFailed => "PROTECTION_FAILED",
147            }
148        }
149        /// Creates an enum from field names used in the ProtoBuf definition.
150        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
151            match value {
152                "PROTECTION_STATE_UNSPECIFIED" => Some(Self::Unspecified),
153                "UNPROTECTED" => Some(Self::Unprotected),
154                "PROTECTING" => Some(Self::Protecting),
155                "PROTECTED" => Some(Self::Protected),
156                "UNPROTECTING" => Some(Self::Unprotecting),
157                "PROTECTION_FAILED" => Some(Self::ProtectionFailed),
158                _ => None,
159            }
160        }
161    }
162}
163/// The request for GetSnapshot.
164#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
165pub struct GetSnapshotRequest {
166    /// The snapshot to return.
167    #[prost(string, tag = "1")]
168    pub name: ::prost::alloc::string::String,
169}
170/// The request for ListSnapshots.
171#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
172pub struct ListSnapshotsRequest {
173    /// The zone whose snapshots to list, `projects/{project}/zones/{zone}`.
174    #[prost(string, tag = "1")]
175    pub parent: ::prost::alloc::string::String,
176    /// The most snapshots to return; the server clamps it, and 0 means its
177    /// default.
178    #[prost(int32, tag = "2")]
179    pub page_size: i32,
180    /// A previous response's `next_page_token`, for the page after it.
181    #[prost(string, tag = "3")]
182    pub page_token: ::prost::alloc::string::String,
183}
184/// The response for ListSnapshots.
185#[derive(Clone, PartialEq, ::prost::Message)]
186pub struct ListSnapshotsResponse {
187    /// The snapshots on this page.
188    #[prost(message, repeated, tag = "1")]
189    pub snapshots: ::prost::alloc::vec::Vec<Snapshot>,
190    /// The token for the next page; empty on the last one.
191    #[prost(string, tag = "2")]
192    pub next_page_token: ::prost::alloc::string::String,
193}
194/// The request for CreateSnapshot.
195#[derive(Clone, PartialEq, ::prost::Message)]
196pub struct CreateSnapshotRequest {
197    /// The zone of the volume to copy, `projects/{project}/zones/{zone}`.
198    #[prost(string, tag = "1")]
199    pub parent: ::prost::alloc::string::String,
200    /// The snapshot to take: its source volume, and optionally its tags.
201    #[prost(message, optional, tag = "2")]
202    pub snapshot: ::core::option::Option<Snapshot>,
203    /// A UUID; a repeat with the same id returns the first request's
204    /// operation instead of taking a second snapshot.
205    #[prost(string, tag = "3")]
206    pub request_id: ::prost::alloc::string::String,
207}
208/// The request for UpdateSnapshot.
209#[derive(Clone, PartialEq, ::prost::Message)]
210pub struct UpdateSnapshotRequest {
211    /// The snapshot, by its name, with the tags to set.
212    #[prost(message, optional, tag = "1")]
213    pub snapshot: ::core::option::Option<Snapshot>,
214    /// The fields to change: `tags`, the only field that changes. `*` is the
215    /// same.
216    #[prost(message, optional, tag = "2")]
217    pub update_mask: ::core::option::Option<::origincloud_core::protobuf::FieldMask>,
218}
219/// The request for DeleteSnapshot.
220#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
221pub struct DeleteSnapshotRequest {
222    /// The snapshot to delete.
223    #[prost(string, tag = "1")]
224    pub name: ::prost::alloc::string::String,
225    /// A UUID; a repeat with the same id returns the first request's
226    /// operation.
227    #[prost(string, tag = "2")]
228    pub request_id: ::prost::alloc::string::String,
229}
230/// The request for ProtectSnapshot.
231#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
232pub struct ProtectSnapshotRequest {
233    /// The snapshot to protect; it must be `snapshot::State::Completed`.
234    #[prost(string, tag = "1")]
235    pub name: ::prost::alloc::string::String,
236    /// A UUID; a repeat with the same id returns the first request's
237    /// operation.
238    #[prost(string, tag = "2")]
239    pub request_id: ::prost::alloc::string::String,
240}
241/// The request for UnprotectSnapshot.
242#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
243pub struct UnprotectSnapshotRequest {
244    /// The snapshot to unprotect; it must be `snapshot::State::Completed`, or `snapshot::State::Error` so that
245    /// it can then be deleted.
246    #[prost(string, tag = "1")]
247    pub name: ::prost::alloc::string::String,
248    /// A UUID; a repeat with the same id returns the first request's
249    /// operation.
250    #[prost(string, tag = "2")]
251    pub request_id: ::prost::alloc::string::String,
252}
253/// A storage tier a volume is created in.
254#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
255pub struct StorageClass {
256    /// The class's resource name, `storageClasses/gp1`.
257    #[prost(string, tag = "1")]
258    pub name: ::prost::alloc::string::String,
259    /// The name the console shows.
260    #[prost(string, tag = "2")]
261    pub display_name: ::prost::alloc::string::String,
262    /// The media the class is backed by.
263    #[prost(enumeration = "storage_class::Media", tag = "3")]
264    pub media: i32,
265    /// Whether a volume created without a storage class is created in this
266    /// one.
267    #[prost(bool, tag = "4")]
268    pub default_class: bool,
269    /// Whether the class can be selected right now. A class that is listed
270    /// but not available is a published tier not yet on sale.
271    #[prost(bool, tag = "5")]
272    pub available: bool,
273    /// The I/O operations per second a volume of the class is limited to; 0
274    /// for a class not on sale.
275    #[prost(int32, tag = "6")]
276    pub baseline_iops: i32,
277    /// The MiB per second a volume of the class is limited to; 0 for a class
278    /// not on sale.
279    #[prost(int32, tag = "7")]
280    pub baseline_throughput_mibps: i32,
281}
282/// Nested message and enum types in `StorageClass`.
283pub mod storage_class {
284    /// The media a class is backed by.
285    #[derive(
286        Clone,
287        Copy,
288        Debug,
289        PartialEq,
290        Eq,
291        Hash,
292        PartialOrd,
293        Ord,
294        ::prost::Enumeration
295    )]
296    #[repr(i32)]
297    pub enum Media {
298        /// Not set.
299        Unspecified = 0,
300        /// Solid-state storage.
301        Ssd = 1,
302        /// Rotational (hard-disk) storage.
303        Hdd = 2,
304    }
305    impl Media {
306        /// String value of the enum field names used in the ProtoBuf definition.
307        ///
308        /// The values are not transformed in any way and thus are considered stable
309        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
310        pub fn as_str_name(&self) -> &'static str {
311            match self {
312                Self::Unspecified => "MEDIA_UNSPECIFIED",
313                Self::Ssd => "SSD",
314                Self::Hdd => "HDD",
315            }
316        }
317        /// Creates an enum from field names used in the ProtoBuf definition.
318        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
319            match value {
320                "MEDIA_UNSPECIFIED" => Some(Self::Unspecified),
321                "SSD" => Some(Self::Ssd),
322                "HDD" => Some(Self::Hdd),
323                _ => None,
324            }
325        }
326    }
327}
328/// The request for GetStorageClass.
329#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
330pub struct GetStorageClassRequest {
331    /// The class to return, `storageClasses/{storage_class}`.
332    #[prost(string, tag = "1")]
333    pub name: ::prost::alloc::string::String,
334}
335/// The request for ListStorageClasses. The catalog is small and bounded by
336/// the platform, so it comes in one page.
337#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
338pub struct ListStorageClassesRequest {}
339/// The response for ListStorageClasses.
340#[derive(Clone, PartialEq, ::prost::Message)]
341pub struct ListStorageClassesResponse {
342    /// Every storage class, in catalog order.
343    #[prost(message, repeated, tag = "1")]
344    pub storage_classes: ::prost::alloc::vec::Vec<StorageClass>,
345}
346/// A block storage volume in one zone.
347#[derive(Clone, PartialEq, ::prost::Message)]
348pub struct Volume {
349    /// The volume's resource name.
350    #[prost(string, tag = "1")]
351    pub name: ::prost::alloc::string::String,
352    /// The volume's URN, the identifier access policies and the audit log
353    /// use.
354    #[prost(string, tag = "2")]
355    pub urn: ::prost::alloc::string::String,
356    /// The size in GiB, at least 1. Growing it resizes the volume; it never
357    /// shrinks.
358    #[prost(int32, tag = "3")]
359    pub size_gib: i32,
360    /// The storage class, `storageClasses/{storage_class}`. The default class
361    /// when left empty.
362    #[prost(string, tag = "4")]
363    pub storage_class: ::prost::alloc::string::String,
364    /// The snapshot the volume was created from, in the same project and
365    /// zone; empty for an empty volume. The volume is at least the snapshot's
366    /// size.
367    #[prost(string, tag = "5")]
368    pub source_snapshot: ::prost::alloc::string::String,
369    /// Where the volume is in its lifecycle.
370    #[prost(enumeration = "volume::State", tag = "6")]
371    pub state: i32,
372    /// Why the volume is in `volume::State::Error`; empty otherwise.
373    #[prost(string, tag = "7")]
374    pub state_reason: ::prost::alloc::string::String,
375    /// When `state` is `volume::State::InUse`, the id of the volume attachment holding it.
376    #[prost(string, tag = "8")]
377    pub attachment: ::prost::alloc::string::String,
378    /// Where the last resize is.
379    #[prost(enumeration = "volume::ResizeState", tag = "9")]
380    pub resize_state: i32,
381    /// Why the last resize failed, when `resize_state` is `volume::ResizeState::ResizeFailed`.
382    #[prost(string, tag = "10")]
383    pub resize_reason: ::prost::alloc::string::String,
384    /// The size a resize under way is heading for; 0 when none is.
385    /// `size_gib` changes once the resize is confirmed.
386    #[prost(int32, tag = "11")]
387    pub pending_size_gib: i32,
388    /// Why the volume is still here after the instance it was created with
389    /// was terminated; empty in every other case. Most often a snapshot of it
390    /// exists, and a snapshot depends on its volume's data.
391    #[prost(string, tag = "12")]
392    pub retention_note: ::prost::alloc::string::String,
393    /// The most I/O operations per second the volume serves, reads and writes
394    /// combined: a ceiling, not a guaranteed rate. 0 when it isn't limited.
395    #[prost(int32, tag = "13")]
396    pub iops: i32,
397    /// The most MiB per second the volume transfers, reads and writes
398    /// combined: a ceiling, not a guaranteed rate. 0 when it isn't limited.
399    #[prost(int32, tag = "14")]
400    pub throughput_mibps: i32,
401    /// The principal that created the volume, such as `user:<id>` or
402    /// `service_account:<id>`.
403    #[prost(string, tag = "15")]
404    pub creator: ::prost::alloc::string::String,
405    /// Labels of your own, at most 50. The `origin:name` tag is the name the
406    /// console shows.
407    #[prost(btree_map = "string, string", tag = "16")]
408    pub tags: ::prost::alloc::collections::BTreeMap<
409        ::prost::alloc::string::String,
410        ::prost::alloc::string::String,
411    >,
412}
413/// Nested message and enum types in `Volume`.
414pub mod volume {
415    /// Where the volume is in its lifecycle.
416    #[derive(
417        Clone,
418        Copy,
419        Debug,
420        PartialEq,
421        Eq,
422        Hash,
423        PartialOrd,
424        Ord,
425        ::prost::Enumeration
426    )]
427    #[repr(i32)]
428    pub enum State {
429        /// Not set.
430        Unspecified = 0,
431        /// Being created.
432        Creating = 1,
433        /// Ready to attach.
434        Available = 2,
435        /// Attached to an instance.
436        InUse = 3,
437        /// Being deleted.
438        Deleting = 4,
439        /// Deleted. Readable by name for a day, never listed.
440        Deleted = 5,
441        /// Its storage couldn't be created or removed; `state_reason` says
442        /// which. It can be deleted again.
443        Error = 6,
444    }
445    impl State {
446        /// String value of the enum field names used in the ProtoBuf definition.
447        ///
448        /// The values are not transformed in any way and thus are considered stable
449        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
450        pub fn as_str_name(&self) -> &'static str {
451            match self {
452                Self::Unspecified => "STATE_UNSPECIFIED",
453                Self::Creating => "CREATING",
454                Self::Available => "AVAILABLE",
455                Self::InUse => "IN_USE",
456                Self::Deleting => "DELETING",
457                Self::Deleted => "DELETED",
458                Self::Error => "ERROR",
459            }
460        }
461        /// Creates an enum from field names used in the ProtoBuf definition.
462        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
463            match value {
464                "STATE_UNSPECIFIED" => Some(Self::Unspecified),
465                "CREATING" => Some(Self::Creating),
466                "AVAILABLE" => Some(Self::Available),
467                "IN_USE" => Some(Self::InUse),
468                "DELETING" => Some(Self::Deleting),
469                "DELETED" => Some(Self::Deleted),
470                "ERROR" => Some(Self::Error),
471                _ => None,
472            }
473        }
474    }
475    /// Where a resize is.
476    #[derive(
477        Clone,
478        Copy,
479        Debug,
480        PartialEq,
481        Eq,
482        Hash,
483        PartialOrd,
484        Ord,
485        ::prost::Enumeration
486    )]
487    #[repr(i32)]
488    pub enum ResizeState {
489        /// Not set.
490        Unspecified = 0,
491        /// No resize is under way; the last one, if any, finished.
492        ResizeCompleted = 1,
493        /// Growing to `pending_size_gib`.
494        Resizing = 2,
495        /// The last resize failed; `resize_reason` says why. The volume and its
496        /// data are unaffected.
497        ResizeFailed = 3,
498    }
499    impl ResizeState {
500        /// String value of the enum field names used in the ProtoBuf definition.
501        ///
502        /// The values are not transformed in any way and thus are considered stable
503        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
504        pub fn as_str_name(&self) -> &'static str {
505            match self {
506                Self::Unspecified => "RESIZE_STATE_UNSPECIFIED",
507                Self::ResizeCompleted => "RESIZE_COMPLETED",
508                Self::Resizing => "RESIZING",
509                Self::ResizeFailed => "RESIZE_FAILED",
510            }
511        }
512        /// Creates an enum from field names used in the ProtoBuf definition.
513        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
514            match value {
515                "RESIZE_STATE_UNSPECIFIED" => Some(Self::Unspecified),
516                "RESIZE_COMPLETED" => Some(Self::ResizeCompleted),
517                "RESIZING" => Some(Self::Resizing),
518                "RESIZE_FAILED" => Some(Self::ResizeFailed),
519                _ => None,
520            }
521        }
522    }
523}
524/// The request for GetVolume.
525#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
526pub struct GetVolumeRequest {
527    /// The volume to return.
528    #[prost(string, tag = "1")]
529    pub name: ::prost::alloc::string::String,
530}
531/// The request for ListVolumes.
532#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
533pub struct ListVolumesRequest {
534    /// The zone whose volumes to list, `projects/{project}/zones/{zone}`.
535    #[prost(string, tag = "1")]
536    pub parent: ::prost::alloc::string::String,
537    /// The most volumes to return; the server clamps it, and 0 means its
538    /// default.
539    #[prost(int32, tag = "2")]
540    pub page_size: i32,
541    /// A previous response's `next_page_token`, for the page after it.
542    #[prost(string, tag = "3")]
543    pub page_token: ::prost::alloc::string::String,
544}
545/// The response for ListVolumes.
546#[derive(Clone, PartialEq, ::prost::Message)]
547pub struct ListVolumesResponse {
548    /// The volumes on this page.
549    #[prost(message, repeated, tag = "1")]
550    pub volumes: ::prost::alloc::vec::Vec<Volume>,
551    /// The token for the next page; empty on the last one.
552    #[prost(string, tag = "2")]
553    pub next_page_token: ::prost::alloc::string::String,
554}
555/// The request for CreateVolume.
556#[derive(Clone, PartialEq, ::prost::Message)]
557pub struct CreateVolumeRequest {
558    /// The zone to create the volume in, `projects/{project}/zones/{zone}`.
559    #[prost(string, tag = "1")]
560    pub parent: ::prost::alloc::string::String,
561    /// The volume to create: its size, and optionally its storage class,
562    /// source snapshot and tags.
563    #[prost(message, optional, tag = "2")]
564    pub volume: ::core::option::Option<Volume>,
565    /// A UUID; a repeat with the same id returns the first request's
566    /// operation instead of creating a second volume.
567    #[prost(string, tag = "3")]
568    pub request_id: ::prost::alloc::string::String,
569}
570/// The request for ImportVolume.
571#[derive(Clone, PartialEq, ::prost::Message)]
572pub struct ImportVolumeRequest {
573    /// The zone to create the volume in, `projects/{project}/zones/{zone}`.
574    #[prost(string, tag = "1")]
575    pub parent: ::prost::alloc::string::String,
576    /// The volume to create: its size, which must hold the image, and
577    /// optionally its storage class and tags.
578    #[prost(message, optional, tag = "2")]
579    pub volume: ::core::option::Option<Volume>,
580    /// The URL of the disk image, which the platform downloads over HTTP or
581    /// HTTPS: it must be reachable from the platform.
582    #[prost(string, tag = "3")]
583    pub source_url: ::prost::alloc::string::String,
584    /// A UUID; a repeat with the same id returns the first request's
585    /// operation instead of importing twice.
586    #[prost(string, tag = "4")]
587    pub request_id: ::prost::alloc::string::String,
588}
589/// The request for UpdateVolume.
590#[derive(Clone, PartialEq, ::prost::Message)]
591pub struct UpdateVolumeRequest {
592    /// The volume, by its name, with the fields to change.
593    #[prost(message, optional, tag = "1")]
594    pub volume: ::core::option::Option<Volume>,
595    /// The fields to change: `size_gib`, `tags`, or both. `*` is both.
596    #[prost(message, optional, tag = "2")]
597    pub update_mask: ::core::option::Option<::origincloud_core::protobuf::FieldMask>,
598    /// A UUID; a repeat with the same id returns the first request's
599    /// operation instead of changing the volume again.
600    #[prost(string, tag = "3")]
601    pub request_id: ::prost::alloc::string::String,
602}
603/// The request for DeleteVolume.
604#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
605pub struct DeleteVolumeRequest {
606    /// The volume to delete.
607    #[prost(string, tag = "1")]
608    pub name: ::prost::alloc::string::String,
609    /// A UUID; a repeat with the same id returns the first request's
610    /// operation.
611    #[prost(string, tag = "2")]
612    pub request_id: ::prost::alloc::string::String,
613}
614impl serde::Serialize for CreateSnapshotRequest {
615    #[allow(deprecated)]
616    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
617    where
618        S: serde::Serializer,
619    {
620        use serde::ser::SerializeStruct;
621        let mut len = 0;
622        if !self.parent.is_empty() {
623            len += 1;
624        }
625        if self.snapshot.is_some() {
626            len += 1;
627        }
628        if !self.request_id.is_empty() {
629            len += 1;
630        }
631        let mut struct_ser = serializer
632            .serialize_struct("origincloud.pvs.v1beta1.CreateSnapshotRequest", len)?;
633        if !self.parent.is_empty() {
634            struct_ser.serialize_field("parent", &self.parent)?;
635        }
636        if let Some(v) = self.snapshot.as_ref() {
637            struct_ser.serialize_field("snapshot", v)?;
638        }
639        if !self.request_id.is_empty() {
640            struct_ser.serialize_field("requestId", &self.request_id)?;
641        }
642        struct_ser.end()
643    }
644}
645impl<'de> serde::Deserialize<'de> for CreateSnapshotRequest {
646    #[allow(deprecated)]
647    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
648    where
649        D: serde::Deserializer<'de>,
650    {
651        const FIELDS: &[&str] = &["parent", "snapshot", "request_id", "requestId"];
652        #[allow(clippy::enum_variant_names)]
653        enum GeneratedField {
654            Parent,
655            Snapshot,
656            RequestId,
657            __SkipField__,
658        }
659        impl<'de> serde::Deserialize<'de> for GeneratedField {
660            fn deserialize<D>(
661                deserializer: D,
662            ) -> std::result::Result<GeneratedField, D::Error>
663            where
664                D: serde::Deserializer<'de>,
665            {
666                struct GeneratedVisitor;
667                impl serde::de::Visitor<'_> for GeneratedVisitor {
668                    type Value = GeneratedField;
669                    fn expecting(
670                        &self,
671                        formatter: &mut std::fmt::Formatter<'_>,
672                    ) -> std::fmt::Result {
673                        write!(formatter, "expected one of: {:?}", & FIELDS)
674                    }
675                    #[allow(unused_variables)]
676                    fn visit_str<E>(
677                        self,
678                        value: &str,
679                    ) -> std::result::Result<GeneratedField, E>
680                    where
681                        E: serde::de::Error,
682                    {
683                        match value {
684                            "parent" => Ok(GeneratedField::Parent),
685                            "snapshot" => Ok(GeneratedField::Snapshot),
686                            "requestId" | "request_id" => Ok(GeneratedField::RequestId),
687                            _ => Ok(GeneratedField::__SkipField__),
688                        }
689                    }
690                }
691                deserializer.deserialize_identifier(GeneratedVisitor)
692            }
693        }
694        struct GeneratedVisitor;
695        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
696            type Value = CreateSnapshotRequest;
697            fn expecting(
698                &self,
699                formatter: &mut std::fmt::Formatter<'_>,
700            ) -> std::fmt::Result {
701                formatter
702                    .write_str("struct origincloud.pvs.v1beta1.CreateSnapshotRequest")
703            }
704            fn visit_map<V>(
705                self,
706                mut map_: V,
707            ) -> std::result::Result<CreateSnapshotRequest, V::Error>
708            where
709                V: serde::de::MapAccess<'de>,
710            {
711                let mut parent__ = None;
712                let mut snapshot__ = None;
713                let mut request_id__ = None;
714                while let Some(k) = map_.next_key()? {
715                    match k {
716                        GeneratedField::Parent => {
717                            if parent__.is_some() {
718                                return Err(serde::de::Error::duplicate_field("parent"));
719                            }
720                            parent__ = Some(map_.next_value()?);
721                        }
722                        GeneratedField::Snapshot => {
723                            if snapshot__.is_some() {
724                                return Err(serde::de::Error::duplicate_field("snapshot"));
725                            }
726                            snapshot__ = map_.next_value()?;
727                        }
728                        GeneratedField::RequestId => {
729                            if request_id__.is_some() {
730                                return Err(serde::de::Error::duplicate_field("requestId"));
731                            }
732                            request_id__ = Some(map_.next_value()?);
733                        }
734                        GeneratedField::__SkipField__ => {
735                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
736                        }
737                    }
738                }
739                Ok(CreateSnapshotRequest {
740                    parent: parent__.unwrap_or_default(),
741                    snapshot: snapshot__,
742                    request_id: request_id__.unwrap_or_default(),
743                })
744            }
745        }
746        deserializer
747            .deserialize_struct(
748                "origincloud.pvs.v1beta1.CreateSnapshotRequest",
749                FIELDS,
750                GeneratedVisitor,
751            )
752    }
753}
754impl serde::Serialize for CreateVolumeRequest {
755    #[allow(deprecated)]
756    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
757    where
758        S: serde::Serializer,
759    {
760        use serde::ser::SerializeStruct;
761        let mut len = 0;
762        if !self.parent.is_empty() {
763            len += 1;
764        }
765        if self.volume.is_some() {
766            len += 1;
767        }
768        if !self.request_id.is_empty() {
769            len += 1;
770        }
771        let mut struct_ser = serializer
772            .serialize_struct("origincloud.pvs.v1beta1.CreateVolumeRequest", len)?;
773        if !self.parent.is_empty() {
774            struct_ser.serialize_field("parent", &self.parent)?;
775        }
776        if let Some(v) = self.volume.as_ref() {
777            struct_ser.serialize_field("volume", v)?;
778        }
779        if !self.request_id.is_empty() {
780            struct_ser.serialize_field("requestId", &self.request_id)?;
781        }
782        struct_ser.end()
783    }
784}
785impl<'de> serde::Deserialize<'de> for CreateVolumeRequest {
786    #[allow(deprecated)]
787    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
788    where
789        D: serde::Deserializer<'de>,
790    {
791        const FIELDS: &[&str] = &["parent", "volume", "request_id", "requestId"];
792        #[allow(clippy::enum_variant_names)]
793        enum GeneratedField {
794            Parent,
795            Volume,
796            RequestId,
797            __SkipField__,
798        }
799        impl<'de> serde::Deserialize<'de> for GeneratedField {
800            fn deserialize<D>(
801                deserializer: D,
802            ) -> std::result::Result<GeneratedField, D::Error>
803            where
804                D: serde::Deserializer<'de>,
805            {
806                struct GeneratedVisitor;
807                impl serde::de::Visitor<'_> for GeneratedVisitor {
808                    type Value = GeneratedField;
809                    fn expecting(
810                        &self,
811                        formatter: &mut std::fmt::Formatter<'_>,
812                    ) -> std::fmt::Result {
813                        write!(formatter, "expected one of: {:?}", & FIELDS)
814                    }
815                    #[allow(unused_variables)]
816                    fn visit_str<E>(
817                        self,
818                        value: &str,
819                    ) -> std::result::Result<GeneratedField, E>
820                    where
821                        E: serde::de::Error,
822                    {
823                        match value {
824                            "parent" => Ok(GeneratedField::Parent),
825                            "volume" => Ok(GeneratedField::Volume),
826                            "requestId" | "request_id" => Ok(GeneratedField::RequestId),
827                            _ => Ok(GeneratedField::__SkipField__),
828                        }
829                    }
830                }
831                deserializer.deserialize_identifier(GeneratedVisitor)
832            }
833        }
834        struct GeneratedVisitor;
835        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
836            type Value = CreateVolumeRequest;
837            fn expecting(
838                &self,
839                formatter: &mut std::fmt::Formatter<'_>,
840            ) -> std::fmt::Result {
841                formatter.write_str("struct origincloud.pvs.v1beta1.CreateVolumeRequest")
842            }
843            fn visit_map<V>(
844                self,
845                mut map_: V,
846            ) -> std::result::Result<CreateVolumeRequest, V::Error>
847            where
848                V: serde::de::MapAccess<'de>,
849            {
850                let mut parent__ = None;
851                let mut volume__ = None;
852                let mut request_id__ = None;
853                while let Some(k) = map_.next_key()? {
854                    match k {
855                        GeneratedField::Parent => {
856                            if parent__.is_some() {
857                                return Err(serde::de::Error::duplicate_field("parent"));
858                            }
859                            parent__ = Some(map_.next_value()?);
860                        }
861                        GeneratedField::Volume => {
862                            if volume__.is_some() {
863                                return Err(serde::de::Error::duplicate_field("volume"));
864                            }
865                            volume__ = map_.next_value()?;
866                        }
867                        GeneratedField::RequestId => {
868                            if request_id__.is_some() {
869                                return Err(serde::de::Error::duplicate_field("requestId"));
870                            }
871                            request_id__ = Some(map_.next_value()?);
872                        }
873                        GeneratedField::__SkipField__ => {
874                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
875                        }
876                    }
877                }
878                Ok(CreateVolumeRequest {
879                    parent: parent__.unwrap_or_default(),
880                    volume: volume__,
881                    request_id: request_id__.unwrap_or_default(),
882                })
883            }
884        }
885        deserializer
886            .deserialize_struct(
887                "origincloud.pvs.v1beta1.CreateVolumeRequest",
888                FIELDS,
889                GeneratedVisitor,
890            )
891    }
892}
893impl serde::Serialize for DeleteSnapshotRequest {
894    #[allow(deprecated)]
895    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
896    where
897        S: serde::Serializer,
898    {
899        use serde::ser::SerializeStruct;
900        let mut len = 0;
901        if !self.name.is_empty() {
902            len += 1;
903        }
904        if !self.request_id.is_empty() {
905            len += 1;
906        }
907        let mut struct_ser = serializer
908            .serialize_struct("origincloud.pvs.v1beta1.DeleteSnapshotRequest", len)?;
909        if !self.name.is_empty() {
910            struct_ser.serialize_field("name", &self.name)?;
911        }
912        if !self.request_id.is_empty() {
913            struct_ser.serialize_field("requestId", &self.request_id)?;
914        }
915        struct_ser.end()
916    }
917}
918impl<'de> serde::Deserialize<'de> for DeleteSnapshotRequest {
919    #[allow(deprecated)]
920    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
921    where
922        D: serde::Deserializer<'de>,
923    {
924        const FIELDS: &[&str] = &["name", "request_id", "requestId"];
925        #[allow(clippy::enum_variant_names)]
926        enum GeneratedField {
927            Name,
928            RequestId,
929            __SkipField__,
930        }
931        impl<'de> serde::Deserialize<'de> for GeneratedField {
932            fn deserialize<D>(
933                deserializer: D,
934            ) -> std::result::Result<GeneratedField, D::Error>
935            where
936                D: serde::Deserializer<'de>,
937            {
938                struct GeneratedVisitor;
939                impl serde::de::Visitor<'_> for GeneratedVisitor {
940                    type Value = GeneratedField;
941                    fn expecting(
942                        &self,
943                        formatter: &mut std::fmt::Formatter<'_>,
944                    ) -> std::fmt::Result {
945                        write!(formatter, "expected one of: {:?}", & FIELDS)
946                    }
947                    #[allow(unused_variables)]
948                    fn visit_str<E>(
949                        self,
950                        value: &str,
951                    ) -> std::result::Result<GeneratedField, E>
952                    where
953                        E: serde::de::Error,
954                    {
955                        match value {
956                            "name" => Ok(GeneratedField::Name),
957                            "requestId" | "request_id" => Ok(GeneratedField::RequestId),
958                            _ => Ok(GeneratedField::__SkipField__),
959                        }
960                    }
961                }
962                deserializer.deserialize_identifier(GeneratedVisitor)
963            }
964        }
965        struct GeneratedVisitor;
966        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
967            type Value = DeleteSnapshotRequest;
968            fn expecting(
969                &self,
970                formatter: &mut std::fmt::Formatter<'_>,
971            ) -> std::fmt::Result {
972                formatter
973                    .write_str("struct origincloud.pvs.v1beta1.DeleteSnapshotRequest")
974            }
975            fn visit_map<V>(
976                self,
977                mut map_: V,
978            ) -> std::result::Result<DeleteSnapshotRequest, V::Error>
979            where
980                V: serde::de::MapAccess<'de>,
981            {
982                let mut name__ = None;
983                let mut request_id__ = None;
984                while let Some(k) = map_.next_key()? {
985                    match k {
986                        GeneratedField::Name => {
987                            if name__.is_some() {
988                                return Err(serde::de::Error::duplicate_field("name"));
989                            }
990                            name__ = Some(map_.next_value()?);
991                        }
992                        GeneratedField::RequestId => {
993                            if request_id__.is_some() {
994                                return Err(serde::de::Error::duplicate_field("requestId"));
995                            }
996                            request_id__ = Some(map_.next_value()?);
997                        }
998                        GeneratedField::__SkipField__ => {
999                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1000                        }
1001                    }
1002                }
1003                Ok(DeleteSnapshotRequest {
1004                    name: name__.unwrap_or_default(),
1005                    request_id: request_id__.unwrap_or_default(),
1006                })
1007            }
1008        }
1009        deserializer
1010            .deserialize_struct(
1011                "origincloud.pvs.v1beta1.DeleteSnapshotRequest",
1012                FIELDS,
1013                GeneratedVisitor,
1014            )
1015    }
1016}
1017impl serde::Serialize for DeleteVolumeRequest {
1018    #[allow(deprecated)]
1019    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1020    where
1021        S: serde::Serializer,
1022    {
1023        use serde::ser::SerializeStruct;
1024        let mut len = 0;
1025        if !self.name.is_empty() {
1026            len += 1;
1027        }
1028        if !self.request_id.is_empty() {
1029            len += 1;
1030        }
1031        let mut struct_ser = serializer
1032            .serialize_struct("origincloud.pvs.v1beta1.DeleteVolumeRequest", len)?;
1033        if !self.name.is_empty() {
1034            struct_ser.serialize_field("name", &self.name)?;
1035        }
1036        if !self.request_id.is_empty() {
1037            struct_ser.serialize_field("requestId", &self.request_id)?;
1038        }
1039        struct_ser.end()
1040    }
1041}
1042impl<'de> serde::Deserialize<'de> for DeleteVolumeRequest {
1043    #[allow(deprecated)]
1044    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1045    where
1046        D: serde::Deserializer<'de>,
1047    {
1048        const FIELDS: &[&str] = &["name", "request_id", "requestId"];
1049        #[allow(clippy::enum_variant_names)]
1050        enum GeneratedField {
1051            Name,
1052            RequestId,
1053            __SkipField__,
1054        }
1055        impl<'de> serde::Deserialize<'de> for GeneratedField {
1056            fn deserialize<D>(
1057                deserializer: D,
1058            ) -> std::result::Result<GeneratedField, D::Error>
1059            where
1060                D: serde::Deserializer<'de>,
1061            {
1062                struct GeneratedVisitor;
1063                impl serde::de::Visitor<'_> for GeneratedVisitor {
1064                    type Value = GeneratedField;
1065                    fn expecting(
1066                        &self,
1067                        formatter: &mut std::fmt::Formatter<'_>,
1068                    ) -> std::fmt::Result {
1069                        write!(formatter, "expected one of: {:?}", & FIELDS)
1070                    }
1071                    #[allow(unused_variables)]
1072                    fn visit_str<E>(
1073                        self,
1074                        value: &str,
1075                    ) -> std::result::Result<GeneratedField, E>
1076                    where
1077                        E: serde::de::Error,
1078                    {
1079                        match value {
1080                            "name" => Ok(GeneratedField::Name),
1081                            "requestId" | "request_id" => Ok(GeneratedField::RequestId),
1082                            _ => Ok(GeneratedField::__SkipField__),
1083                        }
1084                    }
1085                }
1086                deserializer.deserialize_identifier(GeneratedVisitor)
1087            }
1088        }
1089        struct GeneratedVisitor;
1090        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1091            type Value = DeleteVolumeRequest;
1092            fn expecting(
1093                &self,
1094                formatter: &mut std::fmt::Formatter<'_>,
1095            ) -> std::fmt::Result {
1096                formatter.write_str("struct origincloud.pvs.v1beta1.DeleteVolumeRequest")
1097            }
1098            fn visit_map<V>(
1099                self,
1100                mut map_: V,
1101            ) -> std::result::Result<DeleteVolumeRequest, V::Error>
1102            where
1103                V: serde::de::MapAccess<'de>,
1104            {
1105                let mut name__ = None;
1106                let mut request_id__ = None;
1107                while let Some(k) = map_.next_key()? {
1108                    match k {
1109                        GeneratedField::Name => {
1110                            if name__.is_some() {
1111                                return Err(serde::de::Error::duplicate_field("name"));
1112                            }
1113                            name__ = Some(map_.next_value()?);
1114                        }
1115                        GeneratedField::RequestId => {
1116                            if request_id__.is_some() {
1117                                return Err(serde::de::Error::duplicate_field("requestId"));
1118                            }
1119                            request_id__ = Some(map_.next_value()?);
1120                        }
1121                        GeneratedField::__SkipField__ => {
1122                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1123                        }
1124                    }
1125                }
1126                Ok(DeleteVolumeRequest {
1127                    name: name__.unwrap_or_default(),
1128                    request_id: request_id__.unwrap_or_default(),
1129                })
1130            }
1131        }
1132        deserializer
1133            .deserialize_struct(
1134                "origincloud.pvs.v1beta1.DeleteVolumeRequest",
1135                FIELDS,
1136                GeneratedVisitor,
1137            )
1138    }
1139}
1140impl serde::Serialize for GetSnapshotRequest {
1141    #[allow(deprecated)]
1142    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1143    where
1144        S: serde::Serializer,
1145    {
1146        use serde::ser::SerializeStruct;
1147        let mut len = 0;
1148        if !self.name.is_empty() {
1149            len += 1;
1150        }
1151        let mut struct_ser = serializer
1152            .serialize_struct("origincloud.pvs.v1beta1.GetSnapshotRequest", len)?;
1153        if !self.name.is_empty() {
1154            struct_ser.serialize_field("name", &self.name)?;
1155        }
1156        struct_ser.end()
1157    }
1158}
1159impl<'de> serde::Deserialize<'de> for GetSnapshotRequest {
1160    #[allow(deprecated)]
1161    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1162    where
1163        D: serde::Deserializer<'de>,
1164    {
1165        const FIELDS: &[&str] = &["name"];
1166        #[allow(clippy::enum_variant_names)]
1167        enum GeneratedField {
1168            Name,
1169            __SkipField__,
1170        }
1171        impl<'de> serde::Deserialize<'de> for GeneratedField {
1172            fn deserialize<D>(
1173                deserializer: D,
1174            ) -> std::result::Result<GeneratedField, D::Error>
1175            where
1176                D: serde::Deserializer<'de>,
1177            {
1178                struct GeneratedVisitor;
1179                impl serde::de::Visitor<'_> for GeneratedVisitor {
1180                    type Value = GeneratedField;
1181                    fn expecting(
1182                        &self,
1183                        formatter: &mut std::fmt::Formatter<'_>,
1184                    ) -> std::fmt::Result {
1185                        write!(formatter, "expected one of: {:?}", & FIELDS)
1186                    }
1187                    #[allow(unused_variables)]
1188                    fn visit_str<E>(
1189                        self,
1190                        value: &str,
1191                    ) -> std::result::Result<GeneratedField, E>
1192                    where
1193                        E: serde::de::Error,
1194                    {
1195                        match value {
1196                            "name" => Ok(GeneratedField::Name),
1197                            _ => Ok(GeneratedField::__SkipField__),
1198                        }
1199                    }
1200                }
1201                deserializer.deserialize_identifier(GeneratedVisitor)
1202            }
1203        }
1204        struct GeneratedVisitor;
1205        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1206            type Value = GetSnapshotRequest;
1207            fn expecting(
1208                &self,
1209                formatter: &mut std::fmt::Formatter<'_>,
1210            ) -> std::fmt::Result {
1211                formatter.write_str("struct origincloud.pvs.v1beta1.GetSnapshotRequest")
1212            }
1213            fn visit_map<V>(
1214                self,
1215                mut map_: V,
1216            ) -> std::result::Result<GetSnapshotRequest, V::Error>
1217            where
1218                V: serde::de::MapAccess<'de>,
1219            {
1220                let mut name__ = None;
1221                while let Some(k) = map_.next_key()? {
1222                    match k {
1223                        GeneratedField::Name => {
1224                            if name__.is_some() {
1225                                return Err(serde::de::Error::duplicate_field("name"));
1226                            }
1227                            name__ = Some(map_.next_value()?);
1228                        }
1229                        GeneratedField::__SkipField__ => {
1230                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1231                        }
1232                    }
1233                }
1234                Ok(GetSnapshotRequest {
1235                    name: name__.unwrap_or_default(),
1236                })
1237            }
1238        }
1239        deserializer
1240            .deserialize_struct(
1241                "origincloud.pvs.v1beta1.GetSnapshotRequest",
1242                FIELDS,
1243                GeneratedVisitor,
1244            )
1245    }
1246}
1247impl serde::Serialize for GetStorageClassRequest {
1248    #[allow(deprecated)]
1249    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1250    where
1251        S: serde::Serializer,
1252    {
1253        use serde::ser::SerializeStruct;
1254        let mut len = 0;
1255        if !self.name.is_empty() {
1256            len += 1;
1257        }
1258        let mut struct_ser = serializer
1259            .serialize_struct("origincloud.pvs.v1beta1.GetStorageClassRequest", len)?;
1260        if !self.name.is_empty() {
1261            struct_ser.serialize_field("name", &self.name)?;
1262        }
1263        struct_ser.end()
1264    }
1265}
1266impl<'de> serde::Deserialize<'de> for GetStorageClassRequest {
1267    #[allow(deprecated)]
1268    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1269    where
1270        D: serde::Deserializer<'de>,
1271    {
1272        const FIELDS: &[&str] = &["name"];
1273        #[allow(clippy::enum_variant_names)]
1274        enum GeneratedField {
1275            Name,
1276            __SkipField__,
1277        }
1278        impl<'de> serde::Deserialize<'de> for GeneratedField {
1279            fn deserialize<D>(
1280                deserializer: D,
1281            ) -> std::result::Result<GeneratedField, D::Error>
1282            where
1283                D: serde::Deserializer<'de>,
1284            {
1285                struct GeneratedVisitor;
1286                impl serde::de::Visitor<'_> for GeneratedVisitor {
1287                    type Value = GeneratedField;
1288                    fn expecting(
1289                        &self,
1290                        formatter: &mut std::fmt::Formatter<'_>,
1291                    ) -> std::fmt::Result {
1292                        write!(formatter, "expected one of: {:?}", & FIELDS)
1293                    }
1294                    #[allow(unused_variables)]
1295                    fn visit_str<E>(
1296                        self,
1297                        value: &str,
1298                    ) -> std::result::Result<GeneratedField, E>
1299                    where
1300                        E: serde::de::Error,
1301                    {
1302                        match value {
1303                            "name" => Ok(GeneratedField::Name),
1304                            _ => Ok(GeneratedField::__SkipField__),
1305                        }
1306                    }
1307                }
1308                deserializer.deserialize_identifier(GeneratedVisitor)
1309            }
1310        }
1311        struct GeneratedVisitor;
1312        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1313            type Value = GetStorageClassRequest;
1314            fn expecting(
1315                &self,
1316                formatter: &mut std::fmt::Formatter<'_>,
1317            ) -> std::fmt::Result {
1318                formatter
1319                    .write_str("struct origincloud.pvs.v1beta1.GetStorageClassRequest")
1320            }
1321            fn visit_map<V>(
1322                self,
1323                mut map_: V,
1324            ) -> std::result::Result<GetStorageClassRequest, V::Error>
1325            where
1326                V: serde::de::MapAccess<'de>,
1327            {
1328                let mut name__ = None;
1329                while let Some(k) = map_.next_key()? {
1330                    match k {
1331                        GeneratedField::Name => {
1332                            if name__.is_some() {
1333                                return Err(serde::de::Error::duplicate_field("name"));
1334                            }
1335                            name__ = Some(map_.next_value()?);
1336                        }
1337                        GeneratedField::__SkipField__ => {
1338                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1339                        }
1340                    }
1341                }
1342                Ok(GetStorageClassRequest {
1343                    name: name__.unwrap_or_default(),
1344                })
1345            }
1346        }
1347        deserializer
1348            .deserialize_struct(
1349                "origincloud.pvs.v1beta1.GetStorageClassRequest",
1350                FIELDS,
1351                GeneratedVisitor,
1352            )
1353    }
1354}
1355impl serde::Serialize for GetVolumeRequest {
1356    #[allow(deprecated)]
1357    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1358    where
1359        S: serde::Serializer,
1360    {
1361        use serde::ser::SerializeStruct;
1362        let mut len = 0;
1363        if !self.name.is_empty() {
1364            len += 1;
1365        }
1366        let mut struct_ser = serializer
1367            .serialize_struct("origincloud.pvs.v1beta1.GetVolumeRequest", len)?;
1368        if !self.name.is_empty() {
1369            struct_ser.serialize_field("name", &self.name)?;
1370        }
1371        struct_ser.end()
1372    }
1373}
1374impl<'de> serde::Deserialize<'de> for GetVolumeRequest {
1375    #[allow(deprecated)]
1376    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1377    where
1378        D: serde::Deserializer<'de>,
1379    {
1380        const FIELDS: &[&str] = &["name"];
1381        #[allow(clippy::enum_variant_names)]
1382        enum GeneratedField {
1383            Name,
1384            __SkipField__,
1385        }
1386        impl<'de> serde::Deserialize<'de> for GeneratedField {
1387            fn deserialize<D>(
1388                deserializer: D,
1389            ) -> std::result::Result<GeneratedField, D::Error>
1390            where
1391                D: serde::Deserializer<'de>,
1392            {
1393                struct GeneratedVisitor;
1394                impl serde::de::Visitor<'_> for GeneratedVisitor {
1395                    type Value = GeneratedField;
1396                    fn expecting(
1397                        &self,
1398                        formatter: &mut std::fmt::Formatter<'_>,
1399                    ) -> std::fmt::Result {
1400                        write!(formatter, "expected one of: {:?}", & FIELDS)
1401                    }
1402                    #[allow(unused_variables)]
1403                    fn visit_str<E>(
1404                        self,
1405                        value: &str,
1406                    ) -> std::result::Result<GeneratedField, E>
1407                    where
1408                        E: serde::de::Error,
1409                    {
1410                        match value {
1411                            "name" => Ok(GeneratedField::Name),
1412                            _ => Ok(GeneratedField::__SkipField__),
1413                        }
1414                    }
1415                }
1416                deserializer.deserialize_identifier(GeneratedVisitor)
1417            }
1418        }
1419        struct GeneratedVisitor;
1420        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1421            type Value = GetVolumeRequest;
1422            fn expecting(
1423                &self,
1424                formatter: &mut std::fmt::Formatter<'_>,
1425            ) -> std::fmt::Result {
1426                formatter.write_str("struct origincloud.pvs.v1beta1.GetVolumeRequest")
1427            }
1428            fn visit_map<V>(
1429                self,
1430                mut map_: V,
1431            ) -> std::result::Result<GetVolumeRequest, V::Error>
1432            where
1433                V: serde::de::MapAccess<'de>,
1434            {
1435                let mut name__ = None;
1436                while let Some(k) = map_.next_key()? {
1437                    match k {
1438                        GeneratedField::Name => {
1439                            if name__.is_some() {
1440                                return Err(serde::de::Error::duplicate_field("name"));
1441                            }
1442                            name__ = Some(map_.next_value()?);
1443                        }
1444                        GeneratedField::__SkipField__ => {
1445                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1446                        }
1447                    }
1448                }
1449                Ok(GetVolumeRequest {
1450                    name: name__.unwrap_or_default(),
1451                })
1452            }
1453        }
1454        deserializer
1455            .deserialize_struct(
1456                "origincloud.pvs.v1beta1.GetVolumeRequest",
1457                FIELDS,
1458                GeneratedVisitor,
1459            )
1460    }
1461}
1462impl serde::Serialize for ImportVolumeRequest {
1463    #[allow(deprecated)]
1464    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1465    where
1466        S: serde::Serializer,
1467    {
1468        use serde::ser::SerializeStruct;
1469        let mut len = 0;
1470        if !self.parent.is_empty() {
1471            len += 1;
1472        }
1473        if self.volume.is_some() {
1474            len += 1;
1475        }
1476        if !self.source_url.is_empty() {
1477            len += 1;
1478        }
1479        if !self.request_id.is_empty() {
1480            len += 1;
1481        }
1482        let mut struct_ser = serializer
1483            .serialize_struct("origincloud.pvs.v1beta1.ImportVolumeRequest", len)?;
1484        if !self.parent.is_empty() {
1485            struct_ser.serialize_field("parent", &self.parent)?;
1486        }
1487        if let Some(v) = self.volume.as_ref() {
1488            struct_ser.serialize_field("volume", v)?;
1489        }
1490        if !self.source_url.is_empty() {
1491            struct_ser.serialize_field("sourceUrl", &self.source_url)?;
1492        }
1493        if !self.request_id.is_empty() {
1494            struct_ser.serialize_field("requestId", &self.request_id)?;
1495        }
1496        struct_ser.end()
1497    }
1498}
1499impl<'de> serde::Deserialize<'de> for ImportVolumeRequest {
1500    #[allow(deprecated)]
1501    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1502    where
1503        D: serde::Deserializer<'de>,
1504    {
1505        const FIELDS: &[&str] = &[
1506            "parent",
1507            "volume",
1508            "source_url",
1509            "sourceUrl",
1510            "request_id",
1511            "requestId",
1512        ];
1513        #[allow(clippy::enum_variant_names)]
1514        enum GeneratedField {
1515            Parent,
1516            Volume,
1517            SourceUrl,
1518            RequestId,
1519            __SkipField__,
1520        }
1521        impl<'de> serde::Deserialize<'de> for GeneratedField {
1522            fn deserialize<D>(
1523                deserializer: D,
1524            ) -> std::result::Result<GeneratedField, D::Error>
1525            where
1526                D: serde::Deserializer<'de>,
1527            {
1528                struct GeneratedVisitor;
1529                impl serde::de::Visitor<'_> for GeneratedVisitor {
1530                    type Value = GeneratedField;
1531                    fn expecting(
1532                        &self,
1533                        formatter: &mut std::fmt::Formatter<'_>,
1534                    ) -> std::fmt::Result {
1535                        write!(formatter, "expected one of: {:?}", & FIELDS)
1536                    }
1537                    #[allow(unused_variables)]
1538                    fn visit_str<E>(
1539                        self,
1540                        value: &str,
1541                    ) -> std::result::Result<GeneratedField, E>
1542                    where
1543                        E: serde::de::Error,
1544                    {
1545                        match value {
1546                            "parent" => Ok(GeneratedField::Parent),
1547                            "volume" => Ok(GeneratedField::Volume),
1548                            "sourceUrl" | "source_url" => Ok(GeneratedField::SourceUrl),
1549                            "requestId" | "request_id" => Ok(GeneratedField::RequestId),
1550                            _ => Ok(GeneratedField::__SkipField__),
1551                        }
1552                    }
1553                }
1554                deserializer.deserialize_identifier(GeneratedVisitor)
1555            }
1556        }
1557        struct GeneratedVisitor;
1558        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1559            type Value = ImportVolumeRequest;
1560            fn expecting(
1561                &self,
1562                formatter: &mut std::fmt::Formatter<'_>,
1563            ) -> std::fmt::Result {
1564                formatter.write_str("struct origincloud.pvs.v1beta1.ImportVolumeRequest")
1565            }
1566            fn visit_map<V>(
1567                self,
1568                mut map_: V,
1569            ) -> std::result::Result<ImportVolumeRequest, V::Error>
1570            where
1571                V: serde::de::MapAccess<'de>,
1572            {
1573                let mut parent__ = None;
1574                let mut volume__ = None;
1575                let mut source_url__ = None;
1576                let mut request_id__ = None;
1577                while let Some(k) = map_.next_key()? {
1578                    match k {
1579                        GeneratedField::Parent => {
1580                            if parent__.is_some() {
1581                                return Err(serde::de::Error::duplicate_field("parent"));
1582                            }
1583                            parent__ = Some(map_.next_value()?);
1584                        }
1585                        GeneratedField::Volume => {
1586                            if volume__.is_some() {
1587                                return Err(serde::de::Error::duplicate_field("volume"));
1588                            }
1589                            volume__ = map_.next_value()?;
1590                        }
1591                        GeneratedField::SourceUrl => {
1592                            if source_url__.is_some() {
1593                                return Err(serde::de::Error::duplicate_field("sourceUrl"));
1594                            }
1595                            source_url__ = Some(map_.next_value()?);
1596                        }
1597                        GeneratedField::RequestId => {
1598                            if request_id__.is_some() {
1599                                return Err(serde::de::Error::duplicate_field("requestId"));
1600                            }
1601                            request_id__ = Some(map_.next_value()?);
1602                        }
1603                        GeneratedField::__SkipField__ => {
1604                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1605                        }
1606                    }
1607                }
1608                Ok(ImportVolumeRequest {
1609                    parent: parent__.unwrap_or_default(),
1610                    volume: volume__,
1611                    source_url: source_url__.unwrap_or_default(),
1612                    request_id: request_id__.unwrap_or_default(),
1613                })
1614            }
1615        }
1616        deserializer
1617            .deserialize_struct(
1618                "origincloud.pvs.v1beta1.ImportVolumeRequest",
1619                FIELDS,
1620                GeneratedVisitor,
1621            )
1622    }
1623}
1624impl serde::Serialize for ListSnapshotsRequest {
1625    #[allow(deprecated)]
1626    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1627    where
1628        S: serde::Serializer,
1629    {
1630        use serde::ser::SerializeStruct;
1631        let mut len = 0;
1632        if !self.parent.is_empty() {
1633            len += 1;
1634        }
1635        if self.page_size != 0 {
1636            len += 1;
1637        }
1638        if !self.page_token.is_empty() {
1639            len += 1;
1640        }
1641        let mut struct_ser = serializer
1642            .serialize_struct("origincloud.pvs.v1beta1.ListSnapshotsRequest", len)?;
1643        if !self.parent.is_empty() {
1644            struct_ser.serialize_field("parent", &self.parent)?;
1645        }
1646        if self.page_size != 0 {
1647            struct_ser.serialize_field("pageSize", &self.page_size)?;
1648        }
1649        if !self.page_token.is_empty() {
1650            struct_ser.serialize_field("pageToken", &self.page_token)?;
1651        }
1652        struct_ser.end()
1653    }
1654}
1655impl<'de> serde::Deserialize<'de> for ListSnapshotsRequest {
1656    #[allow(deprecated)]
1657    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1658    where
1659        D: serde::Deserializer<'de>,
1660    {
1661        const FIELDS: &[&str] = &[
1662            "parent",
1663            "page_size",
1664            "pageSize",
1665            "page_token",
1666            "pageToken",
1667        ];
1668        #[allow(clippy::enum_variant_names)]
1669        enum GeneratedField {
1670            Parent,
1671            PageSize,
1672            PageToken,
1673            __SkipField__,
1674        }
1675        impl<'de> serde::Deserialize<'de> for GeneratedField {
1676            fn deserialize<D>(
1677                deserializer: D,
1678            ) -> std::result::Result<GeneratedField, D::Error>
1679            where
1680                D: serde::Deserializer<'de>,
1681            {
1682                struct GeneratedVisitor;
1683                impl serde::de::Visitor<'_> for GeneratedVisitor {
1684                    type Value = GeneratedField;
1685                    fn expecting(
1686                        &self,
1687                        formatter: &mut std::fmt::Formatter<'_>,
1688                    ) -> std::fmt::Result {
1689                        write!(formatter, "expected one of: {:?}", & FIELDS)
1690                    }
1691                    #[allow(unused_variables)]
1692                    fn visit_str<E>(
1693                        self,
1694                        value: &str,
1695                    ) -> std::result::Result<GeneratedField, E>
1696                    where
1697                        E: serde::de::Error,
1698                    {
1699                        match value {
1700                            "parent" => Ok(GeneratedField::Parent),
1701                            "pageSize" | "page_size" => Ok(GeneratedField::PageSize),
1702                            "pageToken" | "page_token" => Ok(GeneratedField::PageToken),
1703                            _ => Ok(GeneratedField::__SkipField__),
1704                        }
1705                    }
1706                }
1707                deserializer.deserialize_identifier(GeneratedVisitor)
1708            }
1709        }
1710        struct GeneratedVisitor;
1711        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1712            type Value = ListSnapshotsRequest;
1713            fn expecting(
1714                &self,
1715                formatter: &mut std::fmt::Formatter<'_>,
1716            ) -> std::fmt::Result {
1717                formatter
1718                    .write_str("struct origincloud.pvs.v1beta1.ListSnapshotsRequest")
1719            }
1720            fn visit_map<V>(
1721                self,
1722                mut map_: V,
1723            ) -> std::result::Result<ListSnapshotsRequest, V::Error>
1724            where
1725                V: serde::de::MapAccess<'de>,
1726            {
1727                let mut parent__ = None;
1728                let mut page_size__ = None;
1729                let mut page_token__ = None;
1730                while let Some(k) = map_.next_key()? {
1731                    match k {
1732                        GeneratedField::Parent => {
1733                            if parent__.is_some() {
1734                                return Err(serde::de::Error::duplicate_field("parent"));
1735                            }
1736                            parent__ = Some(map_.next_value()?);
1737                        }
1738                        GeneratedField::PageSize => {
1739                            if page_size__.is_some() {
1740                                return Err(serde::de::Error::duplicate_field("pageSize"));
1741                            }
1742                            page_size__ = Some(
1743                                map_
1744                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
1745                                    .0,
1746                            );
1747                        }
1748                        GeneratedField::PageToken => {
1749                            if page_token__.is_some() {
1750                                return Err(serde::de::Error::duplicate_field("pageToken"));
1751                            }
1752                            page_token__ = Some(map_.next_value()?);
1753                        }
1754                        GeneratedField::__SkipField__ => {
1755                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1756                        }
1757                    }
1758                }
1759                Ok(ListSnapshotsRequest {
1760                    parent: parent__.unwrap_or_default(),
1761                    page_size: page_size__.unwrap_or_default(),
1762                    page_token: page_token__.unwrap_or_default(),
1763                })
1764            }
1765        }
1766        deserializer
1767            .deserialize_struct(
1768                "origincloud.pvs.v1beta1.ListSnapshotsRequest",
1769                FIELDS,
1770                GeneratedVisitor,
1771            )
1772    }
1773}
1774impl serde::Serialize for ListSnapshotsResponse {
1775    #[allow(deprecated)]
1776    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1777    where
1778        S: serde::Serializer,
1779    {
1780        use serde::ser::SerializeStruct;
1781        let mut len = 0;
1782        if !self.snapshots.is_empty() {
1783            len += 1;
1784        }
1785        if !self.next_page_token.is_empty() {
1786            len += 1;
1787        }
1788        let mut struct_ser = serializer
1789            .serialize_struct("origincloud.pvs.v1beta1.ListSnapshotsResponse", len)?;
1790        if !self.snapshots.is_empty() {
1791            struct_ser.serialize_field("snapshots", &self.snapshots)?;
1792        }
1793        if !self.next_page_token.is_empty() {
1794            struct_ser.serialize_field("nextPageToken", &self.next_page_token)?;
1795        }
1796        struct_ser.end()
1797    }
1798}
1799impl<'de> serde::Deserialize<'de> for ListSnapshotsResponse {
1800    #[allow(deprecated)]
1801    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1802    where
1803        D: serde::Deserializer<'de>,
1804    {
1805        const FIELDS: &[&str] = &["snapshots", "next_page_token", "nextPageToken"];
1806        #[allow(clippy::enum_variant_names)]
1807        enum GeneratedField {
1808            Snapshots,
1809            NextPageToken,
1810            __SkipField__,
1811        }
1812        impl<'de> serde::Deserialize<'de> for GeneratedField {
1813            fn deserialize<D>(
1814                deserializer: D,
1815            ) -> std::result::Result<GeneratedField, D::Error>
1816            where
1817                D: serde::Deserializer<'de>,
1818            {
1819                struct GeneratedVisitor;
1820                impl serde::de::Visitor<'_> for GeneratedVisitor {
1821                    type Value = GeneratedField;
1822                    fn expecting(
1823                        &self,
1824                        formatter: &mut std::fmt::Formatter<'_>,
1825                    ) -> std::fmt::Result {
1826                        write!(formatter, "expected one of: {:?}", & FIELDS)
1827                    }
1828                    #[allow(unused_variables)]
1829                    fn visit_str<E>(
1830                        self,
1831                        value: &str,
1832                    ) -> std::result::Result<GeneratedField, E>
1833                    where
1834                        E: serde::de::Error,
1835                    {
1836                        match value {
1837                            "snapshots" => Ok(GeneratedField::Snapshots),
1838                            "nextPageToken" | "next_page_token" => {
1839                                Ok(GeneratedField::NextPageToken)
1840                            }
1841                            _ => Ok(GeneratedField::__SkipField__),
1842                        }
1843                    }
1844                }
1845                deserializer.deserialize_identifier(GeneratedVisitor)
1846            }
1847        }
1848        struct GeneratedVisitor;
1849        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1850            type Value = ListSnapshotsResponse;
1851            fn expecting(
1852                &self,
1853                formatter: &mut std::fmt::Formatter<'_>,
1854            ) -> std::fmt::Result {
1855                formatter
1856                    .write_str("struct origincloud.pvs.v1beta1.ListSnapshotsResponse")
1857            }
1858            fn visit_map<V>(
1859                self,
1860                mut map_: V,
1861            ) -> std::result::Result<ListSnapshotsResponse, V::Error>
1862            where
1863                V: serde::de::MapAccess<'de>,
1864            {
1865                let mut snapshots__ = None;
1866                let mut next_page_token__ = None;
1867                while let Some(k) = map_.next_key()? {
1868                    match k {
1869                        GeneratedField::Snapshots => {
1870                            if snapshots__.is_some() {
1871                                return Err(serde::de::Error::duplicate_field("snapshots"));
1872                            }
1873                            snapshots__ = Some(map_.next_value()?);
1874                        }
1875                        GeneratedField::NextPageToken => {
1876                            if next_page_token__.is_some() {
1877                                return Err(
1878                                    serde::de::Error::duplicate_field("nextPageToken"),
1879                                );
1880                            }
1881                            next_page_token__ = Some(map_.next_value()?);
1882                        }
1883                        GeneratedField::__SkipField__ => {
1884                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1885                        }
1886                    }
1887                }
1888                Ok(ListSnapshotsResponse {
1889                    snapshots: snapshots__.unwrap_or_default(),
1890                    next_page_token: next_page_token__.unwrap_or_default(),
1891                })
1892            }
1893        }
1894        deserializer
1895            .deserialize_struct(
1896                "origincloud.pvs.v1beta1.ListSnapshotsResponse",
1897                FIELDS,
1898                GeneratedVisitor,
1899            )
1900    }
1901}
1902impl serde::Serialize for ListStorageClassesRequest {
1903    #[allow(deprecated)]
1904    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1905    where
1906        S: serde::Serializer,
1907    {
1908        use serde::ser::SerializeStruct;
1909        let len = 0;
1910        let struct_ser = serializer
1911            .serialize_struct("origincloud.pvs.v1beta1.ListStorageClassesRequest", len)?;
1912        struct_ser.end()
1913    }
1914}
1915impl<'de> serde::Deserialize<'de> for ListStorageClassesRequest {
1916    #[allow(deprecated)]
1917    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1918    where
1919        D: serde::Deserializer<'de>,
1920    {
1921        const FIELDS: &[&str] = &[];
1922        #[allow(clippy::enum_variant_names)]
1923        enum GeneratedField {
1924            __SkipField__,
1925        }
1926        impl<'de> serde::Deserialize<'de> for GeneratedField {
1927            fn deserialize<D>(
1928                deserializer: D,
1929            ) -> std::result::Result<GeneratedField, D::Error>
1930            where
1931                D: serde::Deserializer<'de>,
1932            {
1933                struct GeneratedVisitor;
1934                impl serde::de::Visitor<'_> for GeneratedVisitor {
1935                    type Value = GeneratedField;
1936                    fn expecting(
1937                        &self,
1938                        formatter: &mut std::fmt::Formatter<'_>,
1939                    ) -> std::fmt::Result {
1940                        write!(formatter, "expected one of: {:?}", & FIELDS)
1941                    }
1942                    #[allow(unused_variables)]
1943                    fn visit_str<E>(
1944                        self,
1945                        value: &str,
1946                    ) -> std::result::Result<GeneratedField, E>
1947                    where
1948                        E: serde::de::Error,
1949                    {
1950                        Ok(GeneratedField::__SkipField__)
1951                    }
1952                }
1953                deserializer.deserialize_identifier(GeneratedVisitor)
1954            }
1955        }
1956        struct GeneratedVisitor;
1957        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1958            type Value = ListStorageClassesRequest;
1959            fn expecting(
1960                &self,
1961                formatter: &mut std::fmt::Formatter<'_>,
1962            ) -> std::fmt::Result {
1963                formatter
1964                    .write_str(
1965                        "struct origincloud.pvs.v1beta1.ListStorageClassesRequest",
1966                    )
1967            }
1968            fn visit_map<V>(
1969                self,
1970                mut map_: V,
1971            ) -> std::result::Result<ListStorageClassesRequest, V::Error>
1972            where
1973                V: serde::de::MapAccess<'de>,
1974            {
1975                while map_.next_key::<GeneratedField>()?.is_some() {
1976                    let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1977                }
1978                Ok(ListStorageClassesRequest {})
1979            }
1980        }
1981        deserializer
1982            .deserialize_struct(
1983                "origincloud.pvs.v1beta1.ListStorageClassesRequest",
1984                FIELDS,
1985                GeneratedVisitor,
1986            )
1987    }
1988}
1989impl serde::Serialize for ListStorageClassesResponse {
1990    #[allow(deprecated)]
1991    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1992    where
1993        S: serde::Serializer,
1994    {
1995        use serde::ser::SerializeStruct;
1996        let mut len = 0;
1997        if !self.storage_classes.is_empty() {
1998            len += 1;
1999        }
2000        let mut struct_ser = serializer
2001            .serialize_struct(
2002                "origincloud.pvs.v1beta1.ListStorageClassesResponse",
2003                len,
2004            )?;
2005        if !self.storage_classes.is_empty() {
2006            struct_ser.serialize_field("storageClasses", &self.storage_classes)?;
2007        }
2008        struct_ser.end()
2009    }
2010}
2011impl<'de> serde::Deserialize<'de> for ListStorageClassesResponse {
2012    #[allow(deprecated)]
2013    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2014    where
2015        D: serde::Deserializer<'de>,
2016    {
2017        const FIELDS: &[&str] = &["storage_classes", "storageClasses"];
2018        #[allow(clippy::enum_variant_names)]
2019        enum GeneratedField {
2020            StorageClasses,
2021            __SkipField__,
2022        }
2023        impl<'de> serde::Deserialize<'de> for GeneratedField {
2024            fn deserialize<D>(
2025                deserializer: D,
2026            ) -> std::result::Result<GeneratedField, D::Error>
2027            where
2028                D: serde::Deserializer<'de>,
2029            {
2030                struct GeneratedVisitor;
2031                impl serde::de::Visitor<'_> for GeneratedVisitor {
2032                    type Value = GeneratedField;
2033                    fn expecting(
2034                        &self,
2035                        formatter: &mut std::fmt::Formatter<'_>,
2036                    ) -> std::fmt::Result {
2037                        write!(formatter, "expected one of: {:?}", & FIELDS)
2038                    }
2039                    #[allow(unused_variables)]
2040                    fn visit_str<E>(
2041                        self,
2042                        value: &str,
2043                    ) -> std::result::Result<GeneratedField, E>
2044                    where
2045                        E: serde::de::Error,
2046                    {
2047                        match value {
2048                            "storageClasses" | "storage_classes" => {
2049                                Ok(GeneratedField::StorageClasses)
2050                            }
2051                            _ => Ok(GeneratedField::__SkipField__),
2052                        }
2053                    }
2054                }
2055                deserializer.deserialize_identifier(GeneratedVisitor)
2056            }
2057        }
2058        struct GeneratedVisitor;
2059        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2060            type Value = ListStorageClassesResponse;
2061            fn expecting(
2062                &self,
2063                formatter: &mut std::fmt::Formatter<'_>,
2064            ) -> std::fmt::Result {
2065                formatter
2066                    .write_str(
2067                        "struct origincloud.pvs.v1beta1.ListStorageClassesResponse",
2068                    )
2069            }
2070            fn visit_map<V>(
2071                self,
2072                mut map_: V,
2073            ) -> std::result::Result<ListStorageClassesResponse, V::Error>
2074            where
2075                V: serde::de::MapAccess<'de>,
2076            {
2077                let mut storage_classes__ = None;
2078                while let Some(k) = map_.next_key()? {
2079                    match k {
2080                        GeneratedField::StorageClasses => {
2081                            if storage_classes__.is_some() {
2082                                return Err(
2083                                    serde::de::Error::duplicate_field("storageClasses"),
2084                                );
2085                            }
2086                            storage_classes__ = Some(map_.next_value()?);
2087                        }
2088                        GeneratedField::__SkipField__ => {
2089                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2090                        }
2091                    }
2092                }
2093                Ok(ListStorageClassesResponse {
2094                    storage_classes: storage_classes__.unwrap_or_default(),
2095                })
2096            }
2097        }
2098        deserializer
2099            .deserialize_struct(
2100                "origincloud.pvs.v1beta1.ListStorageClassesResponse",
2101                FIELDS,
2102                GeneratedVisitor,
2103            )
2104    }
2105}
2106impl serde::Serialize for ListVolumesRequest {
2107    #[allow(deprecated)]
2108    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2109    where
2110        S: serde::Serializer,
2111    {
2112        use serde::ser::SerializeStruct;
2113        let mut len = 0;
2114        if !self.parent.is_empty() {
2115            len += 1;
2116        }
2117        if self.page_size != 0 {
2118            len += 1;
2119        }
2120        if !self.page_token.is_empty() {
2121            len += 1;
2122        }
2123        let mut struct_ser = serializer
2124            .serialize_struct("origincloud.pvs.v1beta1.ListVolumesRequest", len)?;
2125        if !self.parent.is_empty() {
2126            struct_ser.serialize_field("parent", &self.parent)?;
2127        }
2128        if self.page_size != 0 {
2129            struct_ser.serialize_field("pageSize", &self.page_size)?;
2130        }
2131        if !self.page_token.is_empty() {
2132            struct_ser.serialize_field("pageToken", &self.page_token)?;
2133        }
2134        struct_ser.end()
2135    }
2136}
2137impl<'de> serde::Deserialize<'de> for ListVolumesRequest {
2138    #[allow(deprecated)]
2139    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2140    where
2141        D: serde::Deserializer<'de>,
2142    {
2143        const FIELDS: &[&str] = &[
2144            "parent",
2145            "page_size",
2146            "pageSize",
2147            "page_token",
2148            "pageToken",
2149        ];
2150        #[allow(clippy::enum_variant_names)]
2151        enum GeneratedField {
2152            Parent,
2153            PageSize,
2154            PageToken,
2155            __SkipField__,
2156        }
2157        impl<'de> serde::Deserialize<'de> for GeneratedField {
2158            fn deserialize<D>(
2159                deserializer: D,
2160            ) -> std::result::Result<GeneratedField, D::Error>
2161            where
2162                D: serde::Deserializer<'de>,
2163            {
2164                struct GeneratedVisitor;
2165                impl serde::de::Visitor<'_> for GeneratedVisitor {
2166                    type Value = GeneratedField;
2167                    fn expecting(
2168                        &self,
2169                        formatter: &mut std::fmt::Formatter<'_>,
2170                    ) -> std::fmt::Result {
2171                        write!(formatter, "expected one of: {:?}", & FIELDS)
2172                    }
2173                    #[allow(unused_variables)]
2174                    fn visit_str<E>(
2175                        self,
2176                        value: &str,
2177                    ) -> std::result::Result<GeneratedField, E>
2178                    where
2179                        E: serde::de::Error,
2180                    {
2181                        match value {
2182                            "parent" => Ok(GeneratedField::Parent),
2183                            "pageSize" | "page_size" => Ok(GeneratedField::PageSize),
2184                            "pageToken" | "page_token" => Ok(GeneratedField::PageToken),
2185                            _ => Ok(GeneratedField::__SkipField__),
2186                        }
2187                    }
2188                }
2189                deserializer.deserialize_identifier(GeneratedVisitor)
2190            }
2191        }
2192        struct GeneratedVisitor;
2193        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2194            type Value = ListVolumesRequest;
2195            fn expecting(
2196                &self,
2197                formatter: &mut std::fmt::Formatter<'_>,
2198            ) -> std::fmt::Result {
2199                formatter.write_str("struct origincloud.pvs.v1beta1.ListVolumesRequest")
2200            }
2201            fn visit_map<V>(
2202                self,
2203                mut map_: V,
2204            ) -> std::result::Result<ListVolumesRequest, V::Error>
2205            where
2206                V: serde::de::MapAccess<'de>,
2207            {
2208                let mut parent__ = None;
2209                let mut page_size__ = None;
2210                let mut page_token__ = None;
2211                while let Some(k) = map_.next_key()? {
2212                    match k {
2213                        GeneratedField::Parent => {
2214                            if parent__.is_some() {
2215                                return Err(serde::de::Error::duplicate_field("parent"));
2216                            }
2217                            parent__ = Some(map_.next_value()?);
2218                        }
2219                        GeneratedField::PageSize => {
2220                            if page_size__.is_some() {
2221                                return Err(serde::de::Error::duplicate_field("pageSize"));
2222                            }
2223                            page_size__ = Some(
2224                                map_
2225                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
2226                                    .0,
2227                            );
2228                        }
2229                        GeneratedField::PageToken => {
2230                            if page_token__.is_some() {
2231                                return Err(serde::de::Error::duplicate_field("pageToken"));
2232                            }
2233                            page_token__ = Some(map_.next_value()?);
2234                        }
2235                        GeneratedField::__SkipField__ => {
2236                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2237                        }
2238                    }
2239                }
2240                Ok(ListVolumesRequest {
2241                    parent: parent__.unwrap_or_default(),
2242                    page_size: page_size__.unwrap_or_default(),
2243                    page_token: page_token__.unwrap_or_default(),
2244                })
2245            }
2246        }
2247        deserializer
2248            .deserialize_struct(
2249                "origincloud.pvs.v1beta1.ListVolumesRequest",
2250                FIELDS,
2251                GeneratedVisitor,
2252            )
2253    }
2254}
2255impl serde::Serialize for ListVolumesResponse {
2256    #[allow(deprecated)]
2257    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2258    where
2259        S: serde::Serializer,
2260    {
2261        use serde::ser::SerializeStruct;
2262        let mut len = 0;
2263        if !self.volumes.is_empty() {
2264            len += 1;
2265        }
2266        if !self.next_page_token.is_empty() {
2267            len += 1;
2268        }
2269        let mut struct_ser = serializer
2270            .serialize_struct("origincloud.pvs.v1beta1.ListVolumesResponse", len)?;
2271        if !self.volumes.is_empty() {
2272            struct_ser.serialize_field("volumes", &self.volumes)?;
2273        }
2274        if !self.next_page_token.is_empty() {
2275            struct_ser.serialize_field("nextPageToken", &self.next_page_token)?;
2276        }
2277        struct_ser.end()
2278    }
2279}
2280impl<'de> serde::Deserialize<'de> for ListVolumesResponse {
2281    #[allow(deprecated)]
2282    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2283    where
2284        D: serde::Deserializer<'de>,
2285    {
2286        const FIELDS: &[&str] = &["volumes", "next_page_token", "nextPageToken"];
2287        #[allow(clippy::enum_variant_names)]
2288        enum GeneratedField {
2289            Volumes,
2290            NextPageToken,
2291            __SkipField__,
2292        }
2293        impl<'de> serde::Deserialize<'de> for GeneratedField {
2294            fn deserialize<D>(
2295                deserializer: D,
2296            ) -> std::result::Result<GeneratedField, D::Error>
2297            where
2298                D: serde::Deserializer<'de>,
2299            {
2300                struct GeneratedVisitor;
2301                impl serde::de::Visitor<'_> for GeneratedVisitor {
2302                    type Value = GeneratedField;
2303                    fn expecting(
2304                        &self,
2305                        formatter: &mut std::fmt::Formatter<'_>,
2306                    ) -> std::fmt::Result {
2307                        write!(formatter, "expected one of: {:?}", & FIELDS)
2308                    }
2309                    #[allow(unused_variables)]
2310                    fn visit_str<E>(
2311                        self,
2312                        value: &str,
2313                    ) -> std::result::Result<GeneratedField, E>
2314                    where
2315                        E: serde::de::Error,
2316                    {
2317                        match value {
2318                            "volumes" => Ok(GeneratedField::Volumes),
2319                            "nextPageToken" | "next_page_token" => {
2320                                Ok(GeneratedField::NextPageToken)
2321                            }
2322                            _ => Ok(GeneratedField::__SkipField__),
2323                        }
2324                    }
2325                }
2326                deserializer.deserialize_identifier(GeneratedVisitor)
2327            }
2328        }
2329        struct GeneratedVisitor;
2330        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2331            type Value = ListVolumesResponse;
2332            fn expecting(
2333                &self,
2334                formatter: &mut std::fmt::Formatter<'_>,
2335            ) -> std::fmt::Result {
2336                formatter.write_str("struct origincloud.pvs.v1beta1.ListVolumesResponse")
2337            }
2338            fn visit_map<V>(
2339                self,
2340                mut map_: V,
2341            ) -> std::result::Result<ListVolumesResponse, V::Error>
2342            where
2343                V: serde::de::MapAccess<'de>,
2344            {
2345                let mut volumes__ = None;
2346                let mut next_page_token__ = None;
2347                while let Some(k) = map_.next_key()? {
2348                    match k {
2349                        GeneratedField::Volumes => {
2350                            if volumes__.is_some() {
2351                                return Err(serde::de::Error::duplicate_field("volumes"));
2352                            }
2353                            volumes__ = Some(map_.next_value()?);
2354                        }
2355                        GeneratedField::NextPageToken => {
2356                            if next_page_token__.is_some() {
2357                                return Err(
2358                                    serde::de::Error::duplicate_field("nextPageToken"),
2359                                );
2360                            }
2361                            next_page_token__ = Some(map_.next_value()?);
2362                        }
2363                        GeneratedField::__SkipField__ => {
2364                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2365                        }
2366                    }
2367                }
2368                Ok(ListVolumesResponse {
2369                    volumes: volumes__.unwrap_or_default(),
2370                    next_page_token: next_page_token__.unwrap_or_default(),
2371                })
2372            }
2373        }
2374        deserializer
2375            .deserialize_struct(
2376                "origincloud.pvs.v1beta1.ListVolumesResponse",
2377                FIELDS,
2378                GeneratedVisitor,
2379            )
2380    }
2381}
2382impl serde::Serialize for ProtectSnapshotRequest {
2383    #[allow(deprecated)]
2384    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2385    where
2386        S: serde::Serializer,
2387    {
2388        use serde::ser::SerializeStruct;
2389        let mut len = 0;
2390        if !self.name.is_empty() {
2391            len += 1;
2392        }
2393        if !self.request_id.is_empty() {
2394            len += 1;
2395        }
2396        let mut struct_ser = serializer
2397            .serialize_struct("origincloud.pvs.v1beta1.ProtectSnapshotRequest", len)?;
2398        if !self.name.is_empty() {
2399            struct_ser.serialize_field("name", &self.name)?;
2400        }
2401        if !self.request_id.is_empty() {
2402            struct_ser.serialize_field("requestId", &self.request_id)?;
2403        }
2404        struct_ser.end()
2405    }
2406}
2407impl<'de> serde::Deserialize<'de> for ProtectSnapshotRequest {
2408    #[allow(deprecated)]
2409    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2410    where
2411        D: serde::Deserializer<'de>,
2412    {
2413        const FIELDS: &[&str] = &["name", "request_id", "requestId"];
2414        #[allow(clippy::enum_variant_names)]
2415        enum GeneratedField {
2416            Name,
2417            RequestId,
2418            __SkipField__,
2419        }
2420        impl<'de> serde::Deserialize<'de> for GeneratedField {
2421            fn deserialize<D>(
2422                deserializer: D,
2423            ) -> std::result::Result<GeneratedField, D::Error>
2424            where
2425                D: serde::Deserializer<'de>,
2426            {
2427                struct GeneratedVisitor;
2428                impl serde::de::Visitor<'_> for GeneratedVisitor {
2429                    type Value = GeneratedField;
2430                    fn expecting(
2431                        &self,
2432                        formatter: &mut std::fmt::Formatter<'_>,
2433                    ) -> std::fmt::Result {
2434                        write!(formatter, "expected one of: {:?}", & FIELDS)
2435                    }
2436                    #[allow(unused_variables)]
2437                    fn visit_str<E>(
2438                        self,
2439                        value: &str,
2440                    ) -> std::result::Result<GeneratedField, E>
2441                    where
2442                        E: serde::de::Error,
2443                    {
2444                        match value {
2445                            "name" => Ok(GeneratedField::Name),
2446                            "requestId" | "request_id" => Ok(GeneratedField::RequestId),
2447                            _ => Ok(GeneratedField::__SkipField__),
2448                        }
2449                    }
2450                }
2451                deserializer.deserialize_identifier(GeneratedVisitor)
2452            }
2453        }
2454        struct GeneratedVisitor;
2455        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2456            type Value = ProtectSnapshotRequest;
2457            fn expecting(
2458                &self,
2459                formatter: &mut std::fmt::Formatter<'_>,
2460            ) -> std::fmt::Result {
2461                formatter
2462                    .write_str("struct origincloud.pvs.v1beta1.ProtectSnapshotRequest")
2463            }
2464            fn visit_map<V>(
2465                self,
2466                mut map_: V,
2467            ) -> std::result::Result<ProtectSnapshotRequest, V::Error>
2468            where
2469                V: serde::de::MapAccess<'de>,
2470            {
2471                let mut name__ = None;
2472                let mut request_id__ = None;
2473                while let Some(k) = map_.next_key()? {
2474                    match k {
2475                        GeneratedField::Name => {
2476                            if name__.is_some() {
2477                                return Err(serde::de::Error::duplicate_field("name"));
2478                            }
2479                            name__ = Some(map_.next_value()?);
2480                        }
2481                        GeneratedField::RequestId => {
2482                            if request_id__.is_some() {
2483                                return Err(serde::de::Error::duplicate_field("requestId"));
2484                            }
2485                            request_id__ = Some(map_.next_value()?);
2486                        }
2487                        GeneratedField::__SkipField__ => {
2488                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2489                        }
2490                    }
2491                }
2492                Ok(ProtectSnapshotRequest {
2493                    name: name__.unwrap_or_default(),
2494                    request_id: request_id__.unwrap_or_default(),
2495                })
2496            }
2497        }
2498        deserializer
2499            .deserialize_struct(
2500                "origincloud.pvs.v1beta1.ProtectSnapshotRequest",
2501                FIELDS,
2502                GeneratedVisitor,
2503            )
2504    }
2505}
2506impl serde::Serialize for Snapshot {
2507    #[allow(deprecated)]
2508    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2509    where
2510        S: serde::Serializer,
2511    {
2512        use serde::ser::SerializeStruct;
2513        let mut len = 0;
2514        if !self.name.is_empty() {
2515            len += 1;
2516        }
2517        if !self.urn.is_empty() {
2518            len += 1;
2519        }
2520        if !self.source_volume.is_empty() {
2521            len += 1;
2522        }
2523        if self.source_size_gib != 0 {
2524            len += 1;
2525        }
2526        if self.state != 0 {
2527            len += 1;
2528        }
2529        if !self.state_reason.is_empty() {
2530            len += 1;
2531        }
2532        if self.protection_state != 0 {
2533            len += 1;
2534        }
2535        if !self.protection_reason.is_empty() {
2536            len += 1;
2537        }
2538        if !self.creator.is_empty() {
2539            len += 1;
2540        }
2541        if !self.tags.is_empty() {
2542            len += 1;
2543        }
2544        let mut struct_ser = serializer
2545            .serialize_struct("origincloud.pvs.v1beta1.Snapshot", len)?;
2546        if !self.name.is_empty() {
2547            struct_ser.serialize_field("name", &self.name)?;
2548        }
2549        if !self.urn.is_empty() {
2550            struct_ser.serialize_field("urn", &self.urn)?;
2551        }
2552        if !self.source_volume.is_empty() {
2553            struct_ser.serialize_field("sourceVolume", &self.source_volume)?;
2554        }
2555        if self.source_size_gib != 0 {
2556            struct_ser.serialize_field("sourceSizeGib", &self.source_size_gib)?;
2557        }
2558        if self.state != 0 {
2559            let v = snapshot::State::try_from(self.state)
2560                .map_err(|_| serde::ser::Error::custom(
2561                    format!("Invalid variant {}", self.state),
2562                ))?;
2563            struct_ser.serialize_field("state", &v)?;
2564        }
2565        if !self.state_reason.is_empty() {
2566            struct_ser.serialize_field("stateReason", &self.state_reason)?;
2567        }
2568        if self.protection_state != 0 {
2569            let v = snapshot::ProtectionState::try_from(self.protection_state)
2570                .map_err(|_| serde::ser::Error::custom(
2571                    format!("Invalid variant {}", self.protection_state),
2572                ))?;
2573            struct_ser.serialize_field("protectionState", &v)?;
2574        }
2575        if !self.protection_reason.is_empty() {
2576            struct_ser.serialize_field("protectionReason", &self.protection_reason)?;
2577        }
2578        if !self.creator.is_empty() {
2579            struct_ser.serialize_field("creator", &self.creator)?;
2580        }
2581        if !self.tags.is_empty() {
2582            struct_ser.serialize_field("tags", &self.tags)?;
2583        }
2584        struct_ser.end()
2585    }
2586}
2587impl<'de> serde::Deserialize<'de> for Snapshot {
2588    #[allow(deprecated)]
2589    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2590    where
2591        D: serde::Deserializer<'de>,
2592    {
2593        const FIELDS: &[&str] = &[
2594            "name",
2595            "urn",
2596            "source_volume",
2597            "sourceVolume",
2598            "source_size_gib",
2599            "sourceSizeGib",
2600            "state",
2601            "state_reason",
2602            "stateReason",
2603            "protection_state",
2604            "protectionState",
2605            "protection_reason",
2606            "protectionReason",
2607            "creator",
2608            "tags",
2609        ];
2610        #[allow(clippy::enum_variant_names)]
2611        enum GeneratedField {
2612            Name,
2613            Urn,
2614            SourceVolume,
2615            SourceSizeGib,
2616            State,
2617            StateReason,
2618            ProtectionState,
2619            ProtectionReason,
2620            Creator,
2621            Tags,
2622            __SkipField__,
2623        }
2624        impl<'de> serde::Deserialize<'de> for GeneratedField {
2625            fn deserialize<D>(
2626                deserializer: D,
2627            ) -> std::result::Result<GeneratedField, D::Error>
2628            where
2629                D: serde::Deserializer<'de>,
2630            {
2631                struct GeneratedVisitor;
2632                impl serde::de::Visitor<'_> for GeneratedVisitor {
2633                    type Value = GeneratedField;
2634                    fn expecting(
2635                        &self,
2636                        formatter: &mut std::fmt::Formatter<'_>,
2637                    ) -> std::fmt::Result {
2638                        write!(formatter, "expected one of: {:?}", & FIELDS)
2639                    }
2640                    #[allow(unused_variables)]
2641                    fn visit_str<E>(
2642                        self,
2643                        value: &str,
2644                    ) -> std::result::Result<GeneratedField, E>
2645                    where
2646                        E: serde::de::Error,
2647                    {
2648                        match value {
2649                            "name" => Ok(GeneratedField::Name),
2650                            "urn" => Ok(GeneratedField::Urn),
2651                            "sourceVolume" | "source_volume" => {
2652                                Ok(GeneratedField::SourceVolume)
2653                            }
2654                            "sourceSizeGib" | "source_size_gib" => {
2655                                Ok(GeneratedField::SourceSizeGib)
2656                            }
2657                            "state" => Ok(GeneratedField::State),
2658                            "stateReason" | "state_reason" => {
2659                                Ok(GeneratedField::StateReason)
2660                            }
2661                            "protectionState" | "protection_state" => {
2662                                Ok(GeneratedField::ProtectionState)
2663                            }
2664                            "protectionReason" | "protection_reason" => {
2665                                Ok(GeneratedField::ProtectionReason)
2666                            }
2667                            "creator" => Ok(GeneratedField::Creator),
2668                            "tags" => Ok(GeneratedField::Tags),
2669                            _ => Ok(GeneratedField::__SkipField__),
2670                        }
2671                    }
2672                }
2673                deserializer.deserialize_identifier(GeneratedVisitor)
2674            }
2675        }
2676        struct GeneratedVisitor;
2677        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2678            type Value = Snapshot;
2679            fn expecting(
2680                &self,
2681                formatter: &mut std::fmt::Formatter<'_>,
2682            ) -> std::fmt::Result {
2683                formatter.write_str("struct origincloud.pvs.v1beta1.Snapshot")
2684            }
2685            fn visit_map<V>(self, mut map_: V) -> std::result::Result<Snapshot, V::Error>
2686            where
2687                V: serde::de::MapAccess<'de>,
2688            {
2689                let mut name__ = None;
2690                let mut urn__ = None;
2691                let mut source_volume__ = None;
2692                let mut source_size_gib__ = None;
2693                let mut state__ = None;
2694                let mut state_reason__ = None;
2695                let mut protection_state__ = None;
2696                let mut protection_reason__ = None;
2697                let mut creator__ = None;
2698                let mut tags__ = None;
2699                while let Some(k) = map_.next_key()? {
2700                    match k {
2701                        GeneratedField::Name => {
2702                            if name__.is_some() {
2703                                return Err(serde::de::Error::duplicate_field("name"));
2704                            }
2705                            name__ = Some(map_.next_value()?);
2706                        }
2707                        GeneratedField::Urn => {
2708                            if urn__.is_some() {
2709                                return Err(serde::de::Error::duplicate_field("urn"));
2710                            }
2711                            urn__ = Some(map_.next_value()?);
2712                        }
2713                        GeneratedField::SourceVolume => {
2714                            if source_volume__.is_some() {
2715                                return Err(
2716                                    serde::de::Error::duplicate_field("sourceVolume"),
2717                                );
2718                            }
2719                            source_volume__ = Some(map_.next_value()?);
2720                        }
2721                        GeneratedField::SourceSizeGib => {
2722                            if source_size_gib__.is_some() {
2723                                return Err(
2724                                    serde::de::Error::duplicate_field("sourceSizeGib"),
2725                                );
2726                            }
2727                            source_size_gib__ = Some(
2728                                map_
2729                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
2730                                    .0,
2731                            );
2732                        }
2733                        GeneratedField::State => {
2734                            if state__.is_some() {
2735                                return Err(serde::de::Error::duplicate_field("state"));
2736                            }
2737                            state__ = Some(map_.next_value::<snapshot::State>()? as i32);
2738                        }
2739                        GeneratedField::StateReason => {
2740                            if state_reason__.is_some() {
2741                                return Err(
2742                                    serde::de::Error::duplicate_field("stateReason"),
2743                                );
2744                            }
2745                            state_reason__ = Some(map_.next_value()?);
2746                        }
2747                        GeneratedField::ProtectionState => {
2748                            if protection_state__.is_some() {
2749                                return Err(
2750                                    serde::de::Error::duplicate_field("protectionState"),
2751                                );
2752                            }
2753                            protection_state__ = Some(
2754                                map_.next_value::<snapshot::ProtectionState>()? as i32,
2755                            );
2756                        }
2757                        GeneratedField::ProtectionReason => {
2758                            if protection_reason__.is_some() {
2759                                return Err(
2760                                    serde::de::Error::duplicate_field("protectionReason"),
2761                                );
2762                            }
2763                            protection_reason__ = Some(map_.next_value()?);
2764                        }
2765                        GeneratedField::Creator => {
2766                            if creator__.is_some() {
2767                                return Err(serde::de::Error::duplicate_field("creator"));
2768                            }
2769                            creator__ = Some(map_.next_value()?);
2770                        }
2771                        GeneratedField::Tags => {
2772                            if tags__.is_some() {
2773                                return Err(serde::de::Error::duplicate_field("tags"));
2774                            }
2775                            tags__ = Some(
2776                                map_.next_value::<std::collections::BTreeMap<_, _>>()?,
2777                            );
2778                        }
2779                        GeneratedField::__SkipField__ => {
2780                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2781                        }
2782                    }
2783                }
2784                Ok(Snapshot {
2785                    name: name__.unwrap_or_default(),
2786                    urn: urn__.unwrap_or_default(),
2787                    source_volume: source_volume__.unwrap_or_default(),
2788                    source_size_gib: source_size_gib__.unwrap_or_default(),
2789                    state: state__.unwrap_or_default(),
2790                    state_reason: state_reason__.unwrap_or_default(),
2791                    protection_state: protection_state__.unwrap_or_default(),
2792                    protection_reason: protection_reason__.unwrap_or_default(),
2793                    creator: creator__.unwrap_or_default(),
2794                    tags: tags__.unwrap_or_default(),
2795                })
2796            }
2797        }
2798        deserializer
2799            .deserialize_struct(
2800                "origincloud.pvs.v1beta1.Snapshot",
2801                FIELDS,
2802                GeneratedVisitor,
2803            )
2804    }
2805}
2806impl serde::Serialize for snapshot::ProtectionState {
2807    #[allow(deprecated)]
2808    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2809    where
2810        S: serde::Serializer,
2811    {
2812        let variant = match self {
2813            Self::Unspecified => "PROTECTION_STATE_UNSPECIFIED",
2814            Self::Unprotected => "UNPROTECTED",
2815            Self::Protecting => "PROTECTING",
2816            Self::Protected => "PROTECTED",
2817            Self::Unprotecting => "UNPROTECTING",
2818            Self::ProtectionFailed => "PROTECTION_FAILED",
2819        };
2820        serializer.serialize_str(variant)
2821    }
2822}
2823impl<'de> serde::Deserialize<'de> for snapshot::ProtectionState {
2824    #[allow(deprecated)]
2825    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2826    where
2827        D: serde::Deserializer<'de>,
2828    {
2829        const FIELDS: &[&str] = &[
2830            "PROTECTION_STATE_UNSPECIFIED",
2831            "UNPROTECTED",
2832            "PROTECTING",
2833            "PROTECTED",
2834            "UNPROTECTING",
2835            "PROTECTION_FAILED",
2836        ];
2837        struct GeneratedVisitor;
2838        impl serde::de::Visitor<'_> for GeneratedVisitor {
2839            type Value = snapshot::ProtectionState;
2840            fn expecting(
2841                &self,
2842                formatter: &mut std::fmt::Formatter<'_>,
2843            ) -> std::fmt::Result {
2844                write!(formatter, "expected one of: {:?}", & FIELDS)
2845            }
2846            fn visit_i64<E>(self, v: i64) -> std::result::Result<Self::Value, E>
2847            where
2848                E: serde::de::Error,
2849            {
2850                i32::try_from(v)
2851                    .ok()
2852                    .and_then(|x| {
2853                        x
2854                            .try_into()
2855                            .ok()
2856                            .or_else(|| Some(snapshot::ProtectionState::default()))
2857                    })
2858                    .ok_or_else(|| {
2859                        serde::de::Error::invalid_value(
2860                            serde::de::Unexpected::Signed(v),
2861                            &self,
2862                        )
2863                    })
2864            }
2865            fn visit_u64<E>(self, v: u64) -> std::result::Result<Self::Value, E>
2866            where
2867                E: serde::de::Error,
2868            {
2869                i32::try_from(v)
2870                    .ok()
2871                    .and_then(|x| {
2872                        x
2873                            .try_into()
2874                            .ok()
2875                            .or_else(|| Some(snapshot::ProtectionState::default()))
2876                    })
2877                    .ok_or_else(|| {
2878                        serde::de::Error::invalid_value(
2879                            serde::de::Unexpected::Unsigned(v),
2880                            &self,
2881                        )
2882                    })
2883            }
2884            fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
2885            where
2886                E: serde::de::Error,
2887            {
2888                match value {
2889                    "PROTECTION_STATE_UNSPECIFIED" => {
2890                        Ok(snapshot::ProtectionState::Unspecified)
2891                    }
2892                    "UNPROTECTED" => Ok(snapshot::ProtectionState::Unprotected),
2893                    "PROTECTING" => Ok(snapshot::ProtectionState::Protecting),
2894                    "PROTECTED" => Ok(snapshot::ProtectionState::Protected),
2895                    "UNPROTECTING" => Ok(snapshot::ProtectionState::Unprotecting),
2896                    "PROTECTION_FAILED" => {
2897                        Ok(snapshot::ProtectionState::ProtectionFailed)
2898                    }
2899                    _ => Ok(snapshot::ProtectionState::default()),
2900                }
2901            }
2902        }
2903        deserializer.deserialize_any(GeneratedVisitor)
2904    }
2905}
2906impl serde::Serialize for snapshot::State {
2907    #[allow(deprecated)]
2908    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2909    where
2910        S: serde::Serializer,
2911    {
2912        let variant = match self {
2913            Self::Unspecified => "STATE_UNSPECIFIED",
2914            Self::Pending => "PENDING",
2915            Self::Completed => "COMPLETED",
2916            Self::Deleting => "DELETING",
2917            Self::Deleted => "DELETED",
2918            Self::Error => "ERROR",
2919        };
2920        serializer.serialize_str(variant)
2921    }
2922}
2923impl<'de> serde::Deserialize<'de> for snapshot::State {
2924    #[allow(deprecated)]
2925    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2926    where
2927        D: serde::Deserializer<'de>,
2928    {
2929        const FIELDS: &[&str] = &[
2930            "STATE_UNSPECIFIED",
2931            "PENDING",
2932            "COMPLETED",
2933            "DELETING",
2934            "DELETED",
2935            "ERROR",
2936        ];
2937        struct GeneratedVisitor;
2938        impl serde::de::Visitor<'_> for GeneratedVisitor {
2939            type Value = snapshot::State;
2940            fn expecting(
2941                &self,
2942                formatter: &mut std::fmt::Formatter<'_>,
2943            ) -> std::fmt::Result {
2944                write!(formatter, "expected one of: {:?}", & FIELDS)
2945            }
2946            fn visit_i64<E>(self, v: i64) -> std::result::Result<Self::Value, E>
2947            where
2948                E: serde::de::Error,
2949            {
2950                i32::try_from(v)
2951                    .ok()
2952                    .and_then(|x| {
2953                        x.try_into().ok().or_else(|| Some(snapshot::State::default()))
2954                    })
2955                    .ok_or_else(|| {
2956                        serde::de::Error::invalid_value(
2957                            serde::de::Unexpected::Signed(v),
2958                            &self,
2959                        )
2960                    })
2961            }
2962            fn visit_u64<E>(self, v: u64) -> std::result::Result<Self::Value, E>
2963            where
2964                E: serde::de::Error,
2965            {
2966                i32::try_from(v)
2967                    .ok()
2968                    .and_then(|x| {
2969                        x.try_into().ok().or_else(|| Some(snapshot::State::default()))
2970                    })
2971                    .ok_or_else(|| {
2972                        serde::de::Error::invalid_value(
2973                            serde::de::Unexpected::Unsigned(v),
2974                            &self,
2975                        )
2976                    })
2977            }
2978            fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
2979            where
2980                E: serde::de::Error,
2981            {
2982                match value {
2983                    "STATE_UNSPECIFIED" => Ok(snapshot::State::Unspecified),
2984                    "PENDING" => Ok(snapshot::State::Pending),
2985                    "COMPLETED" => Ok(snapshot::State::Completed),
2986                    "DELETING" => Ok(snapshot::State::Deleting),
2987                    "DELETED" => Ok(snapshot::State::Deleted),
2988                    "ERROR" => Ok(snapshot::State::Error),
2989                    _ => Ok(snapshot::State::default()),
2990                }
2991            }
2992        }
2993        deserializer.deserialize_any(GeneratedVisitor)
2994    }
2995}
2996impl serde::Serialize for StorageClass {
2997    #[allow(deprecated)]
2998    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2999    where
3000        S: serde::Serializer,
3001    {
3002        use serde::ser::SerializeStruct;
3003        let mut len = 0;
3004        if !self.name.is_empty() {
3005            len += 1;
3006        }
3007        if !self.display_name.is_empty() {
3008            len += 1;
3009        }
3010        if self.media != 0 {
3011            len += 1;
3012        }
3013        if self.default_class {
3014            len += 1;
3015        }
3016        if self.available {
3017            len += 1;
3018        }
3019        if self.baseline_iops != 0 {
3020            len += 1;
3021        }
3022        if self.baseline_throughput_mibps != 0 {
3023            len += 1;
3024        }
3025        let mut struct_ser = serializer
3026            .serialize_struct("origincloud.pvs.v1beta1.StorageClass", len)?;
3027        if !self.name.is_empty() {
3028            struct_ser.serialize_field("name", &self.name)?;
3029        }
3030        if !self.display_name.is_empty() {
3031            struct_ser.serialize_field("displayName", &self.display_name)?;
3032        }
3033        if self.media != 0 {
3034            let v = storage_class::Media::try_from(self.media)
3035                .map_err(|_| serde::ser::Error::custom(
3036                    format!("Invalid variant {}", self.media),
3037                ))?;
3038            struct_ser.serialize_field("media", &v)?;
3039        }
3040        if self.default_class {
3041            struct_ser.serialize_field("defaultClass", &self.default_class)?;
3042        }
3043        if self.available {
3044            struct_ser.serialize_field("available", &self.available)?;
3045        }
3046        if self.baseline_iops != 0 {
3047            struct_ser.serialize_field("baselineIops", &self.baseline_iops)?;
3048        }
3049        if self.baseline_throughput_mibps != 0 {
3050            struct_ser
3051                .serialize_field(
3052                    "baselineThroughputMibps",
3053                    &self.baseline_throughput_mibps,
3054                )?;
3055        }
3056        struct_ser.end()
3057    }
3058}
3059impl<'de> serde::Deserialize<'de> for StorageClass {
3060    #[allow(deprecated)]
3061    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3062    where
3063        D: serde::Deserializer<'de>,
3064    {
3065        const FIELDS: &[&str] = &[
3066            "name",
3067            "display_name",
3068            "displayName",
3069            "media",
3070            "default_class",
3071            "defaultClass",
3072            "available",
3073            "baseline_iops",
3074            "baselineIops",
3075            "baseline_throughput_mibps",
3076            "baselineThroughputMibps",
3077        ];
3078        #[allow(clippy::enum_variant_names)]
3079        enum GeneratedField {
3080            Name,
3081            DisplayName,
3082            Media,
3083            DefaultClass,
3084            Available,
3085            BaselineIops,
3086            BaselineThroughputMibps,
3087            __SkipField__,
3088        }
3089        impl<'de> serde::Deserialize<'de> for GeneratedField {
3090            fn deserialize<D>(
3091                deserializer: D,
3092            ) -> std::result::Result<GeneratedField, D::Error>
3093            where
3094                D: serde::Deserializer<'de>,
3095            {
3096                struct GeneratedVisitor;
3097                impl serde::de::Visitor<'_> for GeneratedVisitor {
3098                    type Value = GeneratedField;
3099                    fn expecting(
3100                        &self,
3101                        formatter: &mut std::fmt::Formatter<'_>,
3102                    ) -> std::fmt::Result {
3103                        write!(formatter, "expected one of: {:?}", & FIELDS)
3104                    }
3105                    #[allow(unused_variables)]
3106                    fn visit_str<E>(
3107                        self,
3108                        value: &str,
3109                    ) -> std::result::Result<GeneratedField, E>
3110                    where
3111                        E: serde::de::Error,
3112                    {
3113                        match value {
3114                            "name" => Ok(GeneratedField::Name),
3115                            "displayName" | "display_name" => {
3116                                Ok(GeneratedField::DisplayName)
3117                            }
3118                            "media" => Ok(GeneratedField::Media),
3119                            "defaultClass" | "default_class" => {
3120                                Ok(GeneratedField::DefaultClass)
3121                            }
3122                            "available" => Ok(GeneratedField::Available),
3123                            "baselineIops" | "baseline_iops" => {
3124                                Ok(GeneratedField::BaselineIops)
3125                            }
3126                            "baselineThroughputMibps" | "baseline_throughput_mibps" => {
3127                                Ok(GeneratedField::BaselineThroughputMibps)
3128                            }
3129                            _ => Ok(GeneratedField::__SkipField__),
3130                        }
3131                    }
3132                }
3133                deserializer.deserialize_identifier(GeneratedVisitor)
3134            }
3135        }
3136        struct GeneratedVisitor;
3137        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3138            type Value = StorageClass;
3139            fn expecting(
3140                &self,
3141                formatter: &mut std::fmt::Formatter<'_>,
3142            ) -> std::fmt::Result {
3143                formatter.write_str("struct origincloud.pvs.v1beta1.StorageClass")
3144            }
3145            fn visit_map<V>(
3146                self,
3147                mut map_: V,
3148            ) -> std::result::Result<StorageClass, V::Error>
3149            where
3150                V: serde::de::MapAccess<'de>,
3151            {
3152                let mut name__ = None;
3153                let mut display_name__ = None;
3154                let mut media__ = None;
3155                let mut default_class__ = None;
3156                let mut available__ = None;
3157                let mut baseline_iops__ = None;
3158                let mut baseline_throughput_mibps__ = None;
3159                while let Some(k) = map_.next_key()? {
3160                    match k {
3161                        GeneratedField::Name => {
3162                            if name__.is_some() {
3163                                return Err(serde::de::Error::duplicate_field("name"));
3164                            }
3165                            name__ = Some(map_.next_value()?);
3166                        }
3167                        GeneratedField::DisplayName => {
3168                            if display_name__.is_some() {
3169                                return Err(
3170                                    serde::de::Error::duplicate_field("displayName"),
3171                                );
3172                            }
3173                            display_name__ = Some(map_.next_value()?);
3174                        }
3175                        GeneratedField::Media => {
3176                            if media__.is_some() {
3177                                return Err(serde::de::Error::duplicate_field("media"));
3178                            }
3179                            media__ = Some(
3180                                map_.next_value::<storage_class::Media>()? as i32,
3181                            );
3182                        }
3183                        GeneratedField::DefaultClass => {
3184                            if default_class__.is_some() {
3185                                return Err(
3186                                    serde::de::Error::duplicate_field("defaultClass"),
3187                                );
3188                            }
3189                            default_class__ = Some(map_.next_value()?);
3190                        }
3191                        GeneratedField::Available => {
3192                            if available__.is_some() {
3193                                return Err(serde::de::Error::duplicate_field("available"));
3194                            }
3195                            available__ = Some(map_.next_value()?);
3196                        }
3197                        GeneratedField::BaselineIops => {
3198                            if baseline_iops__.is_some() {
3199                                return Err(
3200                                    serde::de::Error::duplicate_field("baselineIops"),
3201                                );
3202                            }
3203                            baseline_iops__ = Some(
3204                                map_
3205                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
3206                                    .0,
3207                            );
3208                        }
3209                        GeneratedField::BaselineThroughputMibps => {
3210                            if baseline_throughput_mibps__.is_some() {
3211                                return Err(
3212                                    serde::de::Error::duplicate_field("baselineThroughputMibps"),
3213                                );
3214                            }
3215                            baseline_throughput_mibps__ = Some(
3216                                map_
3217                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
3218                                    .0,
3219                            );
3220                        }
3221                        GeneratedField::__SkipField__ => {
3222                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
3223                        }
3224                    }
3225                }
3226                Ok(StorageClass {
3227                    name: name__.unwrap_or_default(),
3228                    display_name: display_name__.unwrap_or_default(),
3229                    media: media__.unwrap_or_default(),
3230                    default_class: default_class__.unwrap_or_default(),
3231                    available: available__.unwrap_or_default(),
3232                    baseline_iops: baseline_iops__.unwrap_or_default(),
3233                    baseline_throughput_mibps: baseline_throughput_mibps__
3234                        .unwrap_or_default(),
3235                })
3236            }
3237        }
3238        deserializer
3239            .deserialize_struct(
3240                "origincloud.pvs.v1beta1.StorageClass",
3241                FIELDS,
3242                GeneratedVisitor,
3243            )
3244    }
3245}
3246impl serde::Serialize for storage_class::Media {
3247    #[allow(deprecated)]
3248    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3249    where
3250        S: serde::Serializer,
3251    {
3252        let variant = match self {
3253            Self::Unspecified => "MEDIA_UNSPECIFIED",
3254            Self::Ssd => "SSD",
3255            Self::Hdd => "HDD",
3256        };
3257        serializer.serialize_str(variant)
3258    }
3259}
3260impl<'de> serde::Deserialize<'de> for storage_class::Media {
3261    #[allow(deprecated)]
3262    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3263    where
3264        D: serde::Deserializer<'de>,
3265    {
3266        const FIELDS: &[&str] = &["MEDIA_UNSPECIFIED", "SSD", "HDD"];
3267        struct GeneratedVisitor;
3268        impl serde::de::Visitor<'_> for GeneratedVisitor {
3269            type Value = storage_class::Media;
3270            fn expecting(
3271                &self,
3272                formatter: &mut std::fmt::Formatter<'_>,
3273            ) -> std::fmt::Result {
3274                write!(formatter, "expected one of: {:?}", & FIELDS)
3275            }
3276            fn visit_i64<E>(self, v: i64) -> std::result::Result<Self::Value, E>
3277            where
3278                E: serde::de::Error,
3279            {
3280                i32::try_from(v)
3281                    .ok()
3282                    .and_then(|x| {
3283                        x
3284                            .try_into()
3285                            .ok()
3286                            .or_else(|| Some(storage_class::Media::default()))
3287                    })
3288                    .ok_or_else(|| {
3289                        serde::de::Error::invalid_value(
3290                            serde::de::Unexpected::Signed(v),
3291                            &self,
3292                        )
3293                    })
3294            }
3295            fn visit_u64<E>(self, v: u64) -> std::result::Result<Self::Value, E>
3296            where
3297                E: serde::de::Error,
3298            {
3299                i32::try_from(v)
3300                    .ok()
3301                    .and_then(|x| {
3302                        x
3303                            .try_into()
3304                            .ok()
3305                            .or_else(|| Some(storage_class::Media::default()))
3306                    })
3307                    .ok_or_else(|| {
3308                        serde::de::Error::invalid_value(
3309                            serde::de::Unexpected::Unsigned(v),
3310                            &self,
3311                        )
3312                    })
3313            }
3314            fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
3315            where
3316                E: serde::de::Error,
3317            {
3318                match value {
3319                    "MEDIA_UNSPECIFIED" => Ok(storage_class::Media::Unspecified),
3320                    "SSD" => Ok(storage_class::Media::Ssd),
3321                    "HDD" => Ok(storage_class::Media::Hdd),
3322                    _ => Ok(storage_class::Media::default()),
3323                }
3324            }
3325        }
3326        deserializer.deserialize_any(GeneratedVisitor)
3327    }
3328}
3329impl serde::Serialize for UnprotectSnapshotRequest {
3330    #[allow(deprecated)]
3331    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3332    where
3333        S: serde::Serializer,
3334    {
3335        use serde::ser::SerializeStruct;
3336        let mut len = 0;
3337        if !self.name.is_empty() {
3338            len += 1;
3339        }
3340        if !self.request_id.is_empty() {
3341            len += 1;
3342        }
3343        let mut struct_ser = serializer
3344            .serialize_struct("origincloud.pvs.v1beta1.UnprotectSnapshotRequest", len)?;
3345        if !self.name.is_empty() {
3346            struct_ser.serialize_field("name", &self.name)?;
3347        }
3348        if !self.request_id.is_empty() {
3349            struct_ser.serialize_field("requestId", &self.request_id)?;
3350        }
3351        struct_ser.end()
3352    }
3353}
3354impl<'de> serde::Deserialize<'de> for UnprotectSnapshotRequest {
3355    #[allow(deprecated)]
3356    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3357    where
3358        D: serde::Deserializer<'de>,
3359    {
3360        const FIELDS: &[&str] = &["name", "request_id", "requestId"];
3361        #[allow(clippy::enum_variant_names)]
3362        enum GeneratedField {
3363            Name,
3364            RequestId,
3365            __SkipField__,
3366        }
3367        impl<'de> serde::Deserialize<'de> for GeneratedField {
3368            fn deserialize<D>(
3369                deserializer: D,
3370            ) -> std::result::Result<GeneratedField, D::Error>
3371            where
3372                D: serde::Deserializer<'de>,
3373            {
3374                struct GeneratedVisitor;
3375                impl serde::de::Visitor<'_> for GeneratedVisitor {
3376                    type Value = GeneratedField;
3377                    fn expecting(
3378                        &self,
3379                        formatter: &mut std::fmt::Formatter<'_>,
3380                    ) -> std::fmt::Result {
3381                        write!(formatter, "expected one of: {:?}", & FIELDS)
3382                    }
3383                    #[allow(unused_variables)]
3384                    fn visit_str<E>(
3385                        self,
3386                        value: &str,
3387                    ) -> std::result::Result<GeneratedField, E>
3388                    where
3389                        E: serde::de::Error,
3390                    {
3391                        match value {
3392                            "name" => Ok(GeneratedField::Name),
3393                            "requestId" | "request_id" => Ok(GeneratedField::RequestId),
3394                            _ => Ok(GeneratedField::__SkipField__),
3395                        }
3396                    }
3397                }
3398                deserializer.deserialize_identifier(GeneratedVisitor)
3399            }
3400        }
3401        struct GeneratedVisitor;
3402        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3403            type Value = UnprotectSnapshotRequest;
3404            fn expecting(
3405                &self,
3406                formatter: &mut std::fmt::Formatter<'_>,
3407            ) -> std::fmt::Result {
3408                formatter
3409                    .write_str("struct origincloud.pvs.v1beta1.UnprotectSnapshotRequest")
3410            }
3411            fn visit_map<V>(
3412                self,
3413                mut map_: V,
3414            ) -> std::result::Result<UnprotectSnapshotRequest, V::Error>
3415            where
3416                V: serde::de::MapAccess<'de>,
3417            {
3418                let mut name__ = None;
3419                let mut request_id__ = None;
3420                while let Some(k) = map_.next_key()? {
3421                    match k {
3422                        GeneratedField::Name => {
3423                            if name__.is_some() {
3424                                return Err(serde::de::Error::duplicate_field("name"));
3425                            }
3426                            name__ = Some(map_.next_value()?);
3427                        }
3428                        GeneratedField::RequestId => {
3429                            if request_id__.is_some() {
3430                                return Err(serde::de::Error::duplicate_field("requestId"));
3431                            }
3432                            request_id__ = Some(map_.next_value()?);
3433                        }
3434                        GeneratedField::__SkipField__ => {
3435                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
3436                        }
3437                    }
3438                }
3439                Ok(UnprotectSnapshotRequest {
3440                    name: name__.unwrap_or_default(),
3441                    request_id: request_id__.unwrap_or_default(),
3442                })
3443            }
3444        }
3445        deserializer
3446            .deserialize_struct(
3447                "origincloud.pvs.v1beta1.UnprotectSnapshotRequest",
3448                FIELDS,
3449                GeneratedVisitor,
3450            )
3451    }
3452}
3453impl serde::Serialize for UpdateSnapshotRequest {
3454    #[allow(deprecated)]
3455    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3456    where
3457        S: serde::Serializer,
3458    {
3459        use serde::ser::SerializeStruct;
3460        let mut len = 0;
3461        if self.snapshot.is_some() {
3462            len += 1;
3463        }
3464        if self.update_mask.is_some() {
3465            len += 1;
3466        }
3467        let mut struct_ser = serializer
3468            .serialize_struct("origincloud.pvs.v1beta1.UpdateSnapshotRequest", len)?;
3469        if let Some(v) = self.snapshot.as_ref() {
3470            struct_ser.serialize_field("snapshot", v)?;
3471        }
3472        if let Some(v) = self.update_mask.as_ref() {
3473            struct_ser.serialize_field("updateMask", v)?;
3474        }
3475        struct_ser.end()
3476    }
3477}
3478impl<'de> serde::Deserialize<'de> for UpdateSnapshotRequest {
3479    #[allow(deprecated)]
3480    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3481    where
3482        D: serde::Deserializer<'de>,
3483    {
3484        const FIELDS: &[&str] = &["snapshot", "update_mask", "updateMask"];
3485        #[allow(clippy::enum_variant_names)]
3486        enum GeneratedField {
3487            Snapshot,
3488            UpdateMask,
3489            __SkipField__,
3490        }
3491        impl<'de> serde::Deserialize<'de> for GeneratedField {
3492            fn deserialize<D>(
3493                deserializer: D,
3494            ) -> std::result::Result<GeneratedField, D::Error>
3495            where
3496                D: serde::Deserializer<'de>,
3497            {
3498                struct GeneratedVisitor;
3499                impl serde::de::Visitor<'_> for GeneratedVisitor {
3500                    type Value = GeneratedField;
3501                    fn expecting(
3502                        &self,
3503                        formatter: &mut std::fmt::Formatter<'_>,
3504                    ) -> std::fmt::Result {
3505                        write!(formatter, "expected one of: {:?}", & FIELDS)
3506                    }
3507                    #[allow(unused_variables)]
3508                    fn visit_str<E>(
3509                        self,
3510                        value: &str,
3511                    ) -> std::result::Result<GeneratedField, E>
3512                    where
3513                        E: serde::de::Error,
3514                    {
3515                        match value {
3516                            "snapshot" => Ok(GeneratedField::Snapshot),
3517                            "updateMask" | "update_mask" => {
3518                                Ok(GeneratedField::UpdateMask)
3519                            }
3520                            _ => Ok(GeneratedField::__SkipField__),
3521                        }
3522                    }
3523                }
3524                deserializer.deserialize_identifier(GeneratedVisitor)
3525            }
3526        }
3527        struct GeneratedVisitor;
3528        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3529            type Value = UpdateSnapshotRequest;
3530            fn expecting(
3531                &self,
3532                formatter: &mut std::fmt::Formatter<'_>,
3533            ) -> std::fmt::Result {
3534                formatter
3535                    .write_str("struct origincloud.pvs.v1beta1.UpdateSnapshotRequest")
3536            }
3537            fn visit_map<V>(
3538                self,
3539                mut map_: V,
3540            ) -> std::result::Result<UpdateSnapshotRequest, V::Error>
3541            where
3542                V: serde::de::MapAccess<'de>,
3543            {
3544                let mut snapshot__ = None;
3545                let mut update_mask__ = None;
3546                while let Some(k) = map_.next_key()? {
3547                    match k {
3548                        GeneratedField::Snapshot => {
3549                            if snapshot__.is_some() {
3550                                return Err(serde::de::Error::duplicate_field("snapshot"));
3551                            }
3552                            snapshot__ = map_.next_value()?;
3553                        }
3554                        GeneratedField::UpdateMask => {
3555                            if update_mask__.is_some() {
3556                                return Err(serde::de::Error::duplicate_field("updateMask"));
3557                            }
3558                            update_mask__ = map_.next_value()?;
3559                        }
3560                        GeneratedField::__SkipField__ => {
3561                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
3562                        }
3563                    }
3564                }
3565                Ok(UpdateSnapshotRequest {
3566                    snapshot: snapshot__,
3567                    update_mask: update_mask__,
3568                })
3569            }
3570        }
3571        deserializer
3572            .deserialize_struct(
3573                "origincloud.pvs.v1beta1.UpdateSnapshotRequest",
3574                FIELDS,
3575                GeneratedVisitor,
3576            )
3577    }
3578}
3579impl serde::Serialize for UpdateVolumeRequest {
3580    #[allow(deprecated)]
3581    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3582    where
3583        S: serde::Serializer,
3584    {
3585        use serde::ser::SerializeStruct;
3586        let mut len = 0;
3587        if self.volume.is_some() {
3588            len += 1;
3589        }
3590        if self.update_mask.is_some() {
3591            len += 1;
3592        }
3593        if !self.request_id.is_empty() {
3594            len += 1;
3595        }
3596        let mut struct_ser = serializer
3597            .serialize_struct("origincloud.pvs.v1beta1.UpdateVolumeRequest", len)?;
3598        if let Some(v) = self.volume.as_ref() {
3599            struct_ser.serialize_field("volume", v)?;
3600        }
3601        if let Some(v) = self.update_mask.as_ref() {
3602            struct_ser.serialize_field("updateMask", v)?;
3603        }
3604        if !self.request_id.is_empty() {
3605            struct_ser.serialize_field("requestId", &self.request_id)?;
3606        }
3607        struct_ser.end()
3608    }
3609}
3610impl<'de> serde::Deserialize<'de> for UpdateVolumeRequest {
3611    #[allow(deprecated)]
3612    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3613    where
3614        D: serde::Deserializer<'de>,
3615    {
3616        const FIELDS: &[&str] = &[
3617            "volume",
3618            "update_mask",
3619            "updateMask",
3620            "request_id",
3621            "requestId",
3622        ];
3623        #[allow(clippy::enum_variant_names)]
3624        enum GeneratedField {
3625            Volume,
3626            UpdateMask,
3627            RequestId,
3628            __SkipField__,
3629        }
3630        impl<'de> serde::Deserialize<'de> for GeneratedField {
3631            fn deserialize<D>(
3632                deserializer: D,
3633            ) -> std::result::Result<GeneratedField, D::Error>
3634            where
3635                D: serde::Deserializer<'de>,
3636            {
3637                struct GeneratedVisitor;
3638                impl serde::de::Visitor<'_> for GeneratedVisitor {
3639                    type Value = GeneratedField;
3640                    fn expecting(
3641                        &self,
3642                        formatter: &mut std::fmt::Formatter<'_>,
3643                    ) -> std::fmt::Result {
3644                        write!(formatter, "expected one of: {:?}", & FIELDS)
3645                    }
3646                    #[allow(unused_variables)]
3647                    fn visit_str<E>(
3648                        self,
3649                        value: &str,
3650                    ) -> std::result::Result<GeneratedField, E>
3651                    where
3652                        E: serde::de::Error,
3653                    {
3654                        match value {
3655                            "volume" => Ok(GeneratedField::Volume),
3656                            "updateMask" | "update_mask" => {
3657                                Ok(GeneratedField::UpdateMask)
3658                            }
3659                            "requestId" | "request_id" => Ok(GeneratedField::RequestId),
3660                            _ => Ok(GeneratedField::__SkipField__),
3661                        }
3662                    }
3663                }
3664                deserializer.deserialize_identifier(GeneratedVisitor)
3665            }
3666        }
3667        struct GeneratedVisitor;
3668        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3669            type Value = UpdateVolumeRequest;
3670            fn expecting(
3671                &self,
3672                formatter: &mut std::fmt::Formatter<'_>,
3673            ) -> std::fmt::Result {
3674                formatter.write_str("struct origincloud.pvs.v1beta1.UpdateVolumeRequest")
3675            }
3676            fn visit_map<V>(
3677                self,
3678                mut map_: V,
3679            ) -> std::result::Result<UpdateVolumeRequest, V::Error>
3680            where
3681                V: serde::de::MapAccess<'de>,
3682            {
3683                let mut volume__ = None;
3684                let mut update_mask__ = None;
3685                let mut request_id__ = None;
3686                while let Some(k) = map_.next_key()? {
3687                    match k {
3688                        GeneratedField::Volume => {
3689                            if volume__.is_some() {
3690                                return Err(serde::de::Error::duplicate_field("volume"));
3691                            }
3692                            volume__ = map_.next_value()?;
3693                        }
3694                        GeneratedField::UpdateMask => {
3695                            if update_mask__.is_some() {
3696                                return Err(serde::de::Error::duplicate_field("updateMask"));
3697                            }
3698                            update_mask__ = map_.next_value()?;
3699                        }
3700                        GeneratedField::RequestId => {
3701                            if request_id__.is_some() {
3702                                return Err(serde::de::Error::duplicate_field("requestId"));
3703                            }
3704                            request_id__ = Some(map_.next_value()?);
3705                        }
3706                        GeneratedField::__SkipField__ => {
3707                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
3708                        }
3709                    }
3710                }
3711                Ok(UpdateVolumeRequest {
3712                    volume: volume__,
3713                    update_mask: update_mask__,
3714                    request_id: request_id__.unwrap_or_default(),
3715                })
3716            }
3717        }
3718        deserializer
3719            .deserialize_struct(
3720                "origincloud.pvs.v1beta1.UpdateVolumeRequest",
3721                FIELDS,
3722                GeneratedVisitor,
3723            )
3724    }
3725}
3726impl serde::Serialize for Volume {
3727    #[allow(deprecated)]
3728    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3729    where
3730        S: serde::Serializer,
3731    {
3732        use serde::ser::SerializeStruct;
3733        let mut len = 0;
3734        if !self.name.is_empty() {
3735            len += 1;
3736        }
3737        if !self.urn.is_empty() {
3738            len += 1;
3739        }
3740        if self.size_gib != 0 {
3741            len += 1;
3742        }
3743        if !self.storage_class.is_empty() {
3744            len += 1;
3745        }
3746        if !self.source_snapshot.is_empty() {
3747            len += 1;
3748        }
3749        if self.state != 0 {
3750            len += 1;
3751        }
3752        if !self.state_reason.is_empty() {
3753            len += 1;
3754        }
3755        if !self.attachment.is_empty() {
3756            len += 1;
3757        }
3758        if self.resize_state != 0 {
3759            len += 1;
3760        }
3761        if !self.resize_reason.is_empty() {
3762            len += 1;
3763        }
3764        if self.pending_size_gib != 0 {
3765            len += 1;
3766        }
3767        if !self.retention_note.is_empty() {
3768            len += 1;
3769        }
3770        if self.iops != 0 {
3771            len += 1;
3772        }
3773        if self.throughput_mibps != 0 {
3774            len += 1;
3775        }
3776        if !self.creator.is_empty() {
3777            len += 1;
3778        }
3779        if !self.tags.is_empty() {
3780            len += 1;
3781        }
3782        let mut struct_ser = serializer
3783            .serialize_struct("origincloud.pvs.v1beta1.Volume", len)?;
3784        if !self.name.is_empty() {
3785            struct_ser.serialize_field("name", &self.name)?;
3786        }
3787        if !self.urn.is_empty() {
3788            struct_ser.serialize_field("urn", &self.urn)?;
3789        }
3790        if self.size_gib != 0 {
3791            struct_ser.serialize_field("sizeGib", &self.size_gib)?;
3792        }
3793        if !self.storage_class.is_empty() {
3794            struct_ser.serialize_field("storageClass", &self.storage_class)?;
3795        }
3796        if !self.source_snapshot.is_empty() {
3797            struct_ser.serialize_field("sourceSnapshot", &self.source_snapshot)?;
3798        }
3799        if self.state != 0 {
3800            let v = volume::State::try_from(self.state)
3801                .map_err(|_| serde::ser::Error::custom(
3802                    format!("Invalid variant {}", self.state),
3803                ))?;
3804            struct_ser.serialize_field("state", &v)?;
3805        }
3806        if !self.state_reason.is_empty() {
3807            struct_ser.serialize_field("stateReason", &self.state_reason)?;
3808        }
3809        if !self.attachment.is_empty() {
3810            struct_ser.serialize_field("attachment", &self.attachment)?;
3811        }
3812        if self.resize_state != 0 {
3813            let v = volume::ResizeState::try_from(self.resize_state)
3814                .map_err(|_| serde::ser::Error::custom(
3815                    format!("Invalid variant {}", self.resize_state),
3816                ))?;
3817            struct_ser.serialize_field("resizeState", &v)?;
3818        }
3819        if !self.resize_reason.is_empty() {
3820            struct_ser.serialize_field("resizeReason", &self.resize_reason)?;
3821        }
3822        if self.pending_size_gib != 0 {
3823            struct_ser.serialize_field("pendingSizeGib", &self.pending_size_gib)?;
3824        }
3825        if !self.retention_note.is_empty() {
3826            struct_ser.serialize_field("retentionNote", &self.retention_note)?;
3827        }
3828        if self.iops != 0 {
3829            struct_ser.serialize_field("iops", &self.iops)?;
3830        }
3831        if self.throughput_mibps != 0 {
3832            struct_ser.serialize_field("throughputMibps", &self.throughput_mibps)?;
3833        }
3834        if !self.creator.is_empty() {
3835            struct_ser.serialize_field("creator", &self.creator)?;
3836        }
3837        if !self.tags.is_empty() {
3838            struct_ser.serialize_field("tags", &self.tags)?;
3839        }
3840        struct_ser.end()
3841    }
3842}
3843impl<'de> serde::Deserialize<'de> for Volume {
3844    #[allow(deprecated)]
3845    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3846    where
3847        D: serde::Deserializer<'de>,
3848    {
3849        const FIELDS: &[&str] = &[
3850            "name",
3851            "urn",
3852            "size_gib",
3853            "sizeGib",
3854            "storage_class",
3855            "storageClass",
3856            "source_snapshot",
3857            "sourceSnapshot",
3858            "state",
3859            "state_reason",
3860            "stateReason",
3861            "attachment",
3862            "resize_state",
3863            "resizeState",
3864            "resize_reason",
3865            "resizeReason",
3866            "pending_size_gib",
3867            "pendingSizeGib",
3868            "retention_note",
3869            "retentionNote",
3870            "iops",
3871            "throughput_mibps",
3872            "throughputMibps",
3873            "creator",
3874            "tags",
3875        ];
3876        #[allow(clippy::enum_variant_names)]
3877        enum GeneratedField {
3878            Name,
3879            Urn,
3880            SizeGib,
3881            StorageClass,
3882            SourceSnapshot,
3883            State,
3884            StateReason,
3885            Attachment,
3886            ResizeState,
3887            ResizeReason,
3888            PendingSizeGib,
3889            RetentionNote,
3890            Iops,
3891            ThroughputMibps,
3892            Creator,
3893            Tags,
3894            __SkipField__,
3895        }
3896        impl<'de> serde::Deserialize<'de> for GeneratedField {
3897            fn deserialize<D>(
3898                deserializer: D,
3899            ) -> std::result::Result<GeneratedField, D::Error>
3900            where
3901                D: serde::Deserializer<'de>,
3902            {
3903                struct GeneratedVisitor;
3904                impl serde::de::Visitor<'_> for GeneratedVisitor {
3905                    type Value = GeneratedField;
3906                    fn expecting(
3907                        &self,
3908                        formatter: &mut std::fmt::Formatter<'_>,
3909                    ) -> std::fmt::Result {
3910                        write!(formatter, "expected one of: {:?}", & FIELDS)
3911                    }
3912                    #[allow(unused_variables)]
3913                    fn visit_str<E>(
3914                        self,
3915                        value: &str,
3916                    ) -> std::result::Result<GeneratedField, E>
3917                    where
3918                        E: serde::de::Error,
3919                    {
3920                        match value {
3921                            "name" => Ok(GeneratedField::Name),
3922                            "urn" => Ok(GeneratedField::Urn),
3923                            "sizeGib" | "size_gib" => Ok(GeneratedField::SizeGib),
3924                            "storageClass" | "storage_class" => {
3925                                Ok(GeneratedField::StorageClass)
3926                            }
3927                            "sourceSnapshot" | "source_snapshot" => {
3928                                Ok(GeneratedField::SourceSnapshot)
3929                            }
3930                            "state" => Ok(GeneratedField::State),
3931                            "stateReason" | "state_reason" => {
3932                                Ok(GeneratedField::StateReason)
3933                            }
3934                            "attachment" => Ok(GeneratedField::Attachment),
3935                            "resizeState" | "resize_state" => {
3936                                Ok(GeneratedField::ResizeState)
3937                            }
3938                            "resizeReason" | "resize_reason" => {
3939                                Ok(GeneratedField::ResizeReason)
3940                            }
3941                            "pendingSizeGib" | "pending_size_gib" => {
3942                                Ok(GeneratedField::PendingSizeGib)
3943                            }
3944                            "retentionNote" | "retention_note" => {
3945                                Ok(GeneratedField::RetentionNote)
3946                            }
3947                            "iops" => Ok(GeneratedField::Iops),
3948                            "throughputMibps" | "throughput_mibps" => {
3949                                Ok(GeneratedField::ThroughputMibps)
3950                            }
3951                            "creator" => Ok(GeneratedField::Creator),
3952                            "tags" => Ok(GeneratedField::Tags),
3953                            _ => Ok(GeneratedField::__SkipField__),
3954                        }
3955                    }
3956                }
3957                deserializer.deserialize_identifier(GeneratedVisitor)
3958            }
3959        }
3960        struct GeneratedVisitor;
3961        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3962            type Value = Volume;
3963            fn expecting(
3964                &self,
3965                formatter: &mut std::fmt::Formatter<'_>,
3966            ) -> std::fmt::Result {
3967                formatter.write_str("struct origincloud.pvs.v1beta1.Volume")
3968            }
3969            fn visit_map<V>(self, mut map_: V) -> std::result::Result<Volume, V::Error>
3970            where
3971                V: serde::de::MapAccess<'de>,
3972            {
3973                let mut name__ = None;
3974                let mut urn__ = None;
3975                let mut size_gib__ = None;
3976                let mut storage_class__ = None;
3977                let mut source_snapshot__ = None;
3978                let mut state__ = None;
3979                let mut state_reason__ = None;
3980                let mut attachment__ = None;
3981                let mut resize_state__ = None;
3982                let mut resize_reason__ = None;
3983                let mut pending_size_gib__ = None;
3984                let mut retention_note__ = None;
3985                let mut iops__ = None;
3986                let mut throughput_mibps__ = None;
3987                let mut creator__ = None;
3988                let mut tags__ = None;
3989                while let Some(k) = map_.next_key()? {
3990                    match k {
3991                        GeneratedField::Name => {
3992                            if name__.is_some() {
3993                                return Err(serde::de::Error::duplicate_field("name"));
3994                            }
3995                            name__ = Some(map_.next_value()?);
3996                        }
3997                        GeneratedField::Urn => {
3998                            if urn__.is_some() {
3999                                return Err(serde::de::Error::duplicate_field("urn"));
4000                            }
4001                            urn__ = Some(map_.next_value()?);
4002                        }
4003                        GeneratedField::SizeGib => {
4004                            if size_gib__.is_some() {
4005                                return Err(serde::de::Error::duplicate_field("sizeGib"));
4006                            }
4007                            size_gib__ = Some(
4008                                map_
4009                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
4010                                    .0,
4011                            );
4012                        }
4013                        GeneratedField::StorageClass => {
4014                            if storage_class__.is_some() {
4015                                return Err(
4016                                    serde::de::Error::duplicate_field("storageClass"),
4017                                );
4018                            }
4019                            storage_class__ = Some(map_.next_value()?);
4020                        }
4021                        GeneratedField::SourceSnapshot => {
4022                            if source_snapshot__.is_some() {
4023                                return Err(
4024                                    serde::de::Error::duplicate_field("sourceSnapshot"),
4025                                );
4026                            }
4027                            source_snapshot__ = Some(map_.next_value()?);
4028                        }
4029                        GeneratedField::State => {
4030                            if state__.is_some() {
4031                                return Err(serde::de::Error::duplicate_field("state"));
4032                            }
4033                            state__ = Some(map_.next_value::<volume::State>()? as i32);
4034                        }
4035                        GeneratedField::StateReason => {
4036                            if state_reason__.is_some() {
4037                                return Err(
4038                                    serde::de::Error::duplicate_field("stateReason"),
4039                                );
4040                            }
4041                            state_reason__ = Some(map_.next_value()?);
4042                        }
4043                        GeneratedField::Attachment => {
4044                            if attachment__.is_some() {
4045                                return Err(serde::de::Error::duplicate_field("attachment"));
4046                            }
4047                            attachment__ = Some(map_.next_value()?);
4048                        }
4049                        GeneratedField::ResizeState => {
4050                            if resize_state__.is_some() {
4051                                return Err(
4052                                    serde::de::Error::duplicate_field("resizeState"),
4053                                );
4054                            }
4055                            resize_state__ = Some(
4056                                map_.next_value::<volume::ResizeState>()? as i32,
4057                            );
4058                        }
4059                        GeneratedField::ResizeReason => {
4060                            if resize_reason__.is_some() {
4061                                return Err(
4062                                    serde::de::Error::duplicate_field("resizeReason"),
4063                                );
4064                            }
4065                            resize_reason__ = Some(map_.next_value()?);
4066                        }
4067                        GeneratedField::PendingSizeGib => {
4068                            if pending_size_gib__.is_some() {
4069                                return Err(
4070                                    serde::de::Error::duplicate_field("pendingSizeGib"),
4071                                );
4072                            }
4073                            pending_size_gib__ = Some(
4074                                map_
4075                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
4076                                    .0,
4077                            );
4078                        }
4079                        GeneratedField::RetentionNote => {
4080                            if retention_note__.is_some() {
4081                                return Err(
4082                                    serde::de::Error::duplicate_field("retentionNote"),
4083                                );
4084                            }
4085                            retention_note__ = Some(map_.next_value()?);
4086                        }
4087                        GeneratedField::Iops => {
4088                            if iops__.is_some() {
4089                                return Err(serde::de::Error::duplicate_field("iops"));
4090                            }
4091                            iops__ = Some(
4092                                map_
4093                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
4094                                    .0,
4095                            );
4096                        }
4097                        GeneratedField::ThroughputMibps => {
4098                            if throughput_mibps__.is_some() {
4099                                return Err(
4100                                    serde::de::Error::duplicate_field("throughputMibps"),
4101                                );
4102                            }
4103                            throughput_mibps__ = Some(
4104                                map_
4105                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
4106                                    .0,
4107                            );
4108                        }
4109                        GeneratedField::Creator => {
4110                            if creator__.is_some() {
4111                                return Err(serde::de::Error::duplicate_field("creator"));
4112                            }
4113                            creator__ = Some(map_.next_value()?);
4114                        }
4115                        GeneratedField::Tags => {
4116                            if tags__.is_some() {
4117                                return Err(serde::de::Error::duplicate_field("tags"));
4118                            }
4119                            tags__ = Some(
4120                                map_.next_value::<std::collections::BTreeMap<_, _>>()?,
4121                            );
4122                        }
4123                        GeneratedField::__SkipField__ => {
4124                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
4125                        }
4126                    }
4127                }
4128                Ok(Volume {
4129                    name: name__.unwrap_or_default(),
4130                    urn: urn__.unwrap_or_default(),
4131                    size_gib: size_gib__.unwrap_or_default(),
4132                    storage_class: storage_class__.unwrap_or_default(),
4133                    source_snapshot: source_snapshot__.unwrap_or_default(),
4134                    state: state__.unwrap_or_default(),
4135                    state_reason: state_reason__.unwrap_or_default(),
4136                    attachment: attachment__.unwrap_or_default(),
4137                    resize_state: resize_state__.unwrap_or_default(),
4138                    resize_reason: resize_reason__.unwrap_or_default(),
4139                    pending_size_gib: pending_size_gib__.unwrap_or_default(),
4140                    retention_note: retention_note__.unwrap_or_default(),
4141                    iops: iops__.unwrap_or_default(),
4142                    throughput_mibps: throughput_mibps__.unwrap_or_default(),
4143                    creator: creator__.unwrap_or_default(),
4144                    tags: tags__.unwrap_or_default(),
4145                })
4146            }
4147        }
4148        deserializer
4149            .deserialize_struct(
4150                "origincloud.pvs.v1beta1.Volume",
4151                FIELDS,
4152                GeneratedVisitor,
4153            )
4154    }
4155}
4156impl serde::Serialize for volume::ResizeState {
4157    #[allow(deprecated)]
4158    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4159    where
4160        S: serde::Serializer,
4161    {
4162        let variant = match self {
4163            Self::Unspecified => "RESIZE_STATE_UNSPECIFIED",
4164            Self::ResizeCompleted => "RESIZE_COMPLETED",
4165            Self::Resizing => "RESIZING",
4166            Self::ResizeFailed => "RESIZE_FAILED",
4167        };
4168        serializer.serialize_str(variant)
4169    }
4170}
4171impl<'de> serde::Deserialize<'de> for volume::ResizeState {
4172    #[allow(deprecated)]
4173    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4174    where
4175        D: serde::Deserializer<'de>,
4176    {
4177        const FIELDS: &[&str] = &[
4178            "RESIZE_STATE_UNSPECIFIED",
4179            "RESIZE_COMPLETED",
4180            "RESIZING",
4181            "RESIZE_FAILED",
4182        ];
4183        struct GeneratedVisitor;
4184        impl serde::de::Visitor<'_> for GeneratedVisitor {
4185            type Value = volume::ResizeState;
4186            fn expecting(
4187                &self,
4188                formatter: &mut std::fmt::Formatter<'_>,
4189            ) -> std::fmt::Result {
4190                write!(formatter, "expected one of: {:?}", & FIELDS)
4191            }
4192            fn visit_i64<E>(self, v: i64) -> std::result::Result<Self::Value, E>
4193            where
4194                E: serde::de::Error,
4195            {
4196                i32::try_from(v)
4197                    .ok()
4198                    .and_then(|x| {
4199                        x
4200                            .try_into()
4201                            .ok()
4202                            .or_else(|| Some(volume::ResizeState::default()))
4203                    })
4204                    .ok_or_else(|| {
4205                        serde::de::Error::invalid_value(
4206                            serde::de::Unexpected::Signed(v),
4207                            &self,
4208                        )
4209                    })
4210            }
4211            fn visit_u64<E>(self, v: u64) -> std::result::Result<Self::Value, E>
4212            where
4213                E: serde::de::Error,
4214            {
4215                i32::try_from(v)
4216                    .ok()
4217                    .and_then(|x| {
4218                        x
4219                            .try_into()
4220                            .ok()
4221                            .or_else(|| Some(volume::ResizeState::default()))
4222                    })
4223                    .ok_or_else(|| {
4224                        serde::de::Error::invalid_value(
4225                            serde::de::Unexpected::Unsigned(v),
4226                            &self,
4227                        )
4228                    })
4229            }
4230            fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
4231            where
4232                E: serde::de::Error,
4233            {
4234                match value {
4235                    "RESIZE_STATE_UNSPECIFIED" => Ok(volume::ResizeState::Unspecified),
4236                    "RESIZE_COMPLETED" => Ok(volume::ResizeState::ResizeCompleted),
4237                    "RESIZING" => Ok(volume::ResizeState::Resizing),
4238                    "RESIZE_FAILED" => Ok(volume::ResizeState::ResizeFailed),
4239                    _ => Ok(volume::ResizeState::default()),
4240                }
4241            }
4242        }
4243        deserializer.deserialize_any(GeneratedVisitor)
4244    }
4245}
4246impl serde::Serialize for volume::State {
4247    #[allow(deprecated)]
4248    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4249    where
4250        S: serde::Serializer,
4251    {
4252        let variant = match self {
4253            Self::Unspecified => "STATE_UNSPECIFIED",
4254            Self::Creating => "CREATING",
4255            Self::Available => "AVAILABLE",
4256            Self::InUse => "IN_USE",
4257            Self::Deleting => "DELETING",
4258            Self::Deleted => "DELETED",
4259            Self::Error => "ERROR",
4260        };
4261        serializer.serialize_str(variant)
4262    }
4263}
4264impl<'de> serde::Deserialize<'de> for volume::State {
4265    #[allow(deprecated)]
4266    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4267    where
4268        D: serde::Deserializer<'de>,
4269    {
4270        const FIELDS: &[&str] = &[
4271            "STATE_UNSPECIFIED",
4272            "CREATING",
4273            "AVAILABLE",
4274            "IN_USE",
4275            "DELETING",
4276            "DELETED",
4277            "ERROR",
4278        ];
4279        struct GeneratedVisitor;
4280        impl serde::de::Visitor<'_> for GeneratedVisitor {
4281            type Value = volume::State;
4282            fn expecting(
4283                &self,
4284                formatter: &mut std::fmt::Formatter<'_>,
4285            ) -> std::fmt::Result {
4286                write!(formatter, "expected one of: {:?}", & FIELDS)
4287            }
4288            fn visit_i64<E>(self, v: i64) -> std::result::Result<Self::Value, E>
4289            where
4290                E: serde::de::Error,
4291            {
4292                i32::try_from(v)
4293                    .ok()
4294                    .and_then(|x| {
4295                        x.try_into().ok().or_else(|| Some(volume::State::default()))
4296                    })
4297                    .ok_or_else(|| {
4298                        serde::de::Error::invalid_value(
4299                            serde::de::Unexpected::Signed(v),
4300                            &self,
4301                        )
4302                    })
4303            }
4304            fn visit_u64<E>(self, v: u64) -> std::result::Result<Self::Value, E>
4305            where
4306                E: serde::de::Error,
4307            {
4308                i32::try_from(v)
4309                    .ok()
4310                    .and_then(|x| {
4311                        x.try_into().ok().or_else(|| Some(volume::State::default()))
4312                    })
4313                    .ok_or_else(|| {
4314                        serde::de::Error::invalid_value(
4315                            serde::de::Unexpected::Unsigned(v),
4316                            &self,
4317                        )
4318                    })
4319            }
4320            fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
4321            where
4322                E: serde::de::Error,
4323            {
4324                match value {
4325                    "STATE_UNSPECIFIED" => Ok(volume::State::Unspecified),
4326                    "CREATING" => Ok(volume::State::Creating),
4327                    "AVAILABLE" => Ok(volume::State::Available),
4328                    "IN_USE" => Ok(volume::State::InUse),
4329                    "DELETING" => Ok(volume::State::Deleting),
4330                    "DELETED" => Ok(volume::State::Deleted),
4331                    "ERROR" => Ok(volume::State::Error),
4332                    _ => Ok(volume::State::default()),
4333                }
4334            }
4335        }
4336        deserializer.deserialize_any(GeneratedVisitor)
4337    }
4338}
4339/// Calls `SnapshotService`.
4340///
4341/// Snapshots: point-in-time copies of a volume, in the volume's zone. A
4342/// protected, completed snapshot is the source of new volumes and images.
4343#[derive(Clone, Debug)]
4344pub struct SnapshotClient {
4345    service: ::origincloud_core::Service,
4346}
4347impl SnapshotClient {
4348    /// Returns a client of `SnapshotService` that sends its calls through `client`.
4349    pub fn new(client: &::origincloud_core::Client) -> Self {
4350        Self {
4351            service: client.service("pvs", true),
4352        }
4353    }
4354    /// The endpoint the client sends its calls to, which also serves the operations its methods answer with.
4355    pub fn service(&self) -> &::origincloud_core::Service {
4356        &self.service
4357    }
4358    /// Returns a snapshot.
4359    pub async fn get_snapshot(
4360        &self,
4361        request: GetSnapshotRequest,
4362    ) -> ::core::result::Result<Snapshot, ::origincloud_core::Error> {
4363        let p0 = ::origincloud_core::path_value(
4364            "name",
4365            &request.name,
4366            "projects/*/zones/*/snapshots/*",
4367        )?;
4368        let query = ::origincloud_core::query(&request, &["name"])?;
4369        let call = ::origincloud_core::Request::new(
4370                ::origincloud_core::Method::GET,
4371                format!("/v1beta1/{p0}"),
4372            )
4373            .with_query(query)
4374            .idempotent();
4375        self.service.call(call).await
4376    }
4377    /// Lists the snapshots in a zone, oldest first. Deleted snapshots aren't
4378    /// listed. For every zone's snapshots, list the zones whose `services` name
4379    /// `pvs` with the location service (`location.origincloudapis.eu`), then
4380    /// each zone's snapshots.
4381    pub async fn list_snapshots(
4382        &self,
4383        request: ListSnapshotsRequest,
4384    ) -> ::core::result::Result<ListSnapshotsResponse, ::origincloud_core::Error> {
4385        let p0 = ::origincloud_core::path_value(
4386            "parent",
4387            &request.parent,
4388            "projects/*/zones/*",
4389        )?;
4390        let query = ::origincloud_core::query(&request, &["parent"])?;
4391        let call = ::origincloud_core::Request::new(
4392                ::origincloud_core::Method::GET,
4393                format!("/v1beta1/{p0}/snapshots"),
4394            )
4395            .with_query(query)
4396            .idempotent();
4397        self.service.call(call).await
4398    }
4399    /// Returns everything [`list_snapshots`](Self::list_snapshots) lists from `request`'s page on, fetching the next page as the stream reaches it. A page that fails ends the stream with its error.
4400    pub fn all_snapshots(
4401        &self,
4402        request: ListSnapshotsRequest,
4403    ) -> ::origincloud_core::Pages<Snapshot> {
4404        let client = self.clone();
4405        ::origincloud_core::Pages::new(
4406            request,
4407            move |request: ListSnapshotsRequest| {
4408                let client = client.clone();
4409                async move {
4410                    let page = client.list_snapshots(request).await?;
4411                    Ok((page.snapshots, page.next_page_token))
4412                }
4413            },
4414            |request: &mut ListSnapshotsRequest, token: ::std::string::String| {
4415                request.page_token = token;
4416            },
4417        )
4418    }
4419    /// Takes a snapshot of a volume. The operation is done once the copy is
4420    /// `snapshot::State::Completed`, or failed once it is `snapshot::State::Error`.
4421    ///
4422    /// It answers with an operation to wait on: [`Operation::wait`](origincloud_core::Operation::wait) returns the [`Snapshot`] once the change is done.
4423    pub async fn create_snapshot(
4424        &self,
4425        mut request: CreateSnapshotRequest,
4426    ) -> ::core::result::Result<
4427        ::origincloud_core::Operation<Snapshot>,
4428        ::origincloud_core::Error,
4429    > {
4430        if request.request_id.is_empty() {
4431            request.request_id = ::origincloud_core::new_request_id();
4432        }
4433        let p0 = ::origincloud_core::path_value(
4434            "parent",
4435            &request.parent,
4436            "projects/*/zones/*",
4437        )?;
4438        let body = ::origincloud_core::json_body(
4439            request.snapshot.as_ref().unwrap_or(&::core::default::Default::default()),
4440        )?;
4441        let query = ::origincloud_core::query(&request, &["parent", "snapshot"])?;
4442        let call = ::origincloud_core::Request::new(
4443                ::origincloud_core::Method::POST,
4444                format!("/v1beta1/{p0}/snapshots"),
4445            )
4446            .with_body(body)
4447            .with_query(query)
4448            .idempotent();
4449        let operation = self.service.call(call).await?;
4450        Ok(
4451            ::origincloud_core::Operation::new(
4452                self.service.clone(),
4453                operation,
4454                "origincloud.pvs.v1beta1.Snapshot",
4455            ),
4456        )
4457    }
4458    /// Changes a snapshot's tags.
4459    pub async fn update_snapshot(
4460        &self,
4461        request: UpdateSnapshotRequest,
4462    ) -> ::core::result::Result<Snapshot, ::origincloud_core::Error> {
4463        let p0 = ::origincloud_core::path_value(
4464            "snapshot.name",
4465            request.snapshot.as_ref().map_or("", |m| m.name.as_str()),
4466            "projects/*/zones/*/snapshots/*",
4467        )?;
4468        let body = ::origincloud_core::json_body(
4469            request.snapshot.as_ref().unwrap_or(&::core::default::Default::default()),
4470        )?;
4471        let query = ::origincloud_core::query(&request, &["snapshot.name", "snapshot"])?;
4472        let call = ::origincloud_core::Request::new(
4473                ::origincloud_core::Method::PATCH,
4474                format!("/v1beta1/{p0}"),
4475            )
4476            .with_body(body)
4477            .with_query(query);
4478        self.service.call(call).await
4479    }
4480    /// Deletes a snapshot. It must be `snapshot::State::Completed` or `snapshot::State::Error`, and unprotected.
4481    /// The operation is done once the snapshot is `snapshot::State::Deleted`.
4482    ///
4483    /// It answers with an operation to wait on, which has no result: [`Operation::wait`](origincloud_core::Operation::wait) returns once the change is done.
4484    pub async fn delete_snapshot(
4485        &self,
4486        mut request: DeleteSnapshotRequest,
4487    ) -> ::core::result::Result<
4488        ::origincloud_core::Operation<::origincloud_core::protobuf::Empty>,
4489        ::origincloud_core::Error,
4490    > {
4491        if request.request_id.is_empty() {
4492            request.request_id = ::origincloud_core::new_request_id();
4493        }
4494        let p0 = ::origincloud_core::path_value(
4495            "name",
4496            &request.name,
4497            "projects/*/zones/*/snapshots/*",
4498        )?;
4499        let query = ::origincloud_core::query(&request, &["name"])?;
4500        let call = ::origincloud_core::Request::new(
4501                ::origincloud_core::Method::DELETE,
4502                format!("/v1beta1/{p0}"),
4503            )
4504            .with_query(query)
4505            .idempotent();
4506        let operation = self.service.call(call).await?;
4507        Ok(
4508            ::origincloud_core::Operation::new(
4509                self.service.clone(),
4510                operation,
4511                "google.protobuf.Empty",
4512            ),
4513        )
4514    }
4515    /// Protects a snapshot, so it can be the source of volumes and images and
4516    /// can't be deleted. The operation is done once it is `snapshot::ProtectionState::Protected`.
4517    ///
4518    /// It answers with an operation to wait on: [`Operation::wait`](origincloud_core::Operation::wait) returns the [`Snapshot`] once the change is done.
4519    pub async fn protect_snapshot(
4520        &self,
4521        mut request: ProtectSnapshotRequest,
4522    ) -> ::core::result::Result<
4523        ::origincloud_core::Operation<Snapshot>,
4524        ::origincloud_core::Error,
4525    > {
4526        if request.request_id.is_empty() {
4527            request.request_id = ::origincloud_core::new_request_id();
4528        }
4529        let p0 = ::origincloud_core::path_value(
4530            "name",
4531            &request.name,
4532            "projects/*/zones/*/snapshots/*",
4533        )?;
4534        let body = ::origincloud_core::json_body(&request)?;
4535        let call = ::origincloud_core::Request::new(
4536                ::origincloud_core::Method::POST,
4537                format!("/v1beta1/{p0}:protect"),
4538            )
4539            .with_body(body)
4540            .idempotent();
4541        let operation = self.service.call(call).await?;
4542        Ok(
4543            ::origincloud_core::Operation::new(
4544                self.service.clone(),
4545                operation,
4546                "origincloud.pvs.v1beta1.Snapshot",
4547            ),
4548        )
4549    }
4550    /// Unprotects a snapshot, so it can be deleted. Refused with
4551    /// `FAILED_PRECONDITION` while an image is built from it or a volume not
4552    /// `snapshot::State::Deleted` was created from it; delete those first. The operation is
4553    /// done once it is `snapshot::ProtectionState::Unprotected`.
4554    ///
4555    /// It answers with an operation to wait on: [`Operation::wait`](origincloud_core::Operation::wait) returns the [`Snapshot`] once the change is done.
4556    pub async fn unprotect_snapshot(
4557        &self,
4558        mut request: UnprotectSnapshotRequest,
4559    ) -> ::core::result::Result<
4560        ::origincloud_core::Operation<Snapshot>,
4561        ::origincloud_core::Error,
4562    > {
4563        if request.request_id.is_empty() {
4564            request.request_id = ::origincloud_core::new_request_id();
4565        }
4566        let p0 = ::origincloud_core::path_value(
4567            "name",
4568            &request.name,
4569            "projects/*/zones/*/snapshots/*",
4570        )?;
4571        let body = ::origincloud_core::json_body(&request)?;
4572        let call = ::origincloud_core::Request::new(
4573                ::origincloud_core::Method::POST,
4574                format!("/v1beta1/{p0}:unprotect"),
4575            )
4576            .with_body(body)
4577            .idempotent();
4578        let operation = self.service.call(call).await?;
4579        Ok(
4580            ::origincloud_core::Operation::new(
4581                self.service.clone(),
4582                operation,
4583                "origincloud.pvs.v1beta1.Snapshot",
4584            ),
4585        )
4586    }
4587}
4588/// Calls `StorageClassService`.
4589///
4590/// The catalog of storage classes: every tier the platform publishes, each
4591/// saying whether it can be selected right now. Not scoped to an
4592/// organisation or a project; no permission is needed.
4593#[derive(Clone, Debug)]
4594pub struct StorageClassClient {
4595    service: ::origincloud_core::Service,
4596}
4597impl StorageClassClient {
4598    /// Returns a client of `StorageClassService` that sends its calls through `client`.
4599    pub fn new(client: &::origincloud_core::Client) -> Self {
4600        Self {
4601            service: client.service("pvs", true),
4602        }
4603    }
4604    /// The endpoint the client sends its calls to, which also serves the operations its methods answer with.
4605    pub fn service(&self) -> &::origincloud_core::Service {
4606        &self.service
4607    }
4608    /// Returns a storage class.
4609    pub async fn get_storage_class(
4610        &self,
4611        request: GetStorageClassRequest,
4612    ) -> ::core::result::Result<StorageClass, ::origincloud_core::Error> {
4613        let p0 = ::origincloud_core::path_value(
4614            "name",
4615            &request.name,
4616            "storageClasses/*",
4617        )?;
4618        let query = ::origincloud_core::query(&request, &["name"])?;
4619        let call = ::origincloud_core::Request::new(
4620                ::origincloud_core::Method::GET,
4621                format!("/v1beta1/{p0}"),
4622            )
4623            .with_query(query)
4624            .idempotent();
4625        self.service.call(call).await
4626    }
4627    /// Lists every storage class, including those not yet on sale: check
4628    /// `available` before selecting one.
4629    pub async fn list_storage_classes(
4630        &self,
4631        request: ListStorageClassesRequest,
4632    ) -> ::core::result::Result<ListStorageClassesResponse, ::origincloud_core::Error> {
4633        let query = ::origincloud_core::query(&request, &[])?;
4634        let call = ::origincloud_core::Request::new(
4635                ::origincloud_core::Method::GET,
4636                ::std::string::String::from("/v1beta1/storageClasses"),
4637            )
4638            .with_query(query)
4639            .idempotent();
4640        self.service.call(call).await
4641    }
4642}
4643/// Calls `VolumeService`.
4644///
4645/// Block storage volumes: durable disks in one zone that an instance attaches
4646/// to read and write.
4647#[derive(Clone, Debug)]
4648pub struct VolumeClient {
4649    service: ::origincloud_core::Service,
4650}
4651impl VolumeClient {
4652    /// Returns a client of `VolumeService` that sends its calls through `client`.
4653    pub fn new(client: &::origincloud_core::Client) -> Self {
4654        Self {
4655            service: client.service("pvs", true),
4656        }
4657    }
4658    /// The endpoint the client sends its calls to, which also serves the operations its methods answer with.
4659    pub fn service(&self) -> &::origincloud_core::Service {
4660        &self.service
4661    }
4662    /// Returns a volume.
4663    pub async fn get_volume(
4664        &self,
4665        request: GetVolumeRequest,
4666    ) -> ::core::result::Result<Volume, ::origincloud_core::Error> {
4667        let p0 = ::origincloud_core::path_value(
4668            "name",
4669            &request.name,
4670            "projects/*/zones/*/volumes/*",
4671        )?;
4672        let query = ::origincloud_core::query(&request, &["name"])?;
4673        let call = ::origincloud_core::Request::new(
4674                ::origincloud_core::Method::GET,
4675                format!("/v1beta1/{p0}"),
4676            )
4677            .with_query(query)
4678            .idempotent();
4679        self.service.call(call).await
4680    }
4681    /// Lists the volumes in a zone, oldest first. Deleted volumes aren't
4682    /// listed. For every zone's volumes, list the zones whose `services` name
4683    /// `pvs` with the location service (`location.origincloudapis.eu`), then
4684    /// each zone's volumes.
4685    pub async fn list_volumes(
4686        &self,
4687        request: ListVolumesRequest,
4688    ) -> ::core::result::Result<ListVolumesResponse, ::origincloud_core::Error> {
4689        let p0 = ::origincloud_core::path_value(
4690            "parent",
4691            &request.parent,
4692            "projects/*/zones/*",
4693        )?;
4694        let query = ::origincloud_core::query(&request, &["parent"])?;
4695        let call = ::origincloud_core::Request::new(
4696                ::origincloud_core::Method::GET,
4697                format!("/v1beta1/{p0}/volumes"),
4698            )
4699            .with_query(query)
4700            .idempotent();
4701        self.service.call(call).await
4702    }
4703    /// Returns everything [`list_volumes`](Self::list_volumes) lists from `request`'s page on, fetching the next page as the stream reaches it. A page that fails ends the stream with its error.
4704    pub fn all_volumes(
4705        &self,
4706        request: ListVolumesRequest,
4707    ) -> ::origincloud_core::Pages<Volume> {
4708        let client = self.clone();
4709        ::origincloud_core::Pages::new(
4710            request,
4711            move |request: ListVolumesRequest| {
4712                let client = client.clone();
4713                async move {
4714                    let page = client.list_volumes(request).await?;
4715                    Ok((page.volumes, page.next_page_token))
4716                }
4717            },
4718            |request: &mut ListVolumesRequest, token: ::std::string::String| {
4719                request.page_token = token;
4720            },
4721        )
4722    }
4723    /// Creates a volume, empty or as a copy of a snapshot. The operation is
4724    /// done once the volume is `volume::State::Available`, or failed once it is `volume::State::Error`.
4725    ///
4726    /// It answers with an operation to wait on: [`Operation::wait`](origincloud_core::Operation::wait) returns the [`Volume`] once the change is done.
4727    pub async fn create_volume(
4728        &self,
4729        mut request: CreateVolumeRequest,
4730    ) -> ::core::result::Result<
4731        ::origincloud_core::Operation<Volume>,
4732        ::origincloud_core::Error,
4733    > {
4734        if request.request_id.is_empty() {
4735            request.request_id = ::origincloud_core::new_request_id();
4736        }
4737        let p0 = ::origincloud_core::path_value(
4738            "parent",
4739            &request.parent,
4740            "projects/*/zones/*",
4741        )?;
4742        let body = ::origincloud_core::json_body(
4743            request.volume.as_ref().unwrap_or(&::core::default::Default::default()),
4744        )?;
4745        let query = ::origincloud_core::query(&request, &["parent", "volume"])?;
4746        let call = ::origincloud_core::Request::new(
4747                ::origincloud_core::Method::POST,
4748                format!("/v1beta1/{p0}/volumes"),
4749            )
4750            .with_body(body)
4751            .with_query(query)
4752            .idempotent();
4753        let operation = self.service.call(call).await?;
4754        Ok(
4755            ::origincloud_core::Operation::new(
4756                self.service.clone(),
4757                operation,
4758                "origincloud.pvs.v1beta1.Volume",
4759            ),
4760        )
4761    }
4762    /// Creates a volume whose initial content is a disk image the platform
4763    /// downloads. The operation is done once the volume is `volume::State::Available`.
4764    ///
4765    /// It answers with an operation to wait on: [`Operation::wait`](origincloud_core::Operation::wait) returns the [`Volume`] once the change is done.
4766    pub async fn import_volume(
4767        &self,
4768        mut request: ImportVolumeRequest,
4769    ) -> ::core::result::Result<
4770        ::origincloud_core::Operation<Volume>,
4771        ::origincloud_core::Error,
4772    > {
4773        if request.request_id.is_empty() {
4774            request.request_id = ::origincloud_core::new_request_id();
4775        }
4776        let p0 = ::origincloud_core::path_value(
4777            "parent",
4778            &request.parent,
4779            "projects/*/zones/*",
4780        )?;
4781        let body = ::origincloud_core::json_body(&request)?;
4782        let call = ::origincloud_core::Request::new(
4783                ::origincloud_core::Method::POST,
4784                format!("/v1beta1/{p0}/volumes:import"),
4785            )
4786            .with_body(body)
4787            .idempotent();
4788        let operation = self.service.call(call).await?;
4789        Ok(
4790            ::origincloud_core::Operation::new(
4791                self.service.clone(),
4792                operation,
4793                "origincloud.pvs.v1beta1.Volume",
4794            ),
4795        )
4796    }
4797    /// Changes a volume's size or tags. A larger `size_gib` grows the volume,
4798    /// attached or not; it never shrinks, and the size it already has changes
4799    /// nothing. The operation is done once the volume reports the new size.
4800    ///
4801    /// It answers with an operation to wait on: [`Operation::wait`](origincloud_core::Operation::wait) returns the [`Volume`] once the change is done.
4802    pub async fn update_volume(
4803        &self,
4804        mut request: UpdateVolumeRequest,
4805    ) -> ::core::result::Result<
4806        ::origincloud_core::Operation<Volume>,
4807        ::origincloud_core::Error,
4808    > {
4809        if request.request_id.is_empty() {
4810            request.request_id = ::origincloud_core::new_request_id();
4811        }
4812        let p0 = ::origincloud_core::path_value(
4813            "volume.name",
4814            request.volume.as_ref().map_or("", |m| m.name.as_str()),
4815            "projects/*/zones/*/volumes/*",
4816        )?;
4817        let body = ::origincloud_core::json_body(
4818            request.volume.as_ref().unwrap_or(&::core::default::Default::default()),
4819        )?;
4820        let query = ::origincloud_core::query(&request, &["volume.name", "volume"])?;
4821        let call = ::origincloud_core::Request::new(
4822                ::origincloud_core::Method::PATCH,
4823                format!("/v1beta1/{p0}"),
4824            )
4825            .with_body(body)
4826            .with_query(query)
4827            .idempotent();
4828        let operation = self.service.call(call).await?;
4829        Ok(
4830            ::origincloud_core::Operation::new(
4831                self.service.clone(),
4832                operation,
4833                "origincloud.pvs.v1beta1.Volume",
4834            ),
4835        )
4836    }
4837    /// Deletes a volume. It must not be attached, and none of its snapshots
4838    /// may be left. The operation is done once the volume is `volume::State::Deleted`.
4839    ///
4840    /// It answers with an operation to wait on, which has no result: [`Operation::wait`](origincloud_core::Operation::wait) returns once the change is done.
4841    pub async fn delete_volume(
4842        &self,
4843        mut request: DeleteVolumeRequest,
4844    ) -> ::core::result::Result<
4845        ::origincloud_core::Operation<::origincloud_core::protobuf::Empty>,
4846        ::origincloud_core::Error,
4847    > {
4848        if request.request_id.is_empty() {
4849            request.request_id = ::origincloud_core::new_request_id();
4850        }
4851        let p0 = ::origincloud_core::path_value(
4852            "name",
4853            &request.name,
4854            "projects/*/zones/*/volumes/*",
4855        )?;
4856        let query = ::origincloud_core::query(&request, &["name"])?;
4857        let call = ::origincloud_core::Request::new(
4858                ::origincloud_core::Method::DELETE,
4859                format!("/v1beta1/{p0}"),
4860            )
4861            .with_query(query)
4862            .idempotent();
4863        let operation = self.service.call(call).await?;
4864        Ok(
4865            ::origincloud_core::Operation::new(
4866                self.service.clone(),
4867                operation,
4868                "google.protobuf.Empty",
4869            ),
4870        )
4871    }
4872}