Skip to main content

origincloud_billing/generated/
origincloud.billing.v1beta1.rs

1// Code generated by origincloud-sdk-generator. DO NOT EDIT.
2// source: origincloud/billing/v1beta1/legal_document.proto
3// source: origincloud/billing/v1beta1/billing_account.proto
4// source: origincloud/billing/v1beta1/cost.proto
5// source: origincloud/billing/v1beta1/legal_acceptance.proto
6// source: origincloud/billing/v1beta1/price_list.proto
7// source: origincloud/billing/v1beta1/spend_limit.proto
8
9/// A legal document: every version of one kind of document, such as the Terms
10/// of Service.
11#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
12pub struct LegalDocument {
13    /// The document's resource name, `legalDocuments/{legal_document}`, where
14    /// `{legal_document}` is one of `terms`, `dpa`, `sla`, `aup`,
15    /// `subprocessors`, `toms`, `privacy`, `switching` and
16    /// `shared-responsibility`.
17    #[prost(string, tag = "1")]
18    pub name: ::prost::alloc::string::String,
19    /// The document's title, as its latest version names it, such as `Terms of
20    /// Service`.
21    #[prost(string, tag = "2")]
22    pub display_name: ::prost::alloc::string::String,
23    /// Whether a customer accepts this document. A `legal_document_version::ChangeClass::Material` version of one
24    /// that is accepted needs a new acceptance; the other documents are
25    /// published only.
26    #[prost(bool, tag = "3")]
27    pub acceptance_required: bool,
28    /// The version in force today, by its resource name. Empty while the first
29    /// version has not taken effect yet.
30    #[prost(string, tag = "4")]
31    pub current_version: ::prost::alloc::string::String,
32    /// The latest version published, by its resource name: `current_version`,
33    /// or a version announced to take effect later.
34    #[prost(string, tag = "5")]
35    pub latest_version: ::prost::alloc::string::String,
36}
37/// One published version of a legal document. It never changes once
38/// published.
39#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
40pub struct LegalDocumentVersion {
41    /// The version's resource name,
42    /// `legalDocuments/{legal_document}/versions/{version}`, where `{version}`
43    /// is `YYYY-MM`, or `YYYY-MM-2`, `YYYY-MM-3` and so on for another version
44    /// in the same month.
45    #[prost(string, tag = "1")]
46    pub name: ::prost::alloc::string::String,
47    /// The version's title, such as `Terms of Service`.
48    #[prost(string, tag = "2")]
49    pub display_name: ::prost::alloc::string::String,
50    /// The day the version takes effect. It applies from that day until the
51    /// next version of the document takes effect.
52    #[prost(message, optional, tag = "3")]
53    pub effective_date: ::core::option::Option<::origincloud_core::types::Date>,
54    /// What the version changes.
55    #[prost(enumeration = "legal_document_version::ChangeClass", tag = "4")]
56    pub change_class: i32,
57    /// A plain-language summary of what changed, as the acceptance dialog and
58    /// the announcement show it.
59    #[prost(string, tag = "5")]
60    pub change_summary: ::prost::alloc::string::String,
61    /// The SHA-256 of `markdown`, in lowercase hexadecimal: what identifies the
62    /// version, and what an acceptance of it records.
63    #[prost(string, tag = "6")]
64    pub sha256: ::prost::alloc::string::String,
65    /// The version's source, Markdown with its YAML front matter, exactly as
66    /// `sha256` is computed over it.
67    #[prost(string, tag = "7")]
68    pub markdown: ::prost::alloc::string::String,
69    /// The version's text as an HTML fragment, without its title: safe to embed
70    /// as it is. A reference to another legal document links the version of it
71    /// in force on `effective_date`.
72    #[prost(string, tag = "8")]
73    pub html: ::prost::alloc::string::String,
74    /// Where the version is published on the web, under a URL that never
75    /// changes, such as `<https://origincloud.eu/legal/terms/2026-12`.>
76    #[prost(string, tag = "9")]
77    pub uri: ::prost::alloc::string::String,
78    /// Where the version's PDF is downloaded from (DownloadLegalDocumentVersion).
79    #[prost(string, tag = "10")]
80    pub pdf_uri: ::prost::alloc::string::String,
81}
82/// Nested message and enum types in `LegalDocumentVersion`.
83pub mod legal_document_version {
84    /// What a version changes, and so what publishing it asks of a customer.
85    #[derive(
86        Clone,
87        Copy,
88        Debug,
89        PartialEq,
90        Eq,
91        Hash,
92        PartialOrd,
93        Ord,
94        ::prost::Enumeration
95    )]
96    #[repr(i32)]
97    pub enum ChangeClass {
98        /// Not used.
99        Unspecified = 0,
100        /// Changes rights or obligations. For a document customers accept, a
101        /// customer accepts this version before it applies to them, and it is
102        /// announced at least six weeks before it takes effect.
103        Material = 1,
104        /// Announced ahead and never accepted, such as a new sub-processor,
105        /// announced at least 30 days before it takes effect.
106        Notice = 2,
107        /// Wording, corrections and formatting. Asks nothing of anyone.
108        Editorial = 3,
109    }
110    impl ChangeClass {
111        /// String value of the enum field names used in the ProtoBuf definition.
112        ///
113        /// The values are not transformed in any way and thus are considered stable
114        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
115        pub fn as_str_name(&self) -> &'static str {
116            match self {
117                Self::Unspecified => "CHANGE_CLASS_UNSPECIFIED",
118                Self::Material => "MATERIAL",
119                Self::Notice => "NOTICE",
120                Self::Editorial => "EDITORIAL",
121            }
122        }
123        /// Creates an enum from field names used in the ProtoBuf definition.
124        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
125            match value {
126                "CHANGE_CLASS_UNSPECIFIED" => Some(Self::Unspecified),
127                "MATERIAL" => Some(Self::Material),
128                "NOTICE" => Some(Self::Notice),
129                "EDITORIAL" => Some(Self::Editorial),
130                _ => None,
131            }
132        }
133    }
134}
135/// A version to accept, with the text it was shown as.
136#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
137pub struct LegalDocumentVersionToAccept {
138    /// The version, `legalDocuments/{legal_document}/versions/{version}`.
139    #[prost(string, tag = "1")]
140    pub legal_document_version: ::prost::alloc::string::String,
141    /// The version's `sha256`, as read with it: an acceptance is refused when
142    /// the text shown isn't the version's.
143    #[prost(string, tag = "2")]
144    pub sha256: ::prost::alloc::string::String,
145}
146/// The request for ListLegalDocuments.
147#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
148pub struct ListLegalDocumentsRequest {
149    /// The most documents to return; the server clamps it, and 0 means its
150    /// default.
151    #[prost(int32, tag = "1")]
152    pub page_size: i32,
153    /// A previous response's `next_page_token`, for the page after it.
154    #[prost(string, tag = "2")]
155    pub page_token: ::prost::alloc::string::String,
156}
157/// The response for ListLegalDocuments.
158#[derive(Clone, PartialEq, ::prost::Message)]
159pub struct ListLegalDocumentsResponse {
160    /// The documents on this page.
161    #[prost(message, repeated, tag = "1")]
162    pub legal_documents: ::prost::alloc::vec::Vec<LegalDocument>,
163    /// The token for the next page; empty on the last one.
164    #[prost(string, tag = "2")]
165    pub next_page_token: ::prost::alloc::string::String,
166}
167/// The request for GetLegalDocument.
168#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
169pub struct GetLegalDocumentRequest {
170    /// The document to return, `legalDocuments/{legal_document}`.
171    #[prost(string, tag = "1")]
172    pub name: ::prost::alloc::string::String,
173}
174/// The request for ListLegalDocumentVersions.
175#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
176pub struct ListLegalDocumentVersionsRequest {
177    /// The document whose versions to list, `legalDocuments/{legal_document}`.
178    #[prost(string, tag = "1")]
179    pub parent: ::prost::alloc::string::String,
180    /// The most versions to return; the server clamps it, and 0 means its
181    /// default.
182    #[prost(int32, tag = "2")]
183    pub page_size: i32,
184    /// A previous response's `next_page_token`, for the page after it.
185    #[prost(string, tag = "3")]
186    pub page_token: ::prost::alloc::string::String,
187}
188/// The response for ListLegalDocumentVersions.
189#[derive(Clone, PartialEq, ::prost::Message)]
190pub struct ListLegalDocumentVersionsResponse {
191    /// The versions on this page.
192    #[prost(message, repeated, tag = "1")]
193    pub legal_document_versions: ::prost::alloc::vec::Vec<LegalDocumentVersion>,
194    /// The token for the next page; empty on the last one.
195    #[prost(string, tag = "2")]
196    pub next_page_token: ::prost::alloc::string::String,
197}
198/// The request for GetLegalDocumentVersion.
199#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
200pub struct GetLegalDocumentVersionRequest {
201    /// The version to return,
202    /// `legalDocuments/{legal_document}/versions/{version}`.
203    #[prost(string, tag = "1")]
204    pub name: ::prost::alloc::string::String,
205}
206/// The request for DownloadLegalDocumentVersion.
207#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
208pub struct DownloadLegalDocumentVersionRequest {
209    /// The version to download,
210    /// `legalDocuments/{legal_document}/versions/{version}`.
211    #[prost(string, tag = "1")]
212    pub name: ::prost::alloc::string::String,
213}
214/// An organization's billing account: who invoices are issued to, and how
215/// its projects' usage is paid.
216#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
217pub struct BillingAccount {
218    /// The billing account's resource name.
219    #[prost(string, tag = "1")]
220    pub name: ::prost::alloc::string::String,
221    /// The billing account's URN, the identifier access policies and the audit
222    /// log use.
223    #[prost(string, tag = "2")]
224    pub urn: ::prost::alloc::string::String,
225    /// The name the console and spend-limit alerts show. Not empty. An
226    /// organization's default account is called `default` until it is
227    /// renamed.
228    #[prost(string, tag = "3")]
229    pub display_name: ::prost::alloc::string::String,
230    /// Whether this is the organization's default billing account: the one
231    /// its new projects are linked to. Every organization has exactly one,
232    /// and it can't be deleted.
233    #[prost(bool, tag = "4")]
234    pub default_account: bool,
235    /// The postal address invoices are issued to. Required to create an
236    /// account; unset only on an organization's default account until its
237    /// profile is set.
238    #[prost(message, optional, tag = "5")]
239    pub billing_address: ::core::option::Option<BillingAddress>,
240    /// Where invoices are sent. Required to create an account; empty only on
241    /// an organization's default account until its profile is set.
242    #[prost(string, tag = "6")]
243    pub invoice_email: ::prost::alloc::string::String,
244    /// The VAT identification number invoices name; empty for none. Required
245    /// for a billing address outside Germany.
246    #[prost(string, tag = "7")]
247    pub vat_id: ::prost::alloc::string::String,
248    /// Who invoices are addressed to. Required to create an account; empty
249    /// only on an organization's default account until its profile is set.
250    #[prost(string, tag = "8")]
251    pub contact_person: ::prost::alloc::string::String,
252    /// How the account is paid.
253    #[prost(message, optional, tag = "9")]
254    pub payment_method: ::core::option::Option<PaymentMethod>,
255    /// When the billing account was created.
256    #[prost(message, optional, tag = "10")]
257    pub create_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
258    /// The principal that created the billing account, such as `user:<id>` or
259    /// `service_account:<id>`.
260    #[prost(string, tag = "11")]
261    pub creator: ::prost::alloc::string::String,
262}
263/// A postal address invoices are issued to. Every field is required.
264#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
265pub struct BillingAddress {
266    /// The street and house number.
267    #[prost(string, tag = "1")]
268    pub street: ::prost::alloc::string::String,
269    /// The city.
270    #[prost(string, tag = "2")]
271    pub city: ::prost::alloc::string::String,
272    /// The postal code.
273    #[prost(string, tag = "3")]
274    pub postal_code: ::prost::alloc::string::String,
275    /// The country, as the ISO 3166-1 alpha-2 code of one of the countries
276    /// ListBillingCountries lists, such as `DE`.
277    #[prost(string, tag = "4")]
278    pub region_code: ::prost::alloc::string::String,
279}
280/// How a billing account is paid. Only the payment method's kind and the
281/// last digits of a card are shown; the payment details themselves stay
282/// with the payment provider.
283#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
284pub struct PaymentMethod {
285    /// Whether the account can pay for usage.
286    #[prost(enumeration = "payment_method::State", tag = "1")]
287    pub state: i32,
288    /// The verified card's brand, such as `visa`; empty while no payment
289    /// method is verified, and for one that isn't a card.
290    #[prost(string, tag = "2")]
291    pub card_brand: ::prost::alloc::string::String,
292    /// The verified card's last four digits; empty while no payment method is
293    /// verified, and for one that isn't a card.
294    #[prost(string, tag = "3")]
295    pub card_last4: ::prost::alloc::string::String,
296}
297/// Nested message and enum types in `PaymentMethod`.
298pub mod payment_method {
299    /// Whether the account can pay for usage.
300    #[derive(
301        Clone,
302        Copy,
303        Debug,
304        PartialEq,
305        Eq,
306        Hash,
307        PartialOrd,
308        Ord,
309        ::prost::Enumeration
310    )]
311    #[repr(i32)]
312    pub enum State {
313        /// Not set.
314        Unspecified = 0,
315        /// No verified payment method: the projects linked to the account can't
316        /// create billable resources until one is added with
317        /// StartPaymentMethodSetup and ConfirmPaymentMethodSetup.
318        Missing = 1,
319        /// A payment method is verified, and billable resources can be created.
320        Verified = 2,
321        /// The account is invoiced by arrangement with the platform's operator:
322        /// it needs no payment method, and the setup methods are refused.
323        NotRequired = 3,
324    }
325    impl State {
326        /// String value of the enum field names used in the ProtoBuf definition.
327        ///
328        /// The values are not transformed in any way and thus are considered stable
329        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
330        pub fn as_str_name(&self) -> &'static str {
331            match self {
332                Self::Unspecified => "STATE_UNSPECIFIED",
333                Self::Missing => "MISSING",
334                Self::Verified => "VERIFIED",
335                Self::NotRequired => "NOT_REQUIRED",
336            }
337        }
338        /// Creates an enum from field names used in the ProtoBuf definition.
339        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
340            match value {
341                "STATE_UNSPECIFIED" => Some(Self::Unspecified),
342                "MISSING" => Some(Self::Missing),
343                "VERIFIED" => Some(Self::Verified),
344                "NOT_REQUIRED" => Some(Self::NotRequired),
345                _ => None,
346            }
347        }
348    }
349}
350/// Which billing account pays for a project.
351#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
352pub struct ProjectBillingInfo {
353    /// The billing info's resource name, `projects/{project}/billingInfo`.
354    #[prost(string, tag = "1")]
355    pub name: ::prost::alloc::string::String,
356    /// The billing account that pays for the project's usage, one of its
357    /// organization's.
358    #[prost(string, tag = "3")]
359    pub billing_account: ::prost::alloc::string::String,
360}
361/// A country a billing address may be in.
362#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
363pub struct BillingCountry {
364    /// The country's resource name, `billingCountries/{code}`.
365    #[prost(string, tag = "1")]
366    pub name: ::prost::alloc::string::String,
367    /// The ISO 3166-1 alpha-2 code a billing address names it by, such as
368    /// `DE`.
369    #[prost(string, tag = "2")]
370    pub region_code: ::prost::alloc::string::String,
371    /// The country's name in English.
372    #[prost(string, tag = "3")]
373    pub display_name: ::prost::alloc::string::String,
374    /// Whether a billing account with an address in this country needs a
375    /// `vat_id`. Customers in every country but Germany are invoiced without
376    /// VAT, as businesses under the reverse-charge rule, which needs one.
377    #[prost(bool, tag = "4")]
378    pub vat_id_required: bool,
379}
380/// The request for GetBillingAccount.
381#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
382pub struct GetBillingAccountRequest {
383    /// The billing account to return.
384    #[prost(string, tag = "1")]
385    pub name: ::prost::alloc::string::String,
386}
387/// The request for ListBillingAccounts.
388#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
389pub struct ListBillingAccountsRequest {
390    /// The organization whose billing accounts to list,
391    /// `organizations/{organization}`.
392    #[prost(string, tag = "1")]
393    pub parent: ::prost::alloc::string::String,
394    /// The most billing accounts to return; the server clamps it, and 0 means
395    /// its default.
396    #[prost(int32, tag = "2")]
397    pub page_size: i32,
398    /// A previous response's `next_page_token`, for the page after it.
399    #[prost(string, tag = "3")]
400    pub page_token: ::prost::alloc::string::String,
401}
402/// The response for ListBillingAccounts.
403#[derive(Clone, PartialEq, ::prost::Message)]
404pub struct ListBillingAccountsResponse {
405    /// The billing accounts on this page.
406    #[prost(message, repeated, tag = "1")]
407    pub billing_accounts: ::prost::alloc::vec::Vec<BillingAccount>,
408    /// The token for the next page; empty on the last one.
409    #[prost(string, tag = "2")]
410    pub next_page_token: ::prost::alloc::string::String,
411}
412/// The request for CreateBillingAccount.
413#[derive(Clone, PartialEq, ::prost::Message)]
414pub struct CreateBillingAccountRequest {
415    /// The organization to create the billing account in,
416    /// `organizations/{organization}`.
417    #[prost(string, tag = "1")]
418    pub parent: ::prost::alloc::string::String,
419    /// The billing account to create: its `display_name` and profile.
420    #[prost(message, optional, tag = "2")]
421    pub billing_account: ::core::option::Option<BillingAccount>,
422    /// A UUID; a repeat with the same id returns the billing account the first
423    /// request created instead of creating a second one.
424    #[prost(string, tag = "3")]
425    pub request_id: ::prost::alloc::string::String,
426    /// The legal document versions the new billing account accepts, each with
427    /// the `sha256` of the text shown. Required once a version of a document
428    /// customers accept is in force: every such version must be accepted, or
429    /// the request fails naming `acceptedLegalDocuments` and creates nothing.
430    #[prost(message, repeated, tag = "4")]
431    pub accepted_legal_documents: ::prost::alloc::vec::Vec<LegalDocumentVersionToAccept>,
432    /// That the caller acts as a business (§ 14 BGB) for the billing account's
433    /// legal entity. Must be true when `accepted_legal_documents` is set.
434    #[prost(bool, tag = "5")]
435    pub acts_as_business: bool,
436}
437/// The request for UpdateBillingAccount.
438#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
439pub struct UpdateBillingAccountRequest {
440    /// The billing account, by its name, with the fields to change.
441    #[prost(message, optional, tag = "1")]
442    pub billing_account: ::core::option::Option<BillingAccount>,
443    /// The fields to change: `display_name`, `billing_address`,
444    /// `invoice_email`, `vat_id` and `contact_person`. `*` is every one of
445    /// them.
446    #[prost(message, optional, tag = "2")]
447    pub update_mask: ::core::option::Option<::origincloud_core::protobuf::FieldMask>,
448}
449/// The request for DeleteBillingAccount.
450#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
451pub struct DeleteBillingAccountRequest {
452    /// The billing account to delete.
453    #[prost(string, tag = "1")]
454    pub name: ::prost::alloc::string::String,
455}
456/// The request for StartPaymentMethodSetup.
457#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
458pub struct StartPaymentMethodSetupRequest {
459    /// The billing account to add a payment method to.
460    #[prost(string, tag = "1")]
461    pub name: ::prost::alloc::string::String,
462}
463/// The response for StartPaymentMethodSetup.
464#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
465pub struct StartPaymentMethodSetupResponse {
466    /// The payment provider's page to open in a browser, where the payment
467    /// details are entered. It returns to the console when done.
468    #[prost(string, tag = "1")]
469    pub redirect_uri: ::prost::alloc::string::String,
470}
471/// The request for ConfirmPaymentMethodSetup.
472#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
473pub struct ConfirmPaymentMethodSetupRequest {
474    /// The billing account whose setup to complete.
475    #[prost(string, tag = "1")]
476    pub name: ::prost::alloc::string::String,
477}
478/// The request for GetProjectBillingInfo.
479#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
480pub struct GetProjectBillingInfoRequest {
481    /// The billing info to return, `projects/{project}/billingInfo`.
482    #[prost(string, tag = "1")]
483    pub name: ::prost::alloc::string::String,
484}
485/// The request for UpdateProjectBillingInfo.
486#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
487pub struct UpdateProjectBillingInfoRequest {
488    /// The billing info, by its name, with the billing account to link.
489    #[prost(message, optional, tag = "1")]
490    pub project_billing_info: ::core::option::Option<ProjectBillingInfo>,
491    /// The fields to change: `billing_account`. `*` is the same.
492    #[prost(message, optional, tag = "2")]
493    pub update_mask: ::core::option::Option<::origincloud_core::protobuf::FieldMask>,
494}
495/// The request for ListProjectBillingInfo.
496#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
497pub struct ListProjectBillingInfoRequest {
498    /// The billing account whose projects to list.
499    #[prost(string, tag = "1")]
500    pub name: ::prost::alloc::string::String,
501    /// The most projects to return; the server clamps it, and 0 means its
502    /// default.
503    #[prost(int32, tag = "2")]
504    pub page_size: i32,
505    /// A previous response's `next_page_token`, for the page after it.
506    #[prost(string, tag = "3")]
507    pub page_token: ::prost::alloc::string::String,
508}
509/// The response for ListProjectBillingInfo.
510#[derive(Clone, PartialEq, ::prost::Message)]
511pub struct ListProjectBillingInfoResponse {
512    /// The billing info of each project on this page.
513    #[prost(message, repeated, tag = "1")]
514    pub project_billing_infos: ::prost::alloc::vec::Vec<ProjectBillingInfo>,
515    /// The token for the next page; empty on the last one.
516    #[prost(string, tag = "2")]
517    pub next_page_token: ::prost::alloc::string::String,
518}
519/// The request for GetBillingCountry.
520#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
521pub struct GetBillingCountryRequest {
522    /// The country to return, `billingCountries/{code}`, such as
523    /// `billingCountries/DE`.
524    #[prost(string, tag = "1")]
525    pub name: ::prost::alloc::string::String,
526}
527/// The request for ListBillingCountries.
528#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
529pub struct ListBillingCountriesRequest {
530    /// The most countries to return; the server clamps it, and 0 means its
531    /// default.
532    #[prost(int32, tag = "1")]
533    pub page_size: i32,
534    /// A previous response's `next_page_token`, for the page after it.
535    #[prost(string, tag = "2")]
536    pub page_token: ::prost::alloc::string::String,
537}
538/// The response for ListBillingCountries.
539#[derive(Clone, PartialEq, ::prost::Message)]
540pub struct ListBillingCountriesResponse {
541    /// The countries on this page.
542    #[prost(message, repeated, tag = "1")]
543    pub billing_countries: ::prost::alloc::vec::Vec<BillingCountry>,
544    /// The token for the next page; empty on the last one.
545    #[prost(string, tag = "2")]
546    pub next_page_token: ::prost::alloc::string::String,
547}
548/// A cost report: the period's total, by service and, within a service, by
549/// product. Every amount is in EUR, before VAT, as a decimal string.
550#[derive(Clone, PartialEq, ::prost::Message)]
551pub struct CostReport {
552    /// The period's total.
553    #[prost(string, tag = "1")]
554    pub total: ::prost::alloc::string::String,
555    /// Each service with any cost in the period, such as `compute`, in name
556    /// order.
557    #[prost(message, repeated, tag = "2")]
558    pub services: ::prost::alloc::vec::Vec<ServiceCost>,
559}
560/// One service's cost in a report.
561#[derive(Clone, PartialEq, ::prost::Message)]
562pub struct ServiceCost {
563    /// The service, the first segment of its products' keys, such as
564    /// `compute`.
565    #[prost(string, tag = "1")]
566    pub service: ::prost::alloc::string::String,
567    /// The service's total.
568    #[prost(string, tag = "2")]
569    pub total: ::prost::alloc::string::String,
570    /// Each of the service's products with any cost in the period, in key
571    /// order.
572    #[prost(message, repeated, tag = "3")]
573    pub products: ::prost::alloc::vec::Vec<ProductCost>,
574}
575/// One product's cost in a report.
576#[derive(Clone, PartialEq, ::prost::Message)]
577pub struct ProductCost {
578    /// The product as the price list names it, such as `compute.gp1.core.2`.
579    #[prost(string, tag = "1")]
580    pub product_key: ::prost::alloc::string::String,
581    /// The product's total.
582    #[prost(string, tag = "2")]
583    pub total: ::prost::alloc::string::String,
584    /// The buckets with any cost, oldest first.
585    #[prost(message, repeated, tag = "3")]
586    pub buckets: ::prost::alloc::vec::Vec<CostBucket>,
587}
588/// The cost of one hour or one day.
589#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
590pub struct CostBucket {
591    /// When the bucket starts.
592    #[prost(message, optional, tag = "1")]
593    pub start_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
594    /// The bucket's cost.
595    #[prost(string, tag = "2")]
596    pub amount: ::prost::alloc::string::String,
597}
598/// An organization's cost report: its projects' together, and each
599/// project's.
600#[derive(Clone, PartialEq, ::prost::Message)]
601pub struct OrganizationCostReport {
602    /// The period's total of every project.
603    #[prost(string, tag = "1")]
604    pub total: ::prost::alloc::string::String,
605    /// Each service with any cost in the period, over every project.
606    #[prost(message, repeated, tag = "2")]
607    pub services: ::prost::alloc::vec::Vec<ServiceCost>,
608    /// Each project with any cost in the period, in id order, a project
609    /// deleted since included.
610    #[prost(message, repeated, tag = "3")]
611    pub projects: ::prost::alloc::vec::Vec<ProjectCost>,
612}
613/// One project's cost in an organization's report, over every service.
614#[derive(Clone, PartialEq, ::prost::Message)]
615pub struct ProjectCost {
616    /// The project, `projects/{project}`.
617    #[prost(string, tag = "1")]
618    pub project: ::prost::alloc::string::String,
619    /// The project's total.
620    #[prost(string, tag = "2")]
621    pub total: ::prost::alloc::string::String,
622    /// The buckets with any cost, oldest first.
623    #[prost(message, repeated, tag = "3")]
624    pub buckets: ::prost::alloc::vec::Vec<CostBucket>,
625}
626/// One metered interval of one resource: how much of a metric it used from
627/// `start_time` to `end_time`.
628#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
629pub struct UsageRecord {
630    /// The kind of resource, such as `compute.instance`.
631    #[prost(string, tag = "1")]
632    pub resource_kind: ::prost::alloc::string::String,
633    /// The resource's id.
634    #[prost(string, tag = "2")]
635    pub resource_id: ::prost::alloc::string::String,
636    /// What was measured, such as `running_seconds`.
637    #[prost(string, tag = "3")]
638    pub metric: ::prost::alloc::string::String,
639    /// The product the usage is priced as, such as `compute.gp1.core.2`;
640    /// empty for a kind of resource that has none.
641    #[prost(string, tag = "4")]
642    pub product_key: ::prost::alloc::string::String,
643    /// How much was used, in the metric's unit, as a decimal string.
644    #[prost(string, tag = "5")]
645    pub quantity: ::prost::alloc::string::String,
646    /// When the interval starts.
647    #[prost(message, optional, tag = "6")]
648    pub start_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
649    /// When the interval ends.
650    #[prost(message, optional, tag = "7")]
651    pub end_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
652    /// The billing account the usage was charged to, the one the project was
653    /// linked to when it was recorded; empty if it had none.
654    #[prost(string, tag = "8")]
655    pub billing_account: ::prost::alloc::string::String,
656}
657/// The request for QueryProjectCost.
658#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
659pub struct QueryProjectCostRequest {
660    /// The project, `projects/{project}`.
661    #[prost(string, tag = "1")]
662    pub project: ::prost::alloc::string::String,
663    /// The period's start, included.
664    #[prost(message, optional, tag = "2")]
665    pub start_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
666    /// The period's end, left out; after `start_time`.
667    #[prost(message, optional, tag = "3")]
668    pub end_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
669    /// How finely to bucket the cost; daily when unset.
670    #[prost(enumeration = "Granularity", tag = "4")]
671    pub granularity: i32,
672}
673/// The request for QueryOrganizationCost.
674#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
675pub struct QueryOrganizationCostRequest {
676    /// The organization, `organizations/{organization}`.
677    #[prost(string, tag = "1")]
678    pub organization: ::prost::alloc::string::String,
679    /// The period's start, included.
680    #[prost(message, optional, tag = "2")]
681    pub start_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
682    /// The period's end, left out; after `start_time`.
683    #[prost(message, optional, tag = "3")]
684    pub end_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
685    /// How finely to bucket the cost; daily when unset.
686    #[prost(enumeration = "Granularity", tag = "4")]
687    pub granularity: i32,
688}
689/// The request for QueryBillingAccountCost.
690#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
691pub struct QueryBillingAccountCostRequest {
692    /// The billing account.
693    #[prost(string, tag = "1")]
694    pub billing_account: ::prost::alloc::string::String,
695    /// The period's start, included.
696    #[prost(message, optional, tag = "2")]
697    pub start_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
698    /// The period's end, left out; after `start_time`.
699    #[prost(message, optional, tag = "3")]
700    pub end_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
701    /// How finely to bucket the cost; daily when unset.
702    #[prost(enumeration = "Granularity", tag = "4")]
703    pub granularity: i32,
704}
705/// The request for QueryProjectUsage.
706#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
707pub struct QueryProjectUsageRequest {
708    /// The project, `projects/{project}`.
709    #[prost(string, tag = "1")]
710    pub project: ::prost::alloc::string::String,
711    /// The period's start: records that end after it are listed.
712    #[prost(message, optional, tag = "2")]
713    pub start_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
714    /// The period's end: records that start before it are listed; after
715    /// `start_time`.
716    #[prost(message, optional, tag = "3")]
717    pub end_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
718    /// The most records to return; the server clamps it, and 0 means its
719    /// default.
720    #[prost(int32, tag = "4")]
721    pub page_size: i32,
722    /// A previous response's `next_page_token`, for the page after it.
723    #[prost(string, tag = "5")]
724    pub page_token: ::prost::alloc::string::String,
725}
726/// The response for QueryProjectUsage.
727#[derive(Clone, PartialEq, ::prost::Message)]
728pub struct QueryProjectUsageResponse {
729    /// The usage records on this page.
730    #[prost(message, repeated, tag = "1")]
731    pub usage_records: ::prost::alloc::vec::Vec<UsageRecord>,
732    /// The token for the next page; empty on the last one.
733    #[prost(string, tag = "2")]
734    pub next_page_token: ::prost::alloc::string::String,
735}
736/// How finely a report's cost is bucketed.
737#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
738#[repr(i32)]
739pub enum Granularity {
740    /// Not set: daily.
741    Unspecified = 0,
742    /// One bucket per hour, starting on the hour.
743    Hourly = 1,
744    /// One bucket per day, starting at midnight UTC.
745    Daily = 2,
746}
747impl Granularity {
748    /// String value of the enum field names used in the ProtoBuf definition.
749    ///
750    /// The values are not transformed in any way and thus are considered stable
751    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
752    pub fn as_str_name(&self) -> &'static str {
753        match self {
754            Self::Unspecified => "GRANULARITY_UNSPECIFIED",
755            Self::Hourly => "HOURLY",
756            Self::Daily => "DAILY",
757        }
758    }
759    /// Creates an enum from field names used in the ProtoBuf definition.
760    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
761        match value {
762            "GRANULARITY_UNSPECIFIED" => Some(Self::Unspecified),
763            "HOURLY" => Some(Self::Hourly),
764            "DAILY" => Some(Self::Daily),
765            _ => None,
766        }
767    }
768}
769/// A billing account's acceptance of one version of a legal document.
770#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
771pub struct LegalAcceptance {
772    /// The acceptance's resource name.
773    #[prost(string, tag = "1")]
774    pub name: ::prost::alloc::string::String,
775    /// The version accepted,
776    /// `legalDocuments/{legal_document}/versions/{version}`.
777    #[prost(string, tag = "2")]
778    pub legal_document_version: ::prost::alloc::string::String,
779    /// The SHA-256 of the text accepted: the version's `sha256`.
780    #[prost(string, tag = "3")]
781    pub sha256: ::prost::alloc::string::String,
782    /// Who accepted: `user:{id}`, or `service_account:{id}` for a service
783    /// account.
784    #[prost(string, tag = "4")]
785    pub accepter: ::prost::alloc::string::String,
786    /// When the version was accepted.
787    #[prost(message, optional, tag = "5")]
788    pub accept_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
789    /// How the acceptance came about.
790    #[prost(enumeration = "legal_acceptance::Method", tag = "6")]
791    pub method: i32,
792    /// Whether the accepter confirmed acting as a business. Always true.
793    #[prost(bool, tag = "7")]
794    pub acts_as_business: bool,
795    /// The legal entity that accepted, as it was at `accept_time`: the
796    /// organization's name.
797    #[prost(string, tag = "8")]
798    pub organization_display_name: ::prost::alloc::string::String,
799    /// The billing account's address at `accept_time`; unset for an account
800    /// that had none.
801    #[prost(message, optional, tag = "9")]
802    pub billing_address: ::core::option::Option<BillingAddress>,
803    /// The billing account's VAT identification number at `accept_time`;
804    /// empty when it had none.
805    #[prost(string, tag = "10")]
806    pub vat_id: ::prost::alloc::string::String,
807}
808/// Nested message and enum types in `LegalAcceptance`.
809pub mod legal_acceptance {
810    /// How the acceptance came about.
811    #[derive(
812        Clone,
813        Copy,
814        Debug,
815        PartialEq,
816        Eq,
817        Hash,
818        PartialOrd,
819        Ord,
820        ::prost::Enumeration
821    )]
822    #[repr(i32)]
823    pub enum Method {
824        /// Not used.
825        Unspecified = 0,
826        /// When the organization or the billing account was created.
827        Signup = 1,
828        /// A changed version of a document the account had accepted before.
829        Change = 2,
830        /// The first version of a document, by an account that existed before
831        /// the document was published.
832        Migration = 3,
833    }
834    impl Method {
835        /// String value of the enum field names used in the ProtoBuf definition.
836        ///
837        /// The values are not transformed in any way and thus are considered stable
838        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
839        pub fn as_str_name(&self) -> &'static str {
840            match self {
841                Self::Unspecified => "METHOD_UNSPECIFIED",
842                Self::Signup => "SIGNUP",
843                Self::Change => "CHANGE",
844                Self::Migration => "MIGRATION",
845            }
846        }
847        /// Creates an enum from field names used in the ProtoBuf definition.
848        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
849            match value {
850                "METHOD_UNSPECIFIED" => Some(Self::Unspecified),
851                "SIGNUP" => Some(Self::Signup),
852                "CHANGE" => Some(Self::Change),
853                "MIGRATION" => Some(Self::Migration),
854                _ => None,
855            }
856        }
857    }
858}
859/// A legal document version a billing account has yet to accept.
860#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
861pub struct LegalRequirement {
862    /// The version, `legalDocuments/{legal_document}/versions/{version}`.
863    #[prost(string, tag = "1")]
864    pub legal_document_version: ::prost::alloc::string::String,
865    /// The version's title, such as `Terms of Service`.
866    #[prost(string, tag = "2")]
867    pub display_name: ::prost::alloc::string::String,
868    /// The day the version takes effect.
869    #[prost(message, optional, tag = "3")]
870    pub effective_date: ::core::option::Option<::origincloud_core::types::Date>,
871    /// A plain-language summary of what changed.
872    #[prost(string, tag = "4")]
873    pub change_summary: ::prost::alloc::string::String,
874    /// The version's `sha256`, to accept it by.
875    #[prost(string, tag = "5")]
876    pub sha256: ::prost::alloc::string::String,
877    /// In force already: until it is accepted, creating or growing billable
878    /// resources charged to the account is refused.
879    #[prost(bool, tag = "6")]
880    pub blocking: bool,
881}
882/// The request for ListLegalAcceptances.
883#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
884pub struct ListLegalAcceptancesRequest {
885    /// The billing account,
886    /// `organizations/{organization}/billingAccounts/{billing_account}`.
887    #[prost(string, tag = "1")]
888    pub parent: ::prost::alloc::string::String,
889    /// The most acceptances to return; the server clamps it, and 0 means its
890    /// default.
891    #[prost(int32, tag = "2")]
892    pub page_size: i32,
893    /// A previous response's `next_page_token`, for the page after it.
894    #[prost(string, tag = "3")]
895    pub page_token: ::prost::alloc::string::String,
896}
897/// The response for ListLegalAcceptances and AcceptLegalDocuments.
898#[derive(Clone, PartialEq, ::prost::Message)]
899pub struct ListLegalAcceptancesResponse {
900    /// The acceptances on this page; for AcceptLegalDocuments, one per version
901    /// accepted, in the order requested.
902    #[prost(message, repeated, tag = "1")]
903    pub legal_acceptances: ::prost::alloc::vec::Vec<LegalAcceptance>,
904    /// The token for the next page; empty on the last one.
905    #[prost(string, tag = "2")]
906    pub next_page_token: ::prost::alloc::string::String,
907}
908/// The request for GetLegalAcceptance.
909#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
910pub struct GetLegalAcceptanceRequest {
911    /// The acceptance to return.
912    #[prost(string, tag = "1")]
913    pub name: ::prost::alloc::string::String,
914}
915/// The request for AcceptLegalDocuments.
916#[derive(Clone, PartialEq, ::prost::Message)]
917pub struct AcceptLegalDocumentsRequest {
918    /// The billing account that accepts,
919    /// `organizations/{organization}/billingAccounts/{billing_account}`.
920    #[prost(string, tag = "1")]
921    pub name: ::prost::alloc::string::String,
922    /// The versions to accept.
923    #[prost(message, repeated, tag = "2")]
924    pub versions: ::prost::alloc::vec::Vec<LegalDocumentVersionToAccept>,
925    /// That the caller acts as a business (§ 14 BGB) for the billing account's
926    /// legal entity. Must be true.
927    #[prost(bool, tag = "3")]
928    pub acts_as_business: bool,
929}
930/// The request for QueryLegalRequirements.
931#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
932pub struct QueryLegalRequirementsRequest {
933    /// The billing account,
934    /// `organizations/{organization}/billingAccounts/{billing_account}`.
935    #[prost(string, tag = "1")]
936    pub name: ::prost::alloc::string::String,
937}
938/// The response for QueryLegalRequirements.
939#[derive(Clone, PartialEq, ::prost::Message)]
940pub struct QueryLegalRequirementsResponse {
941    /// The versions to accept, by document, then by the day they take effect.
942    #[prost(message, repeated, tag = "1")]
943    pub requirements: ::prost::alloc::vec::Vec<LegalRequirement>,
944}
945/// The price list. Every amount is in EUR, before VAT, which depends on the
946/// customer's country and is added on the invoice.
947#[derive(Clone, PartialEq, ::prost::Message)]
948pub struct PriceList {
949    /// Always `EUR`.
950    #[prost(string, tag = "1")]
951    pub currency: ::prost::alloc::string::String,
952    /// Always true: every amount is net, before VAT.
953    #[prost(bool, tag = "2")]
954    pub amounts_exclude_vat: bool,
955    /// When a list price was last set, changed, took effect or ended: what a
956    /// "prices last updated" line shows. Unset only while nothing is priced.
957    #[prost(message, optional, tag = "3")]
958    pub last_changed: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
959    /// One entry per product family with a price in effect, in the platform's
960    /// catalog order: `compute_instance`, `network_floating_ip`,
961    /// `network_nat_gateway`, `network_vpc_egress`, `network_vpc_ingress`,
962    /// `network_vpc_internal`, `storage_volume`, `storage_snapshot`,
963    /// `observability_custom_metric`, `observability_api_request`,
964    /// `observability_ingested_sample`, `dns_hosted_zone`, `dns_query`.
965    #[prost(message, repeated, tag = "4")]
966    pub families: ::prost::alloc::vec::Vec<PriceFamily>,
967}
968/// One product family's prices.
969#[derive(Clone, PartialEq, ::prost::Message)]
970pub struct PriceFamily {
971    /// The family, such as `compute_instance`.
972    #[prost(string, tag = "1")]
973    pub family: ::prost::alloc::string::String,
974    /// The family's prices in effect, by product key, numbers compared as
975    /// numbers: a class's instance types run from smallest to largest.
976    #[prost(message, repeated, tag = "2")]
977    pub prices: ::prost::alloc::vec::Vec<Price>,
978}
979/// The list price of one product.
980#[derive(Clone, PartialEq, ::prost::Message)]
981pub struct Price {
982    /// The product the price bills, as usage and cost reports name it, such
983    /// as `compute.gp1.core.2`, `storage.gp1` or `network.vpc_egress`.
984    #[prost(string, tag = "1")]
985    pub product_key: ::prost::alloc::string::String,
986    /// The parts of the product key, split out: `instance_type` for an instance,
987    /// `storage_class` for a volume. Empty for a product that has none.
988    #[prost(btree_map = "string, string", tag = "2")]
989    pub dimensions: ::prost::alloc::collections::BTreeMap<
990        ::prost::alloc::string::String,
991        ::prost::alloc::string::String,
992    >,
993    /// What is counted: `seconds`, `gib_hours`, `gb` (decimal, 10^9 bytes),
994    /// `metric_months`, `requests`, `samples` or `queries`.
995    #[prost(string, tag = "3")]
996    pub unit_type: ::prost::alloc::string::String,
997    /// How many of the unit the amount pays for: `3600` seconds is an
998    /// hourly rate, `1000` requests a rate per thousand.
999    #[prost(uint32, tag = "4")]
1000    pub unit_count: u32,
1001    /// The price of that many units, as a decimal string.
1002    #[prost(string, tag = "5")]
1003    pub amount: ::prost::alloc::string::String,
1004    /// When the price took effect.
1005    #[prost(message, optional, tag = "6")]
1006    pub valid_from: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
1007    /// When the price is to end; unset while no end is scheduled.
1008    #[prost(message, optional, tag = "7")]
1009    pub valid_until: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
1010}
1011/// The request for GetPriceList, which takes nothing.
1012#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1013pub struct GetPriceListRequest {}
1014/// A billing account's spend limit: the most it means to spend in a calendar
1015/// month, and when to be told. Each threshold alerts once a month, the first
1016/// time the month's spend crosses it.
1017#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1018pub struct SpendLimit {
1019    /// The spend limit's resource name,
1020    /// `organizations/{organization}/billingAccounts/{billing_account}/spendLimit`.
1021    #[prost(string, tag = "1")]
1022    pub name: ::prost::alloc::string::String,
1023    /// The amount per calendar month in EUR, before VAT, as a decimal string
1024    /// such as `500.00`; more than zero. Unset means no spend limit.
1025    #[prost(string, optional, tag = "2")]
1026    pub limit: ::core::option::Option<::prost::alloc::string::String>,
1027    /// The percentages of `limit` whose crossing emails an alert, such as `80`
1028    /// and `100`; each from 1 to 32767, so a threshold can lie beyond the
1029    /// limit. Empty while there is no `limit`.
1030    #[prost(int32, repeated, packed = "false", tag = "3")]
1031    pub alert_thresholds_percent: ::prost::alloc::vec::Vec<i32>,
1032    /// Where alerts are sent. Empty while there is no `limit`, and an alert
1033    /// with no recipient is sent to nobody.
1034    #[prost(string, repeated, tag = "4")]
1035    pub notification_emails: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1036    /// When the spend limit was last set; unset while there is none.
1037    #[prost(message, optional, tag = "5")]
1038    pub update_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
1039}
1040/// The request for GetSpendLimit.
1041#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1042pub struct GetSpendLimitRequest {
1043    /// The spend limit to return.
1044    #[prost(string, tag = "1")]
1045    pub name: ::prost::alloc::string::String,
1046}
1047/// The request for UpdateSpendLimit.
1048#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1049pub struct UpdateSpendLimitRequest {
1050    /// The spend limit, by its name, with the fields to change.
1051    #[prost(message, optional, tag = "1")]
1052    pub spend_limit: ::core::option::Option<SpendLimit>,
1053    /// The fields to change: `limit`, `alert_thresholds_percent` and
1054    /// `notification_emails`. `*` is every one of them.
1055    #[prost(message, optional, tag = "2")]
1056    pub update_mask: ::core::option::Option<::origincloud_core::protobuf::FieldMask>,
1057}
1058impl serde::Serialize for AcceptLegalDocumentsRequest {
1059    #[allow(deprecated)]
1060    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1061    where
1062        S: serde::Serializer,
1063    {
1064        use serde::ser::SerializeStruct;
1065        let mut len = 0;
1066        if !self.name.is_empty() {
1067            len += 1;
1068        }
1069        if !self.versions.is_empty() {
1070            len += 1;
1071        }
1072        if self.acts_as_business {
1073            len += 1;
1074        }
1075        let mut struct_ser = serializer
1076            .serialize_struct(
1077                "origincloud.billing.v1beta1.AcceptLegalDocumentsRequest",
1078                len,
1079            )?;
1080        if !self.name.is_empty() {
1081            struct_ser.serialize_field("name", &self.name)?;
1082        }
1083        if !self.versions.is_empty() {
1084            struct_ser.serialize_field("versions", &self.versions)?;
1085        }
1086        if self.acts_as_business {
1087            struct_ser.serialize_field("actsAsBusiness", &self.acts_as_business)?;
1088        }
1089        struct_ser.end()
1090    }
1091}
1092impl<'de> serde::Deserialize<'de> for AcceptLegalDocumentsRequest {
1093    #[allow(deprecated)]
1094    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1095    where
1096        D: serde::Deserializer<'de>,
1097    {
1098        const FIELDS: &[&str] = &[
1099            "name",
1100            "versions",
1101            "acts_as_business",
1102            "actsAsBusiness",
1103        ];
1104        #[allow(clippy::enum_variant_names)]
1105        enum GeneratedField {
1106            Name,
1107            Versions,
1108            ActsAsBusiness,
1109            __SkipField__,
1110        }
1111        impl<'de> serde::Deserialize<'de> for GeneratedField {
1112            fn deserialize<D>(
1113                deserializer: D,
1114            ) -> std::result::Result<GeneratedField, D::Error>
1115            where
1116                D: serde::Deserializer<'de>,
1117            {
1118                struct GeneratedVisitor;
1119                impl serde::de::Visitor<'_> for GeneratedVisitor {
1120                    type Value = GeneratedField;
1121                    fn expecting(
1122                        &self,
1123                        formatter: &mut std::fmt::Formatter<'_>,
1124                    ) -> std::fmt::Result {
1125                        write!(formatter, "expected one of: {:?}", & FIELDS)
1126                    }
1127                    #[allow(unused_variables)]
1128                    fn visit_str<E>(
1129                        self,
1130                        value: &str,
1131                    ) -> std::result::Result<GeneratedField, E>
1132                    where
1133                        E: serde::de::Error,
1134                    {
1135                        match value {
1136                            "name" => Ok(GeneratedField::Name),
1137                            "versions" => Ok(GeneratedField::Versions),
1138                            "actsAsBusiness" | "acts_as_business" => {
1139                                Ok(GeneratedField::ActsAsBusiness)
1140                            }
1141                            _ => Ok(GeneratedField::__SkipField__),
1142                        }
1143                    }
1144                }
1145                deserializer.deserialize_identifier(GeneratedVisitor)
1146            }
1147        }
1148        struct GeneratedVisitor;
1149        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1150            type Value = AcceptLegalDocumentsRequest;
1151            fn expecting(
1152                &self,
1153                formatter: &mut std::fmt::Formatter<'_>,
1154            ) -> std::fmt::Result {
1155                formatter
1156                    .write_str(
1157                        "struct origincloud.billing.v1beta1.AcceptLegalDocumentsRequest",
1158                    )
1159            }
1160            fn visit_map<V>(
1161                self,
1162                mut map_: V,
1163            ) -> std::result::Result<AcceptLegalDocumentsRequest, V::Error>
1164            where
1165                V: serde::de::MapAccess<'de>,
1166            {
1167                let mut name__ = None;
1168                let mut versions__ = None;
1169                let mut acts_as_business__ = None;
1170                while let Some(k) = map_.next_key()? {
1171                    match k {
1172                        GeneratedField::Name => {
1173                            if name__.is_some() {
1174                                return Err(serde::de::Error::duplicate_field("name"));
1175                            }
1176                            name__ = Some(map_.next_value()?);
1177                        }
1178                        GeneratedField::Versions => {
1179                            if versions__.is_some() {
1180                                return Err(serde::de::Error::duplicate_field("versions"));
1181                            }
1182                            versions__ = Some(map_.next_value()?);
1183                        }
1184                        GeneratedField::ActsAsBusiness => {
1185                            if acts_as_business__.is_some() {
1186                                return Err(
1187                                    serde::de::Error::duplicate_field("actsAsBusiness"),
1188                                );
1189                            }
1190                            acts_as_business__ = Some(map_.next_value()?);
1191                        }
1192                        GeneratedField::__SkipField__ => {
1193                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1194                        }
1195                    }
1196                }
1197                Ok(AcceptLegalDocumentsRequest {
1198                    name: name__.unwrap_or_default(),
1199                    versions: versions__.unwrap_or_default(),
1200                    acts_as_business: acts_as_business__.unwrap_or_default(),
1201                })
1202            }
1203        }
1204        deserializer
1205            .deserialize_struct(
1206                "origincloud.billing.v1beta1.AcceptLegalDocumentsRequest",
1207                FIELDS,
1208                GeneratedVisitor,
1209            )
1210    }
1211}
1212impl serde::Serialize for BillingAccount {
1213    #[allow(deprecated)]
1214    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1215    where
1216        S: serde::Serializer,
1217    {
1218        use serde::ser::SerializeStruct;
1219        let mut len = 0;
1220        if !self.name.is_empty() {
1221            len += 1;
1222        }
1223        if !self.urn.is_empty() {
1224            len += 1;
1225        }
1226        if !self.display_name.is_empty() {
1227            len += 1;
1228        }
1229        if self.default_account {
1230            len += 1;
1231        }
1232        if self.billing_address.is_some() {
1233            len += 1;
1234        }
1235        if !self.invoice_email.is_empty() {
1236            len += 1;
1237        }
1238        if !self.vat_id.is_empty() {
1239            len += 1;
1240        }
1241        if !self.contact_person.is_empty() {
1242            len += 1;
1243        }
1244        if self.payment_method.is_some() {
1245            len += 1;
1246        }
1247        if self.create_time.is_some() {
1248            len += 1;
1249        }
1250        if !self.creator.is_empty() {
1251            len += 1;
1252        }
1253        let mut struct_ser = serializer
1254            .serialize_struct("origincloud.billing.v1beta1.BillingAccount", len)?;
1255        if !self.name.is_empty() {
1256            struct_ser.serialize_field("name", &self.name)?;
1257        }
1258        if !self.urn.is_empty() {
1259            struct_ser.serialize_field("urn", &self.urn)?;
1260        }
1261        if !self.display_name.is_empty() {
1262            struct_ser.serialize_field("displayName", &self.display_name)?;
1263        }
1264        if self.default_account {
1265            struct_ser.serialize_field("defaultAccount", &self.default_account)?;
1266        }
1267        if let Some(v) = self.billing_address.as_ref() {
1268            struct_ser.serialize_field("billingAddress", v)?;
1269        }
1270        if !self.invoice_email.is_empty() {
1271            struct_ser.serialize_field("invoiceEmail", &self.invoice_email)?;
1272        }
1273        if !self.vat_id.is_empty() {
1274            struct_ser.serialize_field("vatId", &self.vat_id)?;
1275        }
1276        if !self.contact_person.is_empty() {
1277            struct_ser.serialize_field("contactPerson", &self.contact_person)?;
1278        }
1279        if let Some(v) = self.payment_method.as_ref() {
1280            struct_ser.serialize_field("paymentMethod", v)?;
1281        }
1282        if let Some(v) = self.create_time.as_ref() {
1283            struct_ser.serialize_field("createTime", v)?;
1284        }
1285        if !self.creator.is_empty() {
1286            struct_ser.serialize_field("creator", &self.creator)?;
1287        }
1288        struct_ser.end()
1289    }
1290}
1291impl<'de> serde::Deserialize<'de> for BillingAccount {
1292    #[allow(deprecated)]
1293    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1294    where
1295        D: serde::Deserializer<'de>,
1296    {
1297        const FIELDS: &[&str] = &[
1298            "name",
1299            "urn",
1300            "display_name",
1301            "displayName",
1302            "default_account",
1303            "defaultAccount",
1304            "billing_address",
1305            "billingAddress",
1306            "invoice_email",
1307            "invoiceEmail",
1308            "vat_id",
1309            "vatId",
1310            "contact_person",
1311            "contactPerson",
1312            "payment_method",
1313            "paymentMethod",
1314            "create_time",
1315            "createTime",
1316            "creator",
1317        ];
1318        #[allow(clippy::enum_variant_names)]
1319        enum GeneratedField {
1320            Name,
1321            Urn,
1322            DisplayName,
1323            DefaultAccount,
1324            BillingAddress,
1325            InvoiceEmail,
1326            VatId,
1327            ContactPerson,
1328            PaymentMethod,
1329            CreateTime,
1330            Creator,
1331            __SkipField__,
1332        }
1333        impl<'de> serde::Deserialize<'de> for GeneratedField {
1334            fn deserialize<D>(
1335                deserializer: D,
1336            ) -> std::result::Result<GeneratedField, D::Error>
1337            where
1338                D: serde::Deserializer<'de>,
1339            {
1340                struct GeneratedVisitor;
1341                impl serde::de::Visitor<'_> for GeneratedVisitor {
1342                    type Value = GeneratedField;
1343                    fn expecting(
1344                        &self,
1345                        formatter: &mut std::fmt::Formatter<'_>,
1346                    ) -> std::fmt::Result {
1347                        write!(formatter, "expected one of: {:?}", & FIELDS)
1348                    }
1349                    #[allow(unused_variables)]
1350                    fn visit_str<E>(
1351                        self,
1352                        value: &str,
1353                    ) -> std::result::Result<GeneratedField, E>
1354                    where
1355                        E: serde::de::Error,
1356                    {
1357                        match value {
1358                            "name" => Ok(GeneratedField::Name),
1359                            "urn" => Ok(GeneratedField::Urn),
1360                            "displayName" | "display_name" => {
1361                                Ok(GeneratedField::DisplayName)
1362                            }
1363                            "defaultAccount" | "default_account" => {
1364                                Ok(GeneratedField::DefaultAccount)
1365                            }
1366                            "billingAddress" | "billing_address" => {
1367                                Ok(GeneratedField::BillingAddress)
1368                            }
1369                            "invoiceEmail" | "invoice_email" => {
1370                                Ok(GeneratedField::InvoiceEmail)
1371                            }
1372                            "vatId" | "vat_id" => Ok(GeneratedField::VatId),
1373                            "contactPerson" | "contact_person" => {
1374                                Ok(GeneratedField::ContactPerson)
1375                            }
1376                            "paymentMethod" | "payment_method" => {
1377                                Ok(GeneratedField::PaymentMethod)
1378                            }
1379                            "createTime" | "create_time" => {
1380                                Ok(GeneratedField::CreateTime)
1381                            }
1382                            "creator" => Ok(GeneratedField::Creator),
1383                            _ => Ok(GeneratedField::__SkipField__),
1384                        }
1385                    }
1386                }
1387                deserializer.deserialize_identifier(GeneratedVisitor)
1388            }
1389        }
1390        struct GeneratedVisitor;
1391        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1392            type Value = BillingAccount;
1393            fn expecting(
1394                &self,
1395                formatter: &mut std::fmt::Formatter<'_>,
1396            ) -> std::fmt::Result {
1397                formatter.write_str("struct origincloud.billing.v1beta1.BillingAccount")
1398            }
1399            fn visit_map<V>(
1400                self,
1401                mut map_: V,
1402            ) -> std::result::Result<BillingAccount, V::Error>
1403            where
1404                V: serde::de::MapAccess<'de>,
1405            {
1406                let mut name__ = None;
1407                let mut urn__ = None;
1408                let mut display_name__ = None;
1409                let mut default_account__ = None;
1410                let mut billing_address__ = None;
1411                let mut invoice_email__ = None;
1412                let mut vat_id__ = None;
1413                let mut contact_person__ = None;
1414                let mut payment_method__ = None;
1415                let mut create_time__ = None;
1416                let mut creator__ = None;
1417                while let Some(k) = map_.next_key()? {
1418                    match k {
1419                        GeneratedField::Name => {
1420                            if name__.is_some() {
1421                                return Err(serde::de::Error::duplicate_field("name"));
1422                            }
1423                            name__ = Some(map_.next_value()?);
1424                        }
1425                        GeneratedField::Urn => {
1426                            if urn__.is_some() {
1427                                return Err(serde::de::Error::duplicate_field("urn"));
1428                            }
1429                            urn__ = Some(map_.next_value()?);
1430                        }
1431                        GeneratedField::DisplayName => {
1432                            if display_name__.is_some() {
1433                                return Err(
1434                                    serde::de::Error::duplicate_field("displayName"),
1435                                );
1436                            }
1437                            display_name__ = Some(map_.next_value()?);
1438                        }
1439                        GeneratedField::DefaultAccount => {
1440                            if default_account__.is_some() {
1441                                return Err(
1442                                    serde::de::Error::duplicate_field("defaultAccount"),
1443                                );
1444                            }
1445                            default_account__ = Some(map_.next_value()?);
1446                        }
1447                        GeneratedField::BillingAddress => {
1448                            if billing_address__.is_some() {
1449                                return Err(
1450                                    serde::de::Error::duplicate_field("billingAddress"),
1451                                );
1452                            }
1453                            billing_address__ = map_.next_value()?;
1454                        }
1455                        GeneratedField::InvoiceEmail => {
1456                            if invoice_email__.is_some() {
1457                                return Err(
1458                                    serde::de::Error::duplicate_field("invoiceEmail"),
1459                                );
1460                            }
1461                            invoice_email__ = Some(map_.next_value()?);
1462                        }
1463                        GeneratedField::VatId => {
1464                            if vat_id__.is_some() {
1465                                return Err(serde::de::Error::duplicate_field("vatId"));
1466                            }
1467                            vat_id__ = Some(map_.next_value()?);
1468                        }
1469                        GeneratedField::ContactPerson => {
1470                            if contact_person__.is_some() {
1471                                return Err(
1472                                    serde::de::Error::duplicate_field("contactPerson"),
1473                                );
1474                            }
1475                            contact_person__ = Some(map_.next_value()?);
1476                        }
1477                        GeneratedField::PaymentMethod => {
1478                            if payment_method__.is_some() {
1479                                return Err(
1480                                    serde::de::Error::duplicate_field("paymentMethod"),
1481                                );
1482                            }
1483                            payment_method__ = map_.next_value()?;
1484                        }
1485                        GeneratedField::CreateTime => {
1486                            if create_time__.is_some() {
1487                                return Err(serde::de::Error::duplicate_field("createTime"));
1488                            }
1489                            create_time__ = map_.next_value()?;
1490                        }
1491                        GeneratedField::Creator => {
1492                            if creator__.is_some() {
1493                                return Err(serde::de::Error::duplicate_field("creator"));
1494                            }
1495                            creator__ = Some(map_.next_value()?);
1496                        }
1497                        GeneratedField::__SkipField__ => {
1498                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1499                        }
1500                    }
1501                }
1502                Ok(BillingAccount {
1503                    name: name__.unwrap_or_default(),
1504                    urn: urn__.unwrap_or_default(),
1505                    display_name: display_name__.unwrap_or_default(),
1506                    default_account: default_account__.unwrap_or_default(),
1507                    billing_address: billing_address__,
1508                    invoice_email: invoice_email__.unwrap_or_default(),
1509                    vat_id: vat_id__.unwrap_or_default(),
1510                    contact_person: contact_person__.unwrap_or_default(),
1511                    payment_method: payment_method__,
1512                    create_time: create_time__,
1513                    creator: creator__.unwrap_or_default(),
1514                })
1515            }
1516        }
1517        deserializer
1518            .deserialize_struct(
1519                "origincloud.billing.v1beta1.BillingAccount",
1520                FIELDS,
1521                GeneratedVisitor,
1522            )
1523    }
1524}
1525impl serde::Serialize for BillingAddress {
1526    #[allow(deprecated)]
1527    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1528    where
1529        S: serde::Serializer,
1530    {
1531        use serde::ser::SerializeStruct;
1532        let mut len = 0;
1533        if !self.street.is_empty() {
1534            len += 1;
1535        }
1536        if !self.city.is_empty() {
1537            len += 1;
1538        }
1539        if !self.postal_code.is_empty() {
1540            len += 1;
1541        }
1542        if !self.region_code.is_empty() {
1543            len += 1;
1544        }
1545        let mut struct_ser = serializer
1546            .serialize_struct("origincloud.billing.v1beta1.BillingAddress", len)?;
1547        if !self.street.is_empty() {
1548            struct_ser.serialize_field("street", &self.street)?;
1549        }
1550        if !self.city.is_empty() {
1551            struct_ser.serialize_field("city", &self.city)?;
1552        }
1553        if !self.postal_code.is_empty() {
1554            struct_ser.serialize_field("postalCode", &self.postal_code)?;
1555        }
1556        if !self.region_code.is_empty() {
1557            struct_ser.serialize_field("regionCode", &self.region_code)?;
1558        }
1559        struct_ser.end()
1560    }
1561}
1562impl<'de> serde::Deserialize<'de> for BillingAddress {
1563    #[allow(deprecated)]
1564    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1565    where
1566        D: serde::Deserializer<'de>,
1567    {
1568        const FIELDS: &[&str] = &[
1569            "street",
1570            "city",
1571            "postal_code",
1572            "postalCode",
1573            "region_code",
1574            "regionCode",
1575        ];
1576        #[allow(clippy::enum_variant_names)]
1577        enum GeneratedField {
1578            Street,
1579            City,
1580            PostalCode,
1581            RegionCode,
1582            __SkipField__,
1583        }
1584        impl<'de> serde::Deserialize<'de> for GeneratedField {
1585            fn deserialize<D>(
1586                deserializer: D,
1587            ) -> std::result::Result<GeneratedField, D::Error>
1588            where
1589                D: serde::Deserializer<'de>,
1590            {
1591                struct GeneratedVisitor;
1592                impl serde::de::Visitor<'_> for GeneratedVisitor {
1593                    type Value = GeneratedField;
1594                    fn expecting(
1595                        &self,
1596                        formatter: &mut std::fmt::Formatter<'_>,
1597                    ) -> std::fmt::Result {
1598                        write!(formatter, "expected one of: {:?}", & FIELDS)
1599                    }
1600                    #[allow(unused_variables)]
1601                    fn visit_str<E>(
1602                        self,
1603                        value: &str,
1604                    ) -> std::result::Result<GeneratedField, E>
1605                    where
1606                        E: serde::de::Error,
1607                    {
1608                        match value {
1609                            "street" => Ok(GeneratedField::Street),
1610                            "city" => Ok(GeneratedField::City),
1611                            "postalCode" | "postal_code" => {
1612                                Ok(GeneratedField::PostalCode)
1613                            }
1614                            "regionCode" | "region_code" => {
1615                                Ok(GeneratedField::RegionCode)
1616                            }
1617                            _ => Ok(GeneratedField::__SkipField__),
1618                        }
1619                    }
1620                }
1621                deserializer.deserialize_identifier(GeneratedVisitor)
1622            }
1623        }
1624        struct GeneratedVisitor;
1625        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1626            type Value = BillingAddress;
1627            fn expecting(
1628                &self,
1629                formatter: &mut std::fmt::Formatter<'_>,
1630            ) -> std::fmt::Result {
1631                formatter.write_str("struct origincloud.billing.v1beta1.BillingAddress")
1632            }
1633            fn visit_map<V>(
1634                self,
1635                mut map_: V,
1636            ) -> std::result::Result<BillingAddress, V::Error>
1637            where
1638                V: serde::de::MapAccess<'de>,
1639            {
1640                let mut street__ = None;
1641                let mut city__ = None;
1642                let mut postal_code__ = None;
1643                let mut region_code__ = None;
1644                while let Some(k) = map_.next_key()? {
1645                    match k {
1646                        GeneratedField::Street => {
1647                            if street__.is_some() {
1648                                return Err(serde::de::Error::duplicate_field("street"));
1649                            }
1650                            street__ = Some(map_.next_value()?);
1651                        }
1652                        GeneratedField::City => {
1653                            if city__.is_some() {
1654                                return Err(serde::de::Error::duplicate_field("city"));
1655                            }
1656                            city__ = Some(map_.next_value()?);
1657                        }
1658                        GeneratedField::PostalCode => {
1659                            if postal_code__.is_some() {
1660                                return Err(serde::de::Error::duplicate_field("postalCode"));
1661                            }
1662                            postal_code__ = Some(map_.next_value()?);
1663                        }
1664                        GeneratedField::RegionCode => {
1665                            if region_code__.is_some() {
1666                                return Err(serde::de::Error::duplicate_field("regionCode"));
1667                            }
1668                            region_code__ = Some(map_.next_value()?);
1669                        }
1670                        GeneratedField::__SkipField__ => {
1671                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1672                        }
1673                    }
1674                }
1675                Ok(BillingAddress {
1676                    street: street__.unwrap_or_default(),
1677                    city: city__.unwrap_or_default(),
1678                    postal_code: postal_code__.unwrap_or_default(),
1679                    region_code: region_code__.unwrap_or_default(),
1680                })
1681            }
1682        }
1683        deserializer
1684            .deserialize_struct(
1685                "origincloud.billing.v1beta1.BillingAddress",
1686                FIELDS,
1687                GeneratedVisitor,
1688            )
1689    }
1690}
1691impl serde::Serialize for BillingCountry {
1692    #[allow(deprecated)]
1693    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1694    where
1695        S: serde::Serializer,
1696    {
1697        use serde::ser::SerializeStruct;
1698        let mut len = 0;
1699        if !self.name.is_empty() {
1700            len += 1;
1701        }
1702        if !self.region_code.is_empty() {
1703            len += 1;
1704        }
1705        if !self.display_name.is_empty() {
1706            len += 1;
1707        }
1708        if self.vat_id_required {
1709            len += 1;
1710        }
1711        let mut struct_ser = serializer
1712            .serialize_struct("origincloud.billing.v1beta1.BillingCountry", len)?;
1713        if !self.name.is_empty() {
1714            struct_ser.serialize_field("name", &self.name)?;
1715        }
1716        if !self.region_code.is_empty() {
1717            struct_ser.serialize_field("regionCode", &self.region_code)?;
1718        }
1719        if !self.display_name.is_empty() {
1720            struct_ser.serialize_field("displayName", &self.display_name)?;
1721        }
1722        if self.vat_id_required {
1723            struct_ser.serialize_field("vatIdRequired", &self.vat_id_required)?;
1724        }
1725        struct_ser.end()
1726    }
1727}
1728impl<'de> serde::Deserialize<'de> for BillingCountry {
1729    #[allow(deprecated)]
1730    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1731    where
1732        D: serde::Deserializer<'de>,
1733    {
1734        const FIELDS: &[&str] = &[
1735            "name",
1736            "region_code",
1737            "regionCode",
1738            "display_name",
1739            "displayName",
1740            "vat_id_required",
1741            "vatIdRequired",
1742        ];
1743        #[allow(clippy::enum_variant_names)]
1744        enum GeneratedField {
1745            Name,
1746            RegionCode,
1747            DisplayName,
1748            VatIdRequired,
1749            __SkipField__,
1750        }
1751        impl<'de> serde::Deserialize<'de> for GeneratedField {
1752            fn deserialize<D>(
1753                deserializer: D,
1754            ) -> std::result::Result<GeneratedField, D::Error>
1755            where
1756                D: serde::Deserializer<'de>,
1757            {
1758                struct GeneratedVisitor;
1759                impl serde::de::Visitor<'_> for GeneratedVisitor {
1760                    type Value = GeneratedField;
1761                    fn expecting(
1762                        &self,
1763                        formatter: &mut std::fmt::Formatter<'_>,
1764                    ) -> std::fmt::Result {
1765                        write!(formatter, "expected one of: {:?}", & FIELDS)
1766                    }
1767                    #[allow(unused_variables)]
1768                    fn visit_str<E>(
1769                        self,
1770                        value: &str,
1771                    ) -> std::result::Result<GeneratedField, E>
1772                    where
1773                        E: serde::de::Error,
1774                    {
1775                        match value {
1776                            "name" => Ok(GeneratedField::Name),
1777                            "regionCode" | "region_code" => {
1778                                Ok(GeneratedField::RegionCode)
1779                            }
1780                            "displayName" | "display_name" => {
1781                                Ok(GeneratedField::DisplayName)
1782                            }
1783                            "vatIdRequired" | "vat_id_required" => {
1784                                Ok(GeneratedField::VatIdRequired)
1785                            }
1786                            _ => Ok(GeneratedField::__SkipField__),
1787                        }
1788                    }
1789                }
1790                deserializer.deserialize_identifier(GeneratedVisitor)
1791            }
1792        }
1793        struct GeneratedVisitor;
1794        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1795            type Value = BillingCountry;
1796            fn expecting(
1797                &self,
1798                formatter: &mut std::fmt::Formatter<'_>,
1799            ) -> std::fmt::Result {
1800                formatter.write_str("struct origincloud.billing.v1beta1.BillingCountry")
1801            }
1802            fn visit_map<V>(
1803                self,
1804                mut map_: V,
1805            ) -> std::result::Result<BillingCountry, V::Error>
1806            where
1807                V: serde::de::MapAccess<'de>,
1808            {
1809                let mut name__ = None;
1810                let mut region_code__ = None;
1811                let mut display_name__ = None;
1812                let mut vat_id_required__ = None;
1813                while let Some(k) = map_.next_key()? {
1814                    match k {
1815                        GeneratedField::Name => {
1816                            if name__.is_some() {
1817                                return Err(serde::de::Error::duplicate_field("name"));
1818                            }
1819                            name__ = Some(map_.next_value()?);
1820                        }
1821                        GeneratedField::RegionCode => {
1822                            if region_code__.is_some() {
1823                                return Err(serde::de::Error::duplicate_field("regionCode"));
1824                            }
1825                            region_code__ = Some(map_.next_value()?);
1826                        }
1827                        GeneratedField::DisplayName => {
1828                            if display_name__.is_some() {
1829                                return Err(
1830                                    serde::de::Error::duplicate_field("displayName"),
1831                                );
1832                            }
1833                            display_name__ = Some(map_.next_value()?);
1834                        }
1835                        GeneratedField::VatIdRequired => {
1836                            if vat_id_required__.is_some() {
1837                                return Err(
1838                                    serde::de::Error::duplicate_field("vatIdRequired"),
1839                                );
1840                            }
1841                            vat_id_required__ = Some(map_.next_value()?);
1842                        }
1843                        GeneratedField::__SkipField__ => {
1844                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1845                        }
1846                    }
1847                }
1848                Ok(BillingCountry {
1849                    name: name__.unwrap_or_default(),
1850                    region_code: region_code__.unwrap_or_default(),
1851                    display_name: display_name__.unwrap_or_default(),
1852                    vat_id_required: vat_id_required__.unwrap_or_default(),
1853                })
1854            }
1855        }
1856        deserializer
1857            .deserialize_struct(
1858                "origincloud.billing.v1beta1.BillingCountry",
1859                FIELDS,
1860                GeneratedVisitor,
1861            )
1862    }
1863}
1864impl serde::Serialize for ConfirmPaymentMethodSetupRequest {
1865    #[allow(deprecated)]
1866    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1867    where
1868        S: serde::Serializer,
1869    {
1870        use serde::ser::SerializeStruct;
1871        let mut len = 0;
1872        if !self.name.is_empty() {
1873            len += 1;
1874        }
1875        let mut struct_ser = serializer
1876            .serialize_struct(
1877                "origincloud.billing.v1beta1.ConfirmPaymentMethodSetupRequest",
1878                len,
1879            )?;
1880        if !self.name.is_empty() {
1881            struct_ser.serialize_field("name", &self.name)?;
1882        }
1883        struct_ser.end()
1884    }
1885}
1886impl<'de> serde::Deserialize<'de> for ConfirmPaymentMethodSetupRequest {
1887    #[allow(deprecated)]
1888    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1889    where
1890        D: serde::Deserializer<'de>,
1891    {
1892        const FIELDS: &[&str] = &["name"];
1893        #[allow(clippy::enum_variant_names)]
1894        enum GeneratedField {
1895            Name,
1896            __SkipField__,
1897        }
1898        impl<'de> serde::Deserialize<'de> for GeneratedField {
1899            fn deserialize<D>(
1900                deserializer: D,
1901            ) -> std::result::Result<GeneratedField, D::Error>
1902            where
1903                D: serde::Deserializer<'de>,
1904            {
1905                struct GeneratedVisitor;
1906                impl serde::de::Visitor<'_> for GeneratedVisitor {
1907                    type Value = GeneratedField;
1908                    fn expecting(
1909                        &self,
1910                        formatter: &mut std::fmt::Formatter<'_>,
1911                    ) -> std::fmt::Result {
1912                        write!(formatter, "expected one of: {:?}", & FIELDS)
1913                    }
1914                    #[allow(unused_variables)]
1915                    fn visit_str<E>(
1916                        self,
1917                        value: &str,
1918                    ) -> std::result::Result<GeneratedField, E>
1919                    where
1920                        E: serde::de::Error,
1921                    {
1922                        match value {
1923                            "name" => Ok(GeneratedField::Name),
1924                            _ => Ok(GeneratedField::__SkipField__),
1925                        }
1926                    }
1927                }
1928                deserializer.deserialize_identifier(GeneratedVisitor)
1929            }
1930        }
1931        struct GeneratedVisitor;
1932        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1933            type Value = ConfirmPaymentMethodSetupRequest;
1934            fn expecting(
1935                &self,
1936                formatter: &mut std::fmt::Formatter<'_>,
1937            ) -> std::fmt::Result {
1938                formatter
1939                    .write_str(
1940                        "struct origincloud.billing.v1beta1.ConfirmPaymentMethodSetupRequest",
1941                    )
1942            }
1943            fn visit_map<V>(
1944                self,
1945                mut map_: V,
1946            ) -> std::result::Result<ConfirmPaymentMethodSetupRequest, V::Error>
1947            where
1948                V: serde::de::MapAccess<'de>,
1949            {
1950                let mut name__ = None;
1951                while let Some(k) = map_.next_key()? {
1952                    match k {
1953                        GeneratedField::Name => {
1954                            if name__.is_some() {
1955                                return Err(serde::de::Error::duplicate_field("name"));
1956                            }
1957                            name__ = Some(map_.next_value()?);
1958                        }
1959                        GeneratedField::__SkipField__ => {
1960                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1961                        }
1962                    }
1963                }
1964                Ok(ConfirmPaymentMethodSetupRequest {
1965                    name: name__.unwrap_or_default(),
1966                })
1967            }
1968        }
1969        deserializer
1970            .deserialize_struct(
1971                "origincloud.billing.v1beta1.ConfirmPaymentMethodSetupRequest",
1972                FIELDS,
1973                GeneratedVisitor,
1974            )
1975    }
1976}
1977impl serde::Serialize for CostBucket {
1978    #[allow(deprecated)]
1979    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1980    where
1981        S: serde::Serializer,
1982    {
1983        use serde::ser::SerializeStruct;
1984        let mut len = 0;
1985        if self.start_time.is_some() {
1986            len += 1;
1987        }
1988        if !self.amount.is_empty() {
1989            len += 1;
1990        }
1991        let mut struct_ser = serializer
1992            .serialize_struct("origincloud.billing.v1beta1.CostBucket", len)?;
1993        if let Some(v) = self.start_time.as_ref() {
1994            struct_ser.serialize_field("startTime", v)?;
1995        }
1996        if !self.amount.is_empty() {
1997            struct_ser.serialize_field("amount", &self.amount)?;
1998        }
1999        struct_ser.end()
2000    }
2001}
2002impl<'de> serde::Deserialize<'de> for CostBucket {
2003    #[allow(deprecated)]
2004    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2005    where
2006        D: serde::Deserializer<'de>,
2007    {
2008        const FIELDS: &[&str] = &["start_time", "startTime", "amount"];
2009        #[allow(clippy::enum_variant_names)]
2010        enum GeneratedField {
2011            StartTime,
2012            Amount,
2013            __SkipField__,
2014        }
2015        impl<'de> serde::Deserialize<'de> for GeneratedField {
2016            fn deserialize<D>(
2017                deserializer: D,
2018            ) -> std::result::Result<GeneratedField, D::Error>
2019            where
2020                D: serde::Deserializer<'de>,
2021            {
2022                struct GeneratedVisitor;
2023                impl serde::de::Visitor<'_> for GeneratedVisitor {
2024                    type Value = GeneratedField;
2025                    fn expecting(
2026                        &self,
2027                        formatter: &mut std::fmt::Formatter<'_>,
2028                    ) -> std::fmt::Result {
2029                        write!(formatter, "expected one of: {:?}", & FIELDS)
2030                    }
2031                    #[allow(unused_variables)]
2032                    fn visit_str<E>(
2033                        self,
2034                        value: &str,
2035                    ) -> std::result::Result<GeneratedField, E>
2036                    where
2037                        E: serde::de::Error,
2038                    {
2039                        match value {
2040                            "startTime" | "start_time" => Ok(GeneratedField::StartTime),
2041                            "amount" => Ok(GeneratedField::Amount),
2042                            _ => Ok(GeneratedField::__SkipField__),
2043                        }
2044                    }
2045                }
2046                deserializer.deserialize_identifier(GeneratedVisitor)
2047            }
2048        }
2049        struct GeneratedVisitor;
2050        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2051            type Value = CostBucket;
2052            fn expecting(
2053                &self,
2054                formatter: &mut std::fmt::Formatter<'_>,
2055            ) -> std::fmt::Result {
2056                formatter.write_str("struct origincloud.billing.v1beta1.CostBucket")
2057            }
2058            fn visit_map<V>(
2059                self,
2060                mut map_: V,
2061            ) -> std::result::Result<CostBucket, V::Error>
2062            where
2063                V: serde::de::MapAccess<'de>,
2064            {
2065                let mut start_time__ = None;
2066                let mut amount__ = None;
2067                while let Some(k) = map_.next_key()? {
2068                    match k {
2069                        GeneratedField::StartTime => {
2070                            if start_time__.is_some() {
2071                                return Err(serde::de::Error::duplicate_field("startTime"));
2072                            }
2073                            start_time__ = map_.next_value()?;
2074                        }
2075                        GeneratedField::Amount => {
2076                            if amount__.is_some() {
2077                                return Err(serde::de::Error::duplicate_field("amount"));
2078                            }
2079                            amount__ = Some(map_.next_value()?);
2080                        }
2081                        GeneratedField::__SkipField__ => {
2082                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2083                        }
2084                    }
2085                }
2086                Ok(CostBucket {
2087                    start_time: start_time__,
2088                    amount: amount__.unwrap_or_default(),
2089                })
2090            }
2091        }
2092        deserializer
2093            .deserialize_struct(
2094                "origincloud.billing.v1beta1.CostBucket",
2095                FIELDS,
2096                GeneratedVisitor,
2097            )
2098    }
2099}
2100impl serde::Serialize for CostReport {
2101    #[allow(deprecated)]
2102    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2103    where
2104        S: serde::Serializer,
2105    {
2106        use serde::ser::SerializeStruct;
2107        let mut len = 0;
2108        if !self.total.is_empty() {
2109            len += 1;
2110        }
2111        if !self.services.is_empty() {
2112            len += 1;
2113        }
2114        let mut struct_ser = serializer
2115            .serialize_struct("origincloud.billing.v1beta1.CostReport", len)?;
2116        if !self.total.is_empty() {
2117            struct_ser.serialize_field("total", &self.total)?;
2118        }
2119        if !self.services.is_empty() {
2120            struct_ser.serialize_field("services", &self.services)?;
2121        }
2122        struct_ser.end()
2123    }
2124}
2125impl<'de> serde::Deserialize<'de> for CostReport {
2126    #[allow(deprecated)]
2127    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2128    where
2129        D: serde::Deserializer<'de>,
2130    {
2131        const FIELDS: &[&str] = &["total", "services"];
2132        #[allow(clippy::enum_variant_names)]
2133        enum GeneratedField {
2134            Total,
2135            Services,
2136            __SkipField__,
2137        }
2138        impl<'de> serde::Deserialize<'de> for GeneratedField {
2139            fn deserialize<D>(
2140                deserializer: D,
2141            ) -> std::result::Result<GeneratedField, D::Error>
2142            where
2143                D: serde::Deserializer<'de>,
2144            {
2145                struct GeneratedVisitor;
2146                impl serde::de::Visitor<'_> for GeneratedVisitor {
2147                    type Value = GeneratedField;
2148                    fn expecting(
2149                        &self,
2150                        formatter: &mut std::fmt::Formatter<'_>,
2151                    ) -> std::fmt::Result {
2152                        write!(formatter, "expected one of: {:?}", & FIELDS)
2153                    }
2154                    #[allow(unused_variables)]
2155                    fn visit_str<E>(
2156                        self,
2157                        value: &str,
2158                    ) -> std::result::Result<GeneratedField, E>
2159                    where
2160                        E: serde::de::Error,
2161                    {
2162                        match value {
2163                            "total" => Ok(GeneratedField::Total),
2164                            "services" => Ok(GeneratedField::Services),
2165                            _ => Ok(GeneratedField::__SkipField__),
2166                        }
2167                    }
2168                }
2169                deserializer.deserialize_identifier(GeneratedVisitor)
2170            }
2171        }
2172        struct GeneratedVisitor;
2173        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2174            type Value = CostReport;
2175            fn expecting(
2176                &self,
2177                formatter: &mut std::fmt::Formatter<'_>,
2178            ) -> std::fmt::Result {
2179                formatter.write_str("struct origincloud.billing.v1beta1.CostReport")
2180            }
2181            fn visit_map<V>(
2182                self,
2183                mut map_: V,
2184            ) -> std::result::Result<CostReport, V::Error>
2185            where
2186                V: serde::de::MapAccess<'de>,
2187            {
2188                let mut total__ = None;
2189                let mut services__ = None;
2190                while let Some(k) = map_.next_key()? {
2191                    match k {
2192                        GeneratedField::Total => {
2193                            if total__.is_some() {
2194                                return Err(serde::de::Error::duplicate_field("total"));
2195                            }
2196                            total__ = Some(map_.next_value()?);
2197                        }
2198                        GeneratedField::Services => {
2199                            if services__.is_some() {
2200                                return Err(serde::de::Error::duplicate_field("services"));
2201                            }
2202                            services__ = Some(map_.next_value()?);
2203                        }
2204                        GeneratedField::__SkipField__ => {
2205                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2206                        }
2207                    }
2208                }
2209                Ok(CostReport {
2210                    total: total__.unwrap_or_default(),
2211                    services: services__.unwrap_or_default(),
2212                })
2213            }
2214        }
2215        deserializer
2216            .deserialize_struct(
2217                "origincloud.billing.v1beta1.CostReport",
2218                FIELDS,
2219                GeneratedVisitor,
2220            )
2221    }
2222}
2223impl serde::Serialize for CreateBillingAccountRequest {
2224    #[allow(deprecated)]
2225    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2226    where
2227        S: serde::Serializer,
2228    {
2229        use serde::ser::SerializeStruct;
2230        let mut len = 0;
2231        if !self.parent.is_empty() {
2232            len += 1;
2233        }
2234        if self.billing_account.is_some() {
2235            len += 1;
2236        }
2237        if !self.request_id.is_empty() {
2238            len += 1;
2239        }
2240        if !self.accepted_legal_documents.is_empty() {
2241            len += 1;
2242        }
2243        if self.acts_as_business {
2244            len += 1;
2245        }
2246        let mut struct_ser = serializer
2247            .serialize_struct(
2248                "origincloud.billing.v1beta1.CreateBillingAccountRequest",
2249                len,
2250            )?;
2251        if !self.parent.is_empty() {
2252            struct_ser.serialize_field("parent", &self.parent)?;
2253        }
2254        if let Some(v) = self.billing_account.as_ref() {
2255            struct_ser.serialize_field("billingAccount", v)?;
2256        }
2257        if !self.request_id.is_empty() {
2258            struct_ser.serialize_field("requestId", &self.request_id)?;
2259        }
2260        if !self.accepted_legal_documents.is_empty() {
2261            struct_ser
2262                .serialize_field(
2263                    "acceptedLegalDocuments",
2264                    &self.accepted_legal_documents,
2265                )?;
2266        }
2267        if self.acts_as_business {
2268            struct_ser.serialize_field("actsAsBusiness", &self.acts_as_business)?;
2269        }
2270        struct_ser.end()
2271    }
2272}
2273impl<'de> serde::Deserialize<'de> for CreateBillingAccountRequest {
2274    #[allow(deprecated)]
2275    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2276    where
2277        D: serde::Deserializer<'de>,
2278    {
2279        const FIELDS: &[&str] = &[
2280            "parent",
2281            "billing_account",
2282            "billingAccount",
2283            "request_id",
2284            "requestId",
2285            "accepted_legal_documents",
2286            "acceptedLegalDocuments",
2287            "acts_as_business",
2288            "actsAsBusiness",
2289        ];
2290        #[allow(clippy::enum_variant_names)]
2291        enum GeneratedField {
2292            Parent,
2293            BillingAccount,
2294            RequestId,
2295            AcceptedLegalDocuments,
2296            ActsAsBusiness,
2297            __SkipField__,
2298        }
2299        impl<'de> serde::Deserialize<'de> for GeneratedField {
2300            fn deserialize<D>(
2301                deserializer: D,
2302            ) -> std::result::Result<GeneratedField, D::Error>
2303            where
2304                D: serde::Deserializer<'de>,
2305            {
2306                struct GeneratedVisitor;
2307                impl serde::de::Visitor<'_> for GeneratedVisitor {
2308                    type Value = GeneratedField;
2309                    fn expecting(
2310                        &self,
2311                        formatter: &mut std::fmt::Formatter<'_>,
2312                    ) -> std::fmt::Result {
2313                        write!(formatter, "expected one of: {:?}", & FIELDS)
2314                    }
2315                    #[allow(unused_variables)]
2316                    fn visit_str<E>(
2317                        self,
2318                        value: &str,
2319                    ) -> std::result::Result<GeneratedField, E>
2320                    where
2321                        E: serde::de::Error,
2322                    {
2323                        match value {
2324                            "parent" => Ok(GeneratedField::Parent),
2325                            "billingAccount" | "billing_account" => {
2326                                Ok(GeneratedField::BillingAccount)
2327                            }
2328                            "requestId" | "request_id" => Ok(GeneratedField::RequestId),
2329                            "acceptedLegalDocuments" | "accepted_legal_documents" => {
2330                                Ok(GeneratedField::AcceptedLegalDocuments)
2331                            }
2332                            "actsAsBusiness" | "acts_as_business" => {
2333                                Ok(GeneratedField::ActsAsBusiness)
2334                            }
2335                            _ => Ok(GeneratedField::__SkipField__),
2336                        }
2337                    }
2338                }
2339                deserializer.deserialize_identifier(GeneratedVisitor)
2340            }
2341        }
2342        struct GeneratedVisitor;
2343        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2344            type Value = CreateBillingAccountRequest;
2345            fn expecting(
2346                &self,
2347                formatter: &mut std::fmt::Formatter<'_>,
2348            ) -> std::fmt::Result {
2349                formatter
2350                    .write_str(
2351                        "struct origincloud.billing.v1beta1.CreateBillingAccountRequest",
2352                    )
2353            }
2354            fn visit_map<V>(
2355                self,
2356                mut map_: V,
2357            ) -> std::result::Result<CreateBillingAccountRequest, V::Error>
2358            where
2359                V: serde::de::MapAccess<'de>,
2360            {
2361                let mut parent__ = None;
2362                let mut billing_account__ = None;
2363                let mut request_id__ = None;
2364                let mut accepted_legal_documents__ = None;
2365                let mut acts_as_business__ = None;
2366                while let Some(k) = map_.next_key()? {
2367                    match k {
2368                        GeneratedField::Parent => {
2369                            if parent__.is_some() {
2370                                return Err(serde::de::Error::duplicate_field("parent"));
2371                            }
2372                            parent__ = Some(map_.next_value()?);
2373                        }
2374                        GeneratedField::BillingAccount => {
2375                            if billing_account__.is_some() {
2376                                return Err(
2377                                    serde::de::Error::duplicate_field("billingAccount"),
2378                                );
2379                            }
2380                            billing_account__ = map_.next_value()?;
2381                        }
2382                        GeneratedField::RequestId => {
2383                            if request_id__.is_some() {
2384                                return Err(serde::de::Error::duplicate_field("requestId"));
2385                            }
2386                            request_id__ = Some(map_.next_value()?);
2387                        }
2388                        GeneratedField::AcceptedLegalDocuments => {
2389                            if accepted_legal_documents__.is_some() {
2390                                return Err(
2391                                    serde::de::Error::duplicate_field("acceptedLegalDocuments"),
2392                                );
2393                            }
2394                            accepted_legal_documents__ = Some(map_.next_value()?);
2395                        }
2396                        GeneratedField::ActsAsBusiness => {
2397                            if acts_as_business__.is_some() {
2398                                return Err(
2399                                    serde::de::Error::duplicate_field("actsAsBusiness"),
2400                                );
2401                            }
2402                            acts_as_business__ = Some(map_.next_value()?);
2403                        }
2404                        GeneratedField::__SkipField__ => {
2405                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2406                        }
2407                    }
2408                }
2409                Ok(CreateBillingAccountRequest {
2410                    parent: parent__.unwrap_or_default(),
2411                    billing_account: billing_account__,
2412                    request_id: request_id__.unwrap_or_default(),
2413                    accepted_legal_documents: accepted_legal_documents__
2414                        .unwrap_or_default(),
2415                    acts_as_business: acts_as_business__.unwrap_or_default(),
2416                })
2417            }
2418        }
2419        deserializer
2420            .deserialize_struct(
2421                "origincloud.billing.v1beta1.CreateBillingAccountRequest",
2422                FIELDS,
2423                GeneratedVisitor,
2424            )
2425    }
2426}
2427impl serde::Serialize for DeleteBillingAccountRequest {
2428    #[allow(deprecated)]
2429    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2430    where
2431        S: serde::Serializer,
2432    {
2433        use serde::ser::SerializeStruct;
2434        let mut len = 0;
2435        if !self.name.is_empty() {
2436            len += 1;
2437        }
2438        let mut struct_ser = serializer
2439            .serialize_struct(
2440                "origincloud.billing.v1beta1.DeleteBillingAccountRequest",
2441                len,
2442            )?;
2443        if !self.name.is_empty() {
2444            struct_ser.serialize_field("name", &self.name)?;
2445        }
2446        struct_ser.end()
2447    }
2448}
2449impl<'de> serde::Deserialize<'de> for DeleteBillingAccountRequest {
2450    #[allow(deprecated)]
2451    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2452    where
2453        D: serde::Deserializer<'de>,
2454    {
2455        const FIELDS: &[&str] = &["name"];
2456        #[allow(clippy::enum_variant_names)]
2457        enum GeneratedField {
2458            Name,
2459            __SkipField__,
2460        }
2461        impl<'de> serde::Deserialize<'de> for GeneratedField {
2462            fn deserialize<D>(
2463                deserializer: D,
2464            ) -> std::result::Result<GeneratedField, D::Error>
2465            where
2466                D: serde::Deserializer<'de>,
2467            {
2468                struct GeneratedVisitor;
2469                impl serde::de::Visitor<'_> for GeneratedVisitor {
2470                    type Value = GeneratedField;
2471                    fn expecting(
2472                        &self,
2473                        formatter: &mut std::fmt::Formatter<'_>,
2474                    ) -> std::fmt::Result {
2475                        write!(formatter, "expected one of: {:?}", & FIELDS)
2476                    }
2477                    #[allow(unused_variables)]
2478                    fn visit_str<E>(
2479                        self,
2480                        value: &str,
2481                    ) -> std::result::Result<GeneratedField, E>
2482                    where
2483                        E: serde::de::Error,
2484                    {
2485                        match value {
2486                            "name" => Ok(GeneratedField::Name),
2487                            _ => Ok(GeneratedField::__SkipField__),
2488                        }
2489                    }
2490                }
2491                deserializer.deserialize_identifier(GeneratedVisitor)
2492            }
2493        }
2494        struct GeneratedVisitor;
2495        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2496            type Value = DeleteBillingAccountRequest;
2497            fn expecting(
2498                &self,
2499                formatter: &mut std::fmt::Formatter<'_>,
2500            ) -> std::fmt::Result {
2501                formatter
2502                    .write_str(
2503                        "struct origincloud.billing.v1beta1.DeleteBillingAccountRequest",
2504                    )
2505            }
2506            fn visit_map<V>(
2507                self,
2508                mut map_: V,
2509            ) -> std::result::Result<DeleteBillingAccountRequest, V::Error>
2510            where
2511                V: serde::de::MapAccess<'de>,
2512            {
2513                let mut name__ = None;
2514                while let Some(k) = map_.next_key()? {
2515                    match k {
2516                        GeneratedField::Name => {
2517                            if name__.is_some() {
2518                                return Err(serde::de::Error::duplicate_field("name"));
2519                            }
2520                            name__ = Some(map_.next_value()?);
2521                        }
2522                        GeneratedField::__SkipField__ => {
2523                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2524                        }
2525                    }
2526                }
2527                Ok(DeleteBillingAccountRequest {
2528                    name: name__.unwrap_or_default(),
2529                })
2530            }
2531        }
2532        deserializer
2533            .deserialize_struct(
2534                "origincloud.billing.v1beta1.DeleteBillingAccountRequest",
2535                FIELDS,
2536                GeneratedVisitor,
2537            )
2538    }
2539}
2540impl serde::Serialize for DownloadLegalDocumentVersionRequest {
2541    #[allow(deprecated)]
2542    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2543    where
2544        S: serde::Serializer,
2545    {
2546        use serde::ser::SerializeStruct;
2547        let mut len = 0;
2548        if !self.name.is_empty() {
2549            len += 1;
2550        }
2551        let mut struct_ser = serializer
2552            .serialize_struct(
2553                "origincloud.billing.v1beta1.DownloadLegalDocumentVersionRequest",
2554                len,
2555            )?;
2556        if !self.name.is_empty() {
2557            struct_ser.serialize_field("name", &self.name)?;
2558        }
2559        struct_ser.end()
2560    }
2561}
2562impl<'de> serde::Deserialize<'de> for DownloadLegalDocumentVersionRequest {
2563    #[allow(deprecated)]
2564    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2565    where
2566        D: serde::Deserializer<'de>,
2567    {
2568        const FIELDS: &[&str] = &["name"];
2569        #[allow(clippy::enum_variant_names)]
2570        enum GeneratedField {
2571            Name,
2572            __SkipField__,
2573        }
2574        impl<'de> serde::Deserialize<'de> for GeneratedField {
2575            fn deserialize<D>(
2576                deserializer: D,
2577            ) -> std::result::Result<GeneratedField, D::Error>
2578            where
2579                D: serde::Deserializer<'de>,
2580            {
2581                struct GeneratedVisitor;
2582                impl serde::de::Visitor<'_> for GeneratedVisitor {
2583                    type Value = GeneratedField;
2584                    fn expecting(
2585                        &self,
2586                        formatter: &mut std::fmt::Formatter<'_>,
2587                    ) -> std::fmt::Result {
2588                        write!(formatter, "expected one of: {:?}", & FIELDS)
2589                    }
2590                    #[allow(unused_variables)]
2591                    fn visit_str<E>(
2592                        self,
2593                        value: &str,
2594                    ) -> std::result::Result<GeneratedField, E>
2595                    where
2596                        E: serde::de::Error,
2597                    {
2598                        match value {
2599                            "name" => Ok(GeneratedField::Name),
2600                            _ => Ok(GeneratedField::__SkipField__),
2601                        }
2602                    }
2603                }
2604                deserializer.deserialize_identifier(GeneratedVisitor)
2605            }
2606        }
2607        struct GeneratedVisitor;
2608        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2609            type Value = DownloadLegalDocumentVersionRequest;
2610            fn expecting(
2611                &self,
2612                formatter: &mut std::fmt::Formatter<'_>,
2613            ) -> std::fmt::Result {
2614                formatter
2615                    .write_str(
2616                        "struct origincloud.billing.v1beta1.DownloadLegalDocumentVersionRequest",
2617                    )
2618            }
2619            fn visit_map<V>(
2620                self,
2621                mut map_: V,
2622            ) -> std::result::Result<DownloadLegalDocumentVersionRequest, V::Error>
2623            where
2624                V: serde::de::MapAccess<'de>,
2625            {
2626                let mut name__ = None;
2627                while let Some(k) = map_.next_key()? {
2628                    match k {
2629                        GeneratedField::Name => {
2630                            if name__.is_some() {
2631                                return Err(serde::de::Error::duplicate_field("name"));
2632                            }
2633                            name__ = Some(map_.next_value()?);
2634                        }
2635                        GeneratedField::__SkipField__ => {
2636                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2637                        }
2638                    }
2639                }
2640                Ok(DownloadLegalDocumentVersionRequest {
2641                    name: name__.unwrap_or_default(),
2642                })
2643            }
2644        }
2645        deserializer
2646            .deserialize_struct(
2647                "origincloud.billing.v1beta1.DownloadLegalDocumentVersionRequest",
2648                FIELDS,
2649                GeneratedVisitor,
2650            )
2651    }
2652}
2653impl serde::Serialize for GetBillingAccountRequest {
2654    #[allow(deprecated)]
2655    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2656    where
2657        S: serde::Serializer,
2658    {
2659        use serde::ser::SerializeStruct;
2660        let mut len = 0;
2661        if !self.name.is_empty() {
2662            len += 1;
2663        }
2664        let mut struct_ser = serializer
2665            .serialize_struct(
2666                "origincloud.billing.v1beta1.GetBillingAccountRequest",
2667                len,
2668            )?;
2669        if !self.name.is_empty() {
2670            struct_ser.serialize_field("name", &self.name)?;
2671        }
2672        struct_ser.end()
2673    }
2674}
2675impl<'de> serde::Deserialize<'de> for GetBillingAccountRequest {
2676    #[allow(deprecated)]
2677    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2678    where
2679        D: serde::Deserializer<'de>,
2680    {
2681        const FIELDS: &[&str] = &["name"];
2682        #[allow(clippy::enum_variant_names)]
2683        enum GeneratedField {
2684            Name,
2685            __SkipField__,
2686        }
2687        impl<'de> serde::Deserialize<'de> for GeneratedField {
2688            fn deserialize<D>(
2689                deserializer: D,
2690            ) -> std::result::Result<GeneratedField, D::Error>
2691            where
2692                D: serde::Deserializer<'de>,
2693            {
2694                struct GeneratedVisitor;
2695                impl serde::de::Visitor<'_> for GeneratedVisitor {
2696                    type Value = GeneratedField;
2697                    fn expecting(
2698                        &self,
2699                        formatter: &mut std::fmt::Formatter<'_>,
2700                    ) -> std::fmt::Result {
2701                        write!(formatter, "expected one of: {:?}", & FIELDS)
2702                    }
2703                    #[allow(unused_variables)]
2704                    fn visit_str<E>(
2705                        self,
2706                        value: &str,
2707                    ) -> std::result::Result<GeneratedField, E>
2708                    where
2709                        E: serde::de::Error,
2710                    {
2711                        match value {
2712                            "name" => Ok(GeneratedField::Name),
2713                            _ => Ok(GeneratedField::__SkipField__),
2714                        }
2715                    }
2716                }
2717                deserializer.deserialize_identifier(GeneratedVisitor)
2718            }
2719        }
2720        struct GeneratedVisitor;
2721        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2722            type Value = GetBillingAccountRequest;
2723            fn expecting(
2724                &self,
2725                formatter: &mut std::fmt::Formatter<'_>,
2726            ) -> std::fmt::Result {
2727                formatter
2728                    .write_str(
2729                        "struct origincloud.billing.v1beta1.GetBillingAccountRequest",
2730                    )
2731            }
2732            fn visit_map<V>(
2733                self,
2734                mut map_: V,
2735            ) -> std::result::Result<GetBillingAccountRequest, V::Error>
2736            where
2737                V: serde::de::MapAccess<'de>,
2738            {
2739                let mut name__ = None;
2740                while let Some(k) = map_.next_key()? {
2741                    match k {
2742                        GeneratedField::Name => {
2743                            if name__.is_some() {
2744                                return Err(serde::de::Error::duplicate_field("name"));
2745                            }
2746                            name__ = Some(map_.next_value()?);
2747                        }
2748                        GeneratedField::__SkipField__ => {
2749                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2750                        }
2751                    }
2752                }
2753                Ok(GetBillingAccountRequest {
2754                    name: name__.unwrap_or_default(),
2755                })
2756            }
2757        }
2758        deserializer
2759            .deserialize_struct(
2760                "origincloud.billing.v1beta1.GetBillingAccountRequest",
2761                FIELDS,
2762                GeneratedVisitor,
2763            )
2764    }
2765}
2766impl serde::Serialize for GetBillingCountryRequest {
2767    #[allow(deprecated)]
2768    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2769    where
2770        S: serde::Serializer,
2771    {
2772        use serde::ser::SerializeStruct;
2773        let mut len = 0;
2774        if !self.name.is_empty() {
2775            len += 1;
2776        }
2777        let mut struct_ser = serializer
2778            .serialize_struct(
2779                "origincloud.billing.v1beta1.GetBillingCountryRequest",
2780                len,
2781            )?;
2782        if !self.name.is_empty() {
2783            struct_ser.serialize_field("name", &self.name)?;
2784        }
2785        struct_ser.end()
2786    }
2787}
2788impl<'de> serde::Deserialize<'de> for GetBillingCountryRequest {
2789    #[allow(deprecated)]
2790    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2791    where
2792        D: serde::Deserializer<'de>,
2793    {
2794        const FIELDS: &[&str] = &["name"];
2795        #[allow(clippy::enum_variant_names)]
2796        enum GeneratedField {
2797            Name,
2798            __SkipField__,
2799        }
2800        impl<'de> serde::Deserialize<'de> for GeneratedField {
2801            fn deserialize<D>(
2802                deserializer: D,
2803            ) -> std::result::Result<GeneratedField, D::Error>
2804            where
2805                D: serde::Deserializer<'de>,
2806            {
2807                struct GeneratedVisitor;
2808                impl serde::de::Visitor<'_> for GeneratedVisitor {
2809                    type Value = GeneratedField;
2810                    fn expecting(
2811                        &self,
2812                        formatter: &mut std::fmt::Formatter<'_>,
2813                    ) -> std::fmt::Result {
2814                        write!(formatter, "expected one of: {:?}", & FIELDS)
2815                    }
2816                    #[allow(unused_variables)]
2817                    fn visit_str<E>(
2818                        self,
2819                        value: &str,
2820                    ) -> std::result::Result<GeneratedField, E>
2821                    where
2822                        E: serde::de::Error,
2823                    {
2824                        match value {
2825                            "name" => Ok(GeneratedField::Name),
2826                            _ => Ok(GeneratedField::__SkipField__),
2827                        }
2828                    }
2829                }
2830                deserializer.deserialize_identifier(GeneratedVisitor)
2831            }
2832        }
2833        struct GeneratedVisitor;
2834        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2835            type Value = GetBillingCountryRequest;
2836            fn expecting(
2837                &self,
2838                formatter: &mut std::fmt::Formatter<'_>,
2839            ) -> std::fmt::Result {
2840                formatter
2841                    .write_str(
2842                        "struct origincloud.billing.v1beta1.GetBillingCountryRequest",
2843                    )
2844            }
2845            fn visit_map<V>(
2846                self,
2847                mut map_: V,
2848            ) -> std::result::Result<GetBillingCountryRequest, V::Error>
2849            where
2850                V: serde::de::MapAccess<'de>,
2851            {
2852                let mut name__ = None;
2853                while let Some(k) = map_.next_key()? {
2854                    match k {
2855                        GeneratedField::Name => {
2856                            if name__.is_some() {
2857                                return Err(serde::de::Error::duplicate_field("name"));
2858                            }
2859                            name__ = Some(map_.next_value()?);
2860                        }
2861                        GeneratedField::__SkipField__ => {
2862                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2863                        }
2864                    }
2865                }
2866                Ok(GetBillingCountryRequest {
2867                    name: name__.unwrap_or_default(),
2868                })
2869            }
2870        }
2871        deserializer
2872            .deserialize_struct(
2873                "origincloud.billing.v1beta1.GetBillingCountryRequest",
2874                FIELDS,
2875                GeneratedVisitor,
2876            )
2877    }
2878}
2879impl serde::Serialize for GetLegalAcceptanceRequest {
2880    #[allow(deprecated)]
2881    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2882    where
2883        S: serde::Serializer,
2884    {
2885        use serde::ser::SerializeStruct;
2886        let mut len = 0;
2887        if !self.name.is_empty() {
2888            len += 1;
2889        }
2890        let mut struct_ser = serializer
2891            .serialize_struct(
2892                "origincloud.billing.v1beta1.GetLegalAcceptanceRequest",
2893                len,
2894            )?;
2895        if !self.name.is_empty() {
2896            struct_ser.serialize_field("name", &self.name)?;
2897        }
2898        struct_ser.end()
2899    }
2900}
2901impl<'de> serde::Deserialize<'de> for GetLegalAcceptanceRequest {
2902    #[allow(deprecated)]
2903    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2904    where
2905        D: serde::Deserializer<'de>,
2906    {
2907        const FIELDS: &[&str] = &["name"];
2908        #[allow(clippy::enum_variant_names)]
2909        enum GeneratedField {
2910            Name,
2911            __SkipField__,
2912        }
2913        impl<'de> serde::Deserialize<'de> for GeneratedField {
2914            fn deserialize<D>(
2915                deserializer: D,
2916            ) -> std::result::Result<GeneratedField, D::Error>
2917            where
2918                D: serde::Deserializer<'de>,
2919            {
2920                struct GeneratedVisitor;
2921                impl serde::de::Visitor<'_> for GeneratedVisitor {
2922                    type Value = GeneratedField;
2923                    fn expecting(
2924                        &self,
2925                        formatter: &mut std::fmt::Formatter<'_>,
2926                    ) -> std::fmt::Result {
2927                        write!(formatter, "expected one of: {:?}", & FIELDS)
2928                    }
2929                    #[allow(unused_variables)]
2930                    fn visit_str<E>(
2931                        self,
2932                        value: &str,
2933                    ) -> std::result::Result<GeneratedField, E>
2934                    where
2935                        E: serde::de::Error,
2936                    {
2937                        match value {
2938                            "name" => Ok(GeneratedField::Name),
2939                            _ => Ok(GeneratedField::__SkipField__),
2940                        }
2941                    }
2942                }
2943                deserializer.deserialize_identifier(GeneratedVisitor)
2944            }
2945        }
2946        struct GeneratedVisitor;
2947        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2948            type Value = GetLegalAcceptanceRequest;
2949            fn expecting(
2950                &self,
2951                formatter: &mut std::fmt::Formatter<'_>,
2952            ) -> std::fmt::Result {
2953                formatter
2954                    .write_str(
2955                        "struct origincloud.billing.v1beta1.GetLegalAcceptanceRequest",
2956                    )
2957            }
2958            fn visit_map<V>(
2959                self,
2960                mut map_: V,
2961            ) -> std::result::Result<GetLegalAcceptanceRequest, V::Error>
2962            where
2963                V: serde::de::MapAccess<'de>,
2964            {
2965                let mut name__ = None;
2966                while let Some(k) = map_.next_key()? {
2967                    match k {
2968                        GeneratedField::Name => {
2969                            if name__.is_some() {
2970                                return Err(serde::de::Error::duplicate_field("name"));
2971                            }
2972                            name__ = Some(map_.next_value()?);
2973                        }
2974                        GeneratedField::__SkipField__ => {
2975                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2976                        }
2977                    }
2978                }
2979                Ok(GetLegalAcceptanceRequest {
2980                    name: name__.unwrap_or_default(),
2981                })
2982            }
2983        }
2984        deserializer
2985            .deserialize_struct(
2986                "origincloud.billing.v1beta1.GetLegalAcceptanceRequest",
2987                FIELDS,
2988                GeneratedVisitor,
2989            )
2990    }
2991}
2992impl serde::Serialize for GetLegalDocumentRequest {
2993    #[allow(deprecated)]
2994    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2995    where
2996        S: serde::Serializer,
2997    {
2998        use serde::ser::SerializeStruct;
2999        let mut len = 0;
3000        if !self.name.is_empty() {
3001            len += 1;
3002        }
3003        let mut struct_ser = serializer
3004            .serialize_struct(
3005                "origincloud.billing.v1beta1.GetLegalDocumentRequest",
3006                len,
3007            )?;
3008        if !self.name.is_empty() {
3009            struct_ser.serialize_field("name", &self.name)?;
3010        }
3011        struct_ser.end()
3012    }
3013}
3014impl<'de> serde::Deserialize<'de> for GetLegalDocumentRequest {
3015    #[allow(deprecated)]
3016    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3017    where
3018        D: serde::Deserializer<'de>,
3019    {
3020        const FIELDS: &[&str] = &["name"];
3021        #[allow(clippy::enum_variant_names)]
3022        enum GeneratedField {
3023            Name,
3024            __SkipField__,
3025        }
3026        impl<'de> serde::Deserialize<'de> for GeneratedField {
3027            fn deserialize<D>(
3028                deserializer: D,
3029            ) -> std::result::Result<GeneratedField, D::Error>
3030            where
3031                D: serde::Deserializer<'de>,
3032            {
3033                struct GeneratedVisitor;
3034                impl serde::de::Visitor<'_> for GeneratedVisitor {
3035                    type Value = GeneratedField;
3036                    fn expecting(
3037                        &self,
3038                        formatter: &mut std::fmt::Formatter<'_>,
3039                    ) -> std::fmt::Result {
3040                        write!(formatter, "expected one of: {:?}", & FIELDS)
3041                    }
3042                    #[allow(unused_variables)]
3043                    fn visit_str<E>(
3044                        self,
3045                        value: &str,
3046                    ) -> std::result::Result<GeneratedField, E>
3047                    where
3048                        E: serde::de::Error,
3049                    {
3050                        match value {
3051                            "name" => Ok(GeneratedField::Name),
3052                            _ => Ok(GeneratedField::__SkipField__),
3053                        }
3054                    }
3055                }
3056                deserializer.deserialize_identifier(GeneratedVisitor)
3057            }
3058        }
3059        struct GeneratedVisitor;
3060        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3061            type Value = GetLegalDocumentRequest;
3062            fn expecting(
3063                &self,
3064                formatter: &mut std::fmt::Formatter<'_>,
3065            ) -> std::fmt::Result {
3066                formatter
3067                    .write_str(
3068                        "struct origincloud.billing.v1beta1.GetLegalDocumentRequest",
3069                    )
3070            }
3071            fn visit_map<V>(
3072                self,
3073                mut map_: V,
3074            ) -> std::result::Result<GetLegalDocumentRequest, V::Error>
3075            where
3076                V: serde::de::MapAccess<'de>,
3077            {
3078                let mut name__ = None;
3079                while let Some(k) = map_.next_key()? {
3080                    match k {
3081                        GeneratedField::Name => {
3082                            if name__.is_some() {
3083                                return Err(serde::de::Error::duplicate_field("name"));
3084                            }
3085                            name__ = Some(map_.next_value()?);
3086                        }
3087                        GeneratedField::__SkipField__ => {
3088                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
3089                        }
3090                    }
3091                }
3092                Ok(GetLegalDocumentRequest {
3093                    name: name__.unwrap_or_default(),
3094                })
3095            }
3096        }
3097        deserializer
3098            .deserialize_struct(
3099                "origincloud.billing.v1beta1.GetLegalDocumentRequest",
3100                FIELDS,
3101                GeneratedVisitor,
3102            )
3103    }
3104}
3105impl serde::Serialize for GetLegalDocumentVersionRequest {
3106    #[allow(deprecated)]
3107    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3108    where
3109        S: serde::Serializer,
3110    {
3111        use serde::ser::SerializeStruct;
3112        let mut len = 0;
3113        if !self.name.is_empty() {
3114            len += 1;
3115        }
3116        let mut struct_ser = serializer
3117            .serialize_struct(
3118                "origincloud.billing.v1beta1.GetLegalDocumentVersionRequest",
3119                len,
3120            )?;
3121        if !self.name.is_empty() {
3122            struct_ser.serialize_field("name", &self.name)?;
3123        }
3124        struct_ser.end()
3125    }
3126}
3127impl<'de> serde::Deserialize<'de> for GetLegalDocumentVersionRequest {
3128    #[allow(deprecated)]
3129    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3130    where
3131        D: serde::Deserializer<'de>,
3132    {
3133        const FIELDS: &[&str] = &["name"];
3134        #[allow(clippy::enum_variant_names)]
3135        enum GeneratedField {
3136            Name,
3137            __SkipField__,
3138        }
3139        impl<'de> serde::Deserialize<'de> for GeneratedField {
3140            fn deserialize<D>(
3141                deserializer: D,
3142            ) -> std::result::Result<GeneratedField, D::Error>
3143            where
3144                D: serde::Deserializer<'de>,
3145            {
3146                struct GeneratedVisitor;
3147                impl serde::de::Visitor<'_> for GeneratedVisitor {
3148                    type Value = GeneratedField;
3149                    fn expecting(
3150                        &self,
3151                        formatter: &mut std::fmt::Formatter<'_>,
3152                    ) -> std::fmt::Result {
3153                        write!(formatter, "expected one of: {:?}", & FIELDS)
3154                    }
3155                    #[allow(unused_variables)]
3156                    fn visit_str<E>(
3157                        self,
3158                        value: &str,
3159                    ) -> std::result::Result<GeneratedField, E>
3160                    where
3161                        E: serde::de::Error,
3162                    {
3163                        match value {
3164                            "name" => Ok(GeneratedField::Name),
3165                            _ => Ok(GeneratedField::__SkipField__),
3166                        }
3167                    }
3168                }
3169                deserializer.deserialize_identifier(GeneratedVisitor)
3170            }
3171        }
3172        struct GeneratedVisitor;
3173        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3174            type Value = GetLegalDocumentVersionRequest;
3175            fn expecting(
3176                &self,
3177                formatter: &mut std::fmt::Formatter<'_>,
3178            ) -> std::fmt::Result {
3179                formatter
3180                    .write_str(
3181                        "struct origincloud.billing.v1beta1.GetLegalDocumentVersionRequest",
3182                    )
3183            }
3184            fn visit_map<V>(
3185                self,
3186                mut map_: V,
3187            ) -> std::result::Result<GetLegalDocumentVersionRequest, V::Error>
3188            where
3189                V: serde::de::MapAccess<'de>,
3190            {
3191                let mut name__ = None;
3192                while let Some(k) = map_.next_key()? {
3193                    match k {
3194                        GeneratedField::Name => {
3195                            if name__.is_some() {
3196                                return Err(serde::de::Error::duplicate_field("name"));
3197                            }
3198                            name__ = Some(map_.next_value()?);
3199                        }
3200                        GeneratedField::__SkipField__ => {
3201                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
3202                        }
3203                    }
3204                }
3205                Ok(GetLegalDocumentVersionRequest {
3206                    name: name__.unwrap_or_default(),
3207                })
3208            }
3209        }
3210        deserializer
3211            .deserialize_struct(
3212                "origincloud.billing.v1beta1.GetLegalDocumentVersionRequest",
3213                FIELDS,
3214                GeneratedVisitor,
3215            )
3216    }
3217}
3218impl serde::Serialize for GetPriceListRequest {
3219    #[allow(deprecated)]
3220    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3221    where
3222        S: serde::Serializer,
3223    {
3224        use serde::ser::SerializeStruct;
3225        let len = 0;
3226        let struct_ser = serializer
3227            .serialize_struct("origincloud.billing.v1beta1.GetPriceListRequest", len)?;
3228        struct_ser.end()
3229    }
3230}
3231impl<'de> serde::Deserialize<'de> for GetPriceListRequest {
3232    #[allow(deprecated)]
3233    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3234    where
3235        D: serde::Deserializer<'de>,
3236    {
3237        const FIELDS: &[&str] = &[];
3238        #[allow(clippy::enum_variant_names)]
3239        enum GeneratedField {
3240            __SkipField__,
3241        }
3242        impl<'de> serde::Deserialize<'de> for GeneratedField {
3243            fn deserialize<D>(
3244                deserializer: D,
3245            ) -> std::result::Result<GeneratedField, D::Error>
3246            where
3247                D: serde::Deserializer<'de>,
3248            {
3249                struct GeneratedVisitor;
3250                impl serde::de::Visitor<'_> for GeneratedVisitor {
3251                    type Value = GeneratedField;
3252                    fn expecting(
3253                        &self,
3254                        formatter: &mut std::fmt::Formatter<'_>,
3255                    ) -> std::fmt::Result {
3256                        write!(formatter, "expected one of: {:?}", & FIELDS)
3257                    }
3258                    #[allow(unused_variables)]
3259                    fn visit_str<E>(
3260                        self,
3261                        value: &str,
3262                    ) -> std::result::Result<GeneratedField, E>
3263                    where
3264                        E: serde::de::Error,
3265                    {
3266                        Ok(GeneratedField::__SkipField__)
3267                    }
3268                }
3269                deserializer.deserialize_identifier(GeneratedVisitor)
3270            }
3271        }
3272        struct GeneratedVisitor;
3273        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3274            type Value = GetPriceListRequest;
3275            fn expecting(
3276                &self,
3277                formatter: &mut std::fmt::Formatter<'_>,
3278            ) -> std::fmt::Result {
3279                formatter
3280                    .write_str("struct origincloud.billing.v1beta1.GetPriceListRequest")
3281            }
3282            fn visit_map<V>(
3283                self,
3284                mut map_: V,
3285            ) -> std::result::Result<GetPriceListRequest, V::Error>
3286            where
3287                V: serde::de::MapAccess<'de>,
3288            {
3289                while map_.next_key::<GeneratedField>()?.is_some() {
3290                    let _ = map_.next_value::<serde::de::IgnoredAny>()?;
3291                }
3292                Ok(GetPriceListRequest {})
3293            }
3294        }
3295        deserializer
3296            .deserialize_struct(
3297                "origincloud.billing.v1beta1.GetPriceListRequest",
3298                FIELDS,
3299                GeneratedVisitor,
3300            )
3301    }
3302}
3303impl serde::Serialize for GetProjectBillingInfoRequest {
3304    #[allow(deprecated)]
3305    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3306    where
3307        S: serde::Serializer,
3308    {
3309        use serde::ser::SerializeStruct;
3310        let mut len = 0;
3311        if !self.name.is_empty() {
3312            len += 1;
3313        }
3314        let mut struct_ser = serializer
3315            .serialize_struct(
3316                "origincloud.billing.v1beta1.GetProjectBillingInfoRequest",
3317                len,
3318            )?;
3319        if !self.name.is_empty() {
3320            struct_ser.serialize_field("name", &self.name)?;
3321        }
3322        struct_ser.end()
3323    }
3324}
3325impl<'de> serde::Deserialize<'de> for GetProjectBillingInfoRequest {
3326    #[allow(deprecated)]
3327    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3328    where
3329        D: serde::Deserializer<'de>,
3330    {
3331        const FIELDS: &[&str] = &["name"];
3332        #[allow(clippy::enum_variant_names)]
3333        enum GeneratedField {
3334            Name,
3335            __SkipField__,
3336        }
3337        impl<'de> serde::Deserialize<'de> for GeneratedField {
3338            fn deserialize<D>(
3339                deserializer: D,
3340            ) -> std::result::Result<GeneratedField, D::Error>
3341            where
3342                D: serde::Deserializer<'de>,
3343            {
3344                struct GeneratedVisitor;
3345                impl serde::de::Visitor<'_> for GeneratedVisitor {
3346                    type Value = GeneratedField;
3347                    fn expecting(
3348                        &self,
3349                        formatter: &mut std::fmt::Formatter<'_>,
3350                    ) -> std::fmt::Result {
3351                        write!(formatter, "expected one of: {:?}", & FIELDS)
3352                    }
3353                    #[allow(unused_variables)]
3354                    fn visit_str<E>(
3355                        self,
3356                        value: &str,
3357                    ) -> std::result::Result<GeneratedField, E>
3358                    where
3359                        E: serde::de::Error,
3360                    {
3361                        match value {
3362                            "name" => Ok(GeneratedField::Name),
3363                            _ => Ok(GeneratedField::__SkipField__),
3364                        }
3365                    }
3366                }
3367                deserializer.deserialize_identifier(GeneratedVisitor)
3368            }
3369        }
3370        struct GeneratedVisitor;
3371        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3372            type Value = GetProjectBillingInfoRequest;
3373            fn expecting(
3374                &self,
3375                formatter: &mut std::fmt::Formatter<'_>,
3376            ) -> std::fmt::Result {
3377                formatter
3378                    .write_str(
3379                        "struct origincloud.billing.v1beta1.GetProjectBillingInfoRequest",
3380                    )
3381            }
3382            fn visit_map<V>(
3383                self,
3384                mut map_: V,
3385            ) -> std::result::Result<GetProjectBillingInfoRequest, V::Error>
3386            where
3387                V: serde::de::MapAccess<'de>,
3388            {
3389                let mut name__ = None;
3390                while let Some(k) = map_.next_key()? {
3391                    match k {
3392                        GeneratedField::Name => {
3393                            if name__.is_some() {
3394                                return Err(serde::de::Error::duplicate_field("name"));
3395                            }
3396                            name__ = Some(map_.next_value()?);
3397                        }
3398                        GeneratedField::__SkipField__ => {
3399                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
3400                        }
3401                    }
3402                }
3403                Ok(GetProjectBillingInfoRequest {
3404                    name: name__.unwrap_or_default(),
3405                })
3406            }
3407        }
3408        deserializer
3409            .deserialize_struct(
3410                "origincloud.billing.v1beta1.GetProjectBillingInfoRequest",
3411                FIELDS,
3412                GeneratedVisitor,
3413            )
3414    }
3415}
3416impl serde::Serialize for GetSpendLimitRequest {
3417    #[allow(deprecated)]
3418    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3419    where
3420        S: serde::Serializer,
3421    {
3422        use serde::ser::SerializeStruct;
3423        let mut len = 0;
3424        if !self.name.is_empty() {
3425            len += 1;
3426        }
3427        let mut struct_ser = serializer
3428            .serialize_struct("origincloud.billing.v1beta1.GetSpendLimitRequest", len)?;
3429        if !self.name.is_empty() {
3430            struct_ser.serialize_field("name", &self.name)?;
3431        }
3432        struct_ser.end()
3433    }
3434}
3435impl<'de> serde::Deserialize<'de> for GetSpendLimitRequest {
3436    #[allow(deprecated)]
3437    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3438    where
3439        D: serde::Deserializer<'de>,
3440    {
3441        const FIELDS: &[&str] = &["name"];
3442        #[allow(clippy::enum_variant_names)]
3443        enum GeneratedField {
3444            Name,
3445            __SkipField__,
3446        }
3447        impl<'de> serde::Deserialize<'de> for GeneratedField {
3448            fn deserialize<D>(
3449                deserializer: D,
3450            ) -> std::result::Result<GeneratedField, D::Error>
3451            where
3452                D: serde::Deserializer<'de>,
3453            {
3454                struct GeneratedVisitor;
3455                impl serde::de::Visitor<'_> for GeneratedVisitor {
3456                    type Value = GeneratedField;
3457                    fn expecting(
3458                        &self,
3459                        formatter: &mut std::fmt::Formatter<'_>,
3460                    ) -> std::fmt::Result {
3461                        write!(formatter, "expected one of: {:?}", & FIELDS)
3462                    }
3463                    #[allow(unused_variables)]
3464                    fn visit_str<E>(
3465                        self,
3466                        value: &str,
3467                    ) -> std::result::Result<GeneratedField, E>
3468                    where
3469                        E: serde::de::Error,
3470                    {
3471                        match value {
3472                            "name" => Ok(GeneratedField::Name),
3473                            _ => Ok(GeneratedField::__SkipField__),
3474                        }
3475                    }
3476                }
3477                deserializer.deserialize_identifier(GeneratedVisitor)
3478            }
3479        }
3480        struct GeneratedVisitor;
3481        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3482            type Value = GetSpendLimitRequest;
3483            fn expecting(
3484                &self,
3485                formatter: &mut std::fmt::Formatter<'_>,
3486            ) -> std::fmt::Result {
3487                formatter
3488                    .write_str("struct origincloud.billing.v1beta1.GetSpendLimitRequest")
3489            }
3490            fn visit_map<V>(
3491                self,
3492                mut map_: V,
3493            ) -> std::result::Result<GetSpendLimitRequest, V::Error>
3494            where
3495                V: serde::de::MapAccess<'de>,
3496            {
3497                let mut name__ = None;
3498                while let Some(k) = map_.next_key()? {
3499                    match k {
3500                        GeneratedField::Name => {
3501                            if name__.is_some() {
3502                                return Err(serde::de::Error::duplicate_field("name"));
3503                            }
3504                            name__ = Some(map_.next_value()?);
3505                        }
3506                        GeneratedField::__SkipField__ => {
3507                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
3508                        }
3509                    }
3510                }
3511                Ok(GetSpendLimitRequest {
3512                    name: name__.unwrap_or_default(),
3513                })
3514            }
3515        }
3516        deserializer
3517            .deserialize_struct(
3518                "origincloud.billing.v1beta1.GetSpendLimitRequest",
3519                FIELDS,
3520                GeneratedVisitor,
3521            )
3522    }
3523}
3524impl serde::Serialize for Granularity {
3525    #[allow(deprecated)]
3526    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3527    where
3528        S: serde::Serializer,
3529    {
3530        let variant = match self {
3531            Self::Unspecified => "GRANULARITY_UNSPECIFIED",
3532            Self::Hourly => "HOURLY",
3533            Self::Daily => "DAILY",
3534        };
3535        serializer.serialize_str(variant)
3536    }
3537}
3538impl<'de> serde::Deserialize<'de> for Granularity {
3539    #[allow(deprecated)]
3540    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3541    where
3542        D: serde::Deserializer<'de>,
3543    {
3544        const FIELDS: &[&str] = &["GRANULARITY_UNSPECIFIED", "HOURLY", "DAILY"];
3545        struct GeneratedVisitor;
3546        impl serde::de::Visitor<'_> for GeneratedVisitor {
3547            type Value = Granularity;
3548            fn expecting(
3549                &self,
3550                formatter: &mut std::fmt::Formatter<'_>,
3551            ) -> std::fmt::Result {
3552                write!(formatter, "expected one of: {:?}", & FIELDS)
3553            }
3554            fn visit_i64<E>(self, v: i64) -> std::result::Result<Self::Value, E>
3555            where
3556                E: serde::de::Error,
3557            {
3558                i32::try_from(v)
3559                    .ok()
3560                    .and_then(|x| {
3561                        x.try_into().ok().or_else(|| Some(Granularity::default()))
3562                    })
3563                    .ok_or_else(|| {
3564                        serde::de::Error::invalid_value(
3565                            serde::de::Unexpected::Signed(v),
3566                            &self,
3567                        )
3568                    })
3569            }
3570            fn visit_u64<E>(self, v: u64) -> std::result::Result<Self::Value, E>
3571            where
3572                E: serde::de::Error,
3573            {
3574                i32::try_from(v)
3575                    .ok()
3576                    .and_then(|x| {
3577                        x.try_into().ok().or_else(|| Some(Granularity::default()))
3578                    })
3579                    .ok_or_else(|| {
3580                        serde::de::Error::invalid_value(
3581                            serde::de::Unexpected::Unsigned(v),
3582                            &self,
3583                        )
3584                    })
3585            }
3586            fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
3587            where
3588                E: serde::de::Error,
3589            {
3590                match value {
3591                    "GRANULARITY_UNSPECIFIED" => Ok(Granularity::Unspecified),
3592                    "HOURLY" => Ok(Granularity::Hourly),
3593                    "DAILY" => Ok(Granularity::Daily),
3594                    _ => Ok(Granularity::default()),
3595                }
3596            }
3597        }
3598        deserializer.deserialize_any(GeneratedVisitor)
3599    }
3600}
3601impl serde::Serialize for LegalAcceptance {
3602    #[allow(deprecated)]
3603    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3604    where
3605        S: serde::Serializer,
3606    {
3607        use serde::ser::SerializeStruct;
3608        let mut len = 0;
3609        if !self.name.is_empty() {
3610            len += 1;
3611        }
3612        if !self.legal_document_version.is_empty() {
3613            len += 1;
3614        }
3615        if !self.sha256.is_empty() {
3616            len += 1;
3617        }
3618        if !self.accepter.is_empty() {
3619            len += 1;
3620        }
3621        if self.accept_time.is_some() {
3622            len += 1;
3623        }
3624        if self.method != 0 {
3625            len += 1;
3626        }
3627        if self.acts_as_business {
3628            len += 1;
3629        }
3630        if !self.organization_display_name.is_empty() {
3631            len += 1;
3632        }
3633        if self.billing_address.is_some() {
3634            len += 1;
3635        }
3636        if !self.vat_id.is_empty() {
3637            len += 1;
3638        }
3639        let mut struct_ser = serializer
3640            .serialize_struct("origincloud.billing.v1beta1.LegalAcceptance", len)?;
3641        if !self.name.is_empty() {
3642            struct_ser.serialize_field("name", &self.name)?;
3643        }
3644        if !self.legal_document_version.is_empty() {
3645            struct_ser
3646                .serialize_field("legalDocumentVersion", &self.legal_document_version)?;
3647        }
3648        if !self.sha256.is_empty() {
3649            struct_ser.serialize_field("sha256", &self.sha256)?;
3650        }
3651        if !self.accepter.is_empty() {
3652            struct_ser.serialize_field("accepter", &self.accepter)?;
3653        }
3654        if let Some(v) = self.accept_time.as_ref() {
3655            struct_ser.serialize_field("acceptTime", v)?;
3656        }
3657        if self.method != 0 {
3658            let v = legal_acceptance::Method::try_from(self.method)
3659                .map_err(|_| serde::ser::Error::custom(
3660                    format!("Invalid variant {}", self.method),
3661                ))?;
3662            struct_ser.serialize_field("method", &v)?;
3663        }
3664        if self.acts_as_business {
3665            struct_ser.serialize_field("actsAsBusiness", &self.acts_as_business)?;
3666        }
3667        if !self.organization_display_name.is_empty() {
3668            struct_ser
3669                .serialize_field(
3670                    "organizationDisplayName",
3671                    &self.organization_display_name,
3672                )?;
3673        }
3674        if let Some(v) = self.billing_address.as_ref() {
3675            struct_ser.serialize_field("billingAddress", v)?;
3676        }
3677        if !self.vat_id.is_empty() {
3678            struct_ser.serialize_field("vatId", &self.vat_id)?;
3679        }
3680        struct_ser.end()
3681    }
3682}
3683impl<'de> serde::Deserialize<'de> for LegalAcceptance {
3684    #[allow(deprecated)]
3685    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3686    where
3687        D: serde::Deserializer<'de>,
3688    {
3689        const FIELDS: &[&str] = &[
3690            "name",
3691            "legal_document_version",
3692            "legalDocumentVersion",
3693            "sha256",
3694            "accepter",
3695            "accept_time",
3696            "acceptTime",
3697            "method",
3698            "acts_as_business",
3699            "actsAsBusiness",
3700            "organization_display_name",
3701            "organizationDisplayName",
3702            "billing_address",
3703            "billingAddress",
3704            "vat_id",
3705            "vatId",
3706        ];
3707        #[allow(clippy::enum_variant_names)]
3708        enum GeneratedField {
3709            Name,
3710            LegalDocumentVersion,
3711            Sha256,
3712            Accepter,
3713            AcceptTime,
3714            Method,
3715            ActsAsBusiness,
3716            OrganizationDisplayName,
3717            BillingAddress,
3718            VatId,
3719            __SkipField__,
3720        }
3721        impl<'de> serde::Deserialize<'de> for GeneratedField {
3722            fn deserialize<D>(
3723                deserializer: D,
3724            ) -> std::result::Result<GeneratedField, D::Error>
3725            where
3726                D: serde::Deserializer<'de>,
3727            {
3728                struct GeneratedVisitor;
3729                impl serde::de::Visitor<'_> for GeneratedVisitor {
3730                    type Value = GeneratedField;
3731                    fn expecting(
3732                        &self,
3733                        formatter: &mut std::fmt::Formatter<'_>,
3734                    ) -> std::fmt::Result {
3735                        write!(formatter, "expected one of: {:?}", & FIELDS)
3736                    }
3737                    #[allow(unused_variables)]
3738                    fn visit_str<E>(
3739                        self,
3740                        value: &str,
3741                    ) -> std::result::Result<GeneratedField, E>
3742                    where
3743                        E: serde::de::Error,
3744                    {
3745                        match value {
3746                            "name" => Ok(GeneratedField::Name),
3747                            "legalDocumentVersion" | "legal_document_version" => {
3748                                Ok(GeneratedField::LegalDocumentVersion)
3749                            }
3750                            "sha256" => Ok(GeneratedField::Sha256),
3751                            "accepter" => Ok(GeneratedField::Accepter),
3752                            "acceptTime" | "accept_time" => {
3753                                Ok(GeneratedField::AcceptTime)
3754                            }
3755                            "method" => Ok(GeneratedField::Method),
3756                            "actsAsBusiness" | "acts_as_business" => {
3757                                Ok(GeneratedField::ActsAsBusiness)
3758                            }
3759                            "organizationDisplayName" | "organization_display_name" => {
3760                                Ok(GeneratedField::OrganizationDisplayName)
3761                            }
3762                            "billingAddress" | "billing_address" => {
3763                                Ok(GeneratedField::BillingAddress)
3764                            }
3765                            "vatId" | "vat_id" => Ok(GeneratedField::VatId),
3766                            _ => Ok(GeneratedField::__SkipField__),
3767                        }
3768                    }
3769                }
3770                deserializer.deserialize_identifier(GeneratedVisitor)
3771            }
3772        }
3773        struct GeneratedVisitor;
3774        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3775            type Value = LegalAcceptance;
3776            fn expecting(
3777                &self,
3778                formatter: &mut std::fmt::Formatter<'_>,
3779            ) -> std::fmt::Result {
3780                formatter.write_str("struct origincloud.billing.v1beta1.LegalAcceptance")
3781            }
3782            fn visit_map<V>(
3783                self,
3784                mut map_: V,
3785            ) -> std::result::Result<LegalAcceptance, V::Error>
3786            where
3787                V: serde::de::MapAccess<'de>,
3788            {
3789                let mut name__ = None;
3790                let mut legal_document_version__ = None;
3791                let mut sha256__ = None;
3792                let mut accepter__ = None;
3793                let mut accept_time__ = None;
3794                let mut method__ = None;
3795                let mut acts_as_business__ = None;
3796                let mut organization_display_name__ = None;
3797                let mut billing_address__ = None;
3798                let mut vat_id__ = None;
3799                while let Some(k) = map_.next_key()? {
3800                    match k {
3801                        GeneratedField::Name => {
3802                            if name__.is_some() {
3803                                return Err(serde::de::Error::duplicate_field("name"));
3804                            }
3805                            name__ = Some(map_.next_value()?);
3806                        }
3807                        GeneratedField::LegalDocumentVersion => {
3808                            if legal_document_version__.is_some() {
3809                                return Err(
3810                                    serde::de::Error::duplicate_field("legalDocumentVersion"),
3811                                );
3812                            }
3813                            legal_document_version__ = Some(map_.next_value()?);
3814                        }
3815                        GeneratedField::Sha256 => {
3816                            if sha256__.is_some() {
3817                                return Err(serde::de::Error::duplicate_field("sha256"));
3818                            }
3819                            sha256__ = Some(map_.next_value()?);
3820                        }
3821                        GeneratedField::Accepter => {
3822                            if accepter__.is_some() {
3823                                return Err(serde::de::Error::duplicate_field("accepter"));
3824                            }
3825                            accepter__ = Some(map_.next_value()?);
3826                        }
3827                        GeneratedField::AcceptTime => {
3828                            if accept_time__.is_some() {
3829                                return Err(serde::de::Error::duplicate_field("acceptTime"));
3830                            }
3831                            accept_time__ = map_.next_value()?;
3832                        }
3833                        GeneratedField::Method => {
3834                            if method__.is_some() {
3835                                return Err(serde::de::Error::duplicate_field("method"));
3836                            }
3837                            method__ = Some(
3838                                map_.next_value::<legal_acceptance::Method>()? as i32,
3839                            );
3840                        }
3841                        GeneratedField::ActsAsBusiness => {
3842                            if acts_as_business__.is_some() {
3843                                return Err(
3844                                    serde::de::Error::duplicate_field("actsAsBusiness"),
3845                                );
3846                            }
3847                            acts_as_business__ = Some(map_.next_value()?);
3848                        }
3849                        GeneratedField::OrganizationDisplayName => {
3850                            if organization_display_name__.is_some() {
3851                                return Err(
3852                                    serde::de::Error::duplicate_field("organizationDisplayName"),
3853                                );
3854                            }
3855                            organization_display_name__ = Some(map_.next_value()?);
3856                        }
3857                        GeneratedField::BillingAddress => {
3858                            if billing_address__.is_some() {
3859                                return Err(
3860                                    serde::de::Error::duplicate_field("billingAddress"),
3861                                );
3862                            }
3863                            billing_address__ = map_.next_value()?;
3864                        }
3865                        GeneratedField::VatId => {
3866                            if vat_id__.is_some() {
3867                                return Err(serde::de::Error::duplicate_field("vatId"));
3868                            }
3869                            vat_id__ = Some(map_.next_value()?);
3870                        }
3871                        GeneratedField::__SkipField__ => {
3872                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
3873                        }
3874                    }
3875                }
3876                Ok(LegalAcceptance {
3877                    name: name__.unwrap_or_default(),
3878                    legal_document_version: legal_document_version__.unwrap_or_default(),
3879                    sha256: sha256__.unwrap_or_default(),
3880                    accepter: accepter__.unwrap_or_default(),
3881                    accept_time: accept_time__,
3882                    method: method__.unwrap_or_default(),
3883                    acts_as_business: acts_as_business__.unwrap_or_default(),
3884                    organization_display_name: organization_display_name__
3885                        .unwrap_or_default(),
3886                    billing_address: billing_address__,
3887                    vat_id: vat_id__.unwrap_or_default(),
3888                })
3889            }
3890        }
3891        deserializer
3892            .deserialize_struct(
3893                "origincloud.billing.v1beta1.LegalAcceptance",
3894                FIELDS,
3895                GeneratedVisitor,
3896            )
3897    }
3898}
3899impl serde::Serialize for legal_acceptance::Method {
3900    #[allow(deprecated)]
3901    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3902    where
3903        S: serde::Serializer,
3904    {
3905        let variant = match self {
3906            Self::Unspecified => "METHOD_UNSPECIFIED",
3907            Self::Signup => "SIGNUP",
3908            Self::Change => "CHANGE",
3909            Self::Migration => "MIGRATION",
3910        };
3911        serializer.serialize_str(variant)
3912    }
3913}
3914impl<'de> serde::Deserialize<'de> for legal_acceptance::Method {
3915    #[allow(deprecated)]
3916    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3917    where
3918        D: serde::Deserializer<'de>,
3919    {
3920        const FIELDS: &[&str] = &["METHOD_UNSPECIFIED", "SIGNUP", "CHANGE", "MIGRATION"];
3921        struct GeneratedVisitor;
3922        impl serde::de::Visitor<'_> for GeneratedVisitor {
3923            type Value = legal_acceptance::Method;
3924            fn expecting(
3925                &self,
3926                formatter: &mut std::fmt::Formatter<'_>,
3927            ) -> std::fmt::Result {
3928                write!(formatter, "expected one of: {:?}", & FIELDS)
3929            }
3930            fn visit_i64<E>(self, v: i64) -> std::result::Result<Self::Value, E>
3931            where
3932                E: serde::de::Error,
3933            {
3934                i32::try_from(v)
3935                    .ok()
3936                    .and_then(|x| {
3937                        x
3938                            .try_into()
3939                            .ok()
3940                            .or_else(|| Some(legal_acceptance::Method::default()))
3941                    })
3942                    .ok_or_else(|| {
3943                        serde::de::Error::invalid_value(
3944                            serde::de::Unexpected::Signed(v),
3945                            &self,
3946                        )
3947                    })
3948            }
3949            fn visit_u64<E>(self, v: u64) -> std::result::Result<Self::Value, E>
3950            where
3951                E: serde::de::Error,
3952            {
3953                i32::try_from(v)
3954                    .ok()
3955                    .and_then(|x| {
3956                        x
3957                            .try_into()
3958                            .ok()
3959                            .or_else(|| Some(legal_acceptance::Method::default()))
3960                    })
3961                    .ok_or_else(|| {
3962                        serde::de::Error::invalid_value(
3963                            serde::de::Unexpected::Unsigned(v),
3964                            &self,
3965                        )
3966                    })
3967            }
3968            fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
3969            where
3970                E: serde::de::Error,
3971            {
3972                match value {
3973                    "METHOD_UNSPECIFIED" => Ok(legal_acceptance::Method::Unspecified),
3974                    "SIGNUP" => Ok(legal_acceptance::Method::Signup),
3975                    "CHANGE" => Ok(legal_acceptance::Method::Change),
3976                    "MIGRATION" => Ok(legal_acceptance::Method::Migration),
3977                    _ => Ok(legal_acceptance::Method::default()),
3978                }
3979            }
3980        }
3981        deserializer.deserialize_any(GeneratedVisitor)
3982    }
3983}
3984impl serde::Serialize for LegalDocument {
3985    #[allow(deprecated)]
3986    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3987    where
3988        S: serde::Serializer,
3989    {
3990        use serde::ser::SerializeStruct;
3991        let mut len = 0;
3992        if !self.name.is_empty() {
3993            len += 1;
3994        }
3995        if !self.display_name.is_empty() {
3996            len += 1;
3997        }
3998        if self.acceptance_required {
3999            len += 1;
4000        }
4001        if !self.current_version.is_empty() {
4002            len += 1;
4003        }
4004        if !self.latest_version.is_empty() {
4005            len += 1;
4006        }
4007        let mut struct_ser = serializer
4008            .serialize_struct("origincloud.billing.v1beta1.LegalDocument", len)?;
4009        if !self.name.is_empty() {
4010            struct_ser.serialize_field("name", &self.name)?;
4011        }
4012        if !self.display_name.is_empty() {
4013            struct_ser.serialize_field("displayName", &self.display_name)?;
4014        }
4015        if self.acceptance_required {
4016            struct_ser.serialize_field("acceptanceRequired", &self.acceptance_required)?;
4017        }
4018        if !self.current_version.is_empty() {
4019            struct_ser.serialize_field("currentVersion", &self.current_version)?;
4020        }
4021        if !self.latest_version.is_empty() {
4022            struct_ser.serialize_field("latestVersion", &self.latest_version)?;
4023        }
4024        struct_ser.end()
4025    }
4026}
4027impl<'de> serde::Deserialize<'de> for LegalDocument {
4028    #[allow(deprecated)]
4029    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4030    where
4031        D: serde::Deserializer<'de>,
4032    {
4033        const FIELDS: &[&str] = &[
4034            "name",
4035            "display_name",
4036            "displayName",
4037            "acceptance_required",
4038            "acceptanceRequired",
4039            "current_version",
4040            "currentVersion",
4041            "latest_version",
4042            "latestVersion",
4043        ];
4044        #[allow(clippy::enum_variant_names)]
4045        enum GeneratedField {
4046            Name,
4047            DisplayName,
4048            AcceptanceRequired,
4049            CurrentVersion,
4050            LatestVersion,
4051            __SkipField__,
4052        }
4053        impl<'de> serde::Deserialize<'de> for GeneratedField {
4054            fn deserialize<D>(
4055                deserializer: D,
4056            ) -> std::result::Result<GeneratedField, D::Error>
4057            where
4058                D: serde::Deserializer<'de>,
4059            {
4060                struct GeneratedVisitor;
4061                impl serde::de::Visitor<'_> for GeneratedVisitor {
4062                    type Value = GeneratedField;
4063                    fn expecting(
4064                        &self,
4065                        formatter: &mut std::fmt::Formatter<'_>,
4066                    ) -> std::fmt::Result {
4067                        write!(formatter, "expected one of: {:?}", & FIELDS)
4068                    }
4069                    #[allow(unused_variables)]
4070                    fn visit_str<E>(
4071                        self,
4072                        value: &str,
4073                    ) -> std::result::Result<GeneratedField, E>
4074                    where
4075                        E: serde::de::Error,
4076                    {
4077                        match value {
4078                            "name" => Ok(GeneratedField::Name),
4079                            "displayName" | "display_name" => {
4080                                Ok(GeneratedField::DisplayName)
4081                            }
4082                            "acceptanceRequired" | "acceptance_required" => {
4083                                Ok(GeneratedField::AcceptanceRequired)
4084                            }
4085                            "currentVersion" | "current_version" => {
4086                                Ok(GeneratedField::CurrentVersion)
4087                            }
4088                            "latestVersion" | "latest_version" => {
4089                                Ok(GeneratedField::LatestVersion)
4090                            }
4091                            _ => Ok(GeneratedField::__SkipField__),
4092                        }
4093                    }
4094                }
4095                deserializer.deserialize_identifier(GeneratedVisitor)
4096            }
4097        }
4098        struct GeneratedVisitor;
4099        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
4100            type Value = LegalDocument;
4101            fn expecting(
4102                &self,
4103                formatter: &mut std::fmt::Formatter<'_>,
4104            ) -> std::fmt::Result {
4105                formatter.write_str("struct origincloud.billing.v1beta1.LegalDocument")
4106            }
4107            fn visit_map<V>(
4108                self,
4109                mut map_: V,
4110            ) -> std::result::Result<LegalDocument, V::Error>
4111            where
4112                V: serde::de::MapAccess<'de>,
4113            {
4114                let mut name__ = None;
4115                let mut display_name__ = None;
4116                let mut acceptance_required__ = None;
4117                let mut current_version__ = None;
4118                let mut latest_version__ = None;
4119                while let Some(k) = map_.next_key()? {
4120                    match k {
4121                        GeneratedField::Name => {
4122                            if name__.is_some() {
4123                                return Err(serde::de::Error::duplicate_field("name"));
4124                            }
4125                            name__ = Some(map_.next_value()?);
4126                        }
4127                        GeneratedField::DisplayName => {
4128                            if display_name__.is_some() {
4129                                return Err(
4130                                    serde::de::Error::duplicate_field("displayName"),
4131                                );
4132                            }
4133                            display_name__ = Some(map_.next_value()?);
4134                        }
4135                        GeneratedField::AcceptanceRequired => {
4136                            if acceptance_required__.is_some() {
4137                                return Err(
4138                                    serde::de::Error::duplicate_field("acceptanceRequired"),
4139                                );
4140                            }
4141                            acceptance_required__ = Some(map_.next_value()?);
4142                        }
4143                        GeneratedField::CurrentVersion => {
4144                            if current_version__.is_some() {
4145                                return Err(
4146                                    serde::de::Error::duplicate_field("currentVersion"),
4147                                );
4148                            }
4149                            current_version__ = Some(map_.next_value()?);
4150                        }
4151                        GeneratedField::LatestVersion => {
4152                            if latest_version__.is_some() {
4153                                return Err(
4154                                    serde::de::Error::duplicate_field("latestVersion"),
4155                                );
4156                            }
4157                            latest_version__ = Some(map_.next_value()?);
4158                        }
4159                        GeneratedField::__SkipField__ => {
4160                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
4161                        }
4162                    }
4163                }
4164                Ok(LegalDocument {
4165                    name: name__.unwrap_or_default(),
4166                    display_name: display_name__.unwrap_or_default(),
4167                    acceptance_required: acceptance_required__.unwrap_or_default(),
4168                    current_version: current_version__.unwrap_or_default(),
4169                    latest_version: latest_version__.unwrap_or_default(),
4170                })
4171            }
4172        }
4173        deserializer
4174            .deserialize_struct(
4175                "origincloud.billing.v1beta1.LegalDocument",
4176                FIELDS,
4177                GeneratedVisitor,
4178            )
4179    }
4180}
4181impl serde::Serialize for LegalDocumentVersion {
4182    #[allow(deprecated)]
4183    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4184    where
4185        S: serde::Serializer,
4186    {
4187        use serde::ser::SerializeStruct;
4188        let mut len = 0;
4189        if !self.name.is_empty() {
4190            len += 1;
4191        }
4192        if !self.display_name.is_empty() {
4193            len += 1;
4194        }
4195        if self.effective_date.is_some() {
4196            len += 1;
4197        }
4198        if self.change_class != 0 {
4199            len += 1;
4200        }
4201        if !self.change_summary.is_empty() {
4202            len += 1;
4203        }
4204        if !self.sha256.is_empty() {
4205            len += 1;
4206        }
4207        if !self.markdown.is_empty() {
4208            len += 1;
4209        }
4210        if !self.html.is_empty() {
4211            len += 1;
4212        }
4213        if !self.uri.is_empty() {
4214            len += 1;
4215        }
4216        if !self.pdf_uri.is_empty() {
4217            len += 1;
4218        }
4219        let mut struct_ser = serializer
4220            .serialize_struct("origincloud.billing.v1beta1.LegalDocumentVersion", len)?;
4221        if !self.name.is_empty() {
4222            struct_ser.serialize_field("name", &self.name)?;
4223        }
4224        if !self.display_name.is_empty() {
4225            struct_ser.serialize_field("displayName", &self.display_name)?;
4226        }
4227        if let Some(v) = self.effective_date.as_ref() {
4228            struct_ser.serialize_field("effectiveDate", v)?;
4229        }
4230        if self.change_class != 0 {
4231            let v = legal_document_version::ChangeClass::try_from(self.change_class)
4232                .map_err(|_| serde::ser::Error::custom(
4233                    format!("Invalid variant {}", self.change_class),
4234                ))?;
4235            struct_ser.serialize_field("changeClass", &v)?;
4236        }
4237        if !self.change_summary.is_empty() {
4238            struct_ser.serialize_field("changeSummary", &self.change_summary)?;
4239        }
4240        if !self.sha256.is_empty() {
4241            struct_ser.serialize_field("sha256", &self.sha256)?;
4242        }
4243        if !self.markdown.is_empty() {
4244            struct_ser.serialize_field("markdown", &self.markdown)?;
4245        }
4246        if !self.html.is_empty() {
4247            struct_ser.serialize_field("html", &self.html)?;
4248        }
4249        if !self.uri.is_empty() {
4250            struct_ser.serialize_field("uri", &self.uri)?;
4251        }
4252        if !self.pdf_uri.is_empty() {
4253            struct_ser.serialize_field("pdfUri", &self.pdf_uri)?;
4254        }
4255        struct_ser.end()
4256    }
4257}
4258impl<'de> serde::Deserialize<'de> for LegalDocumentVersion {
4259    #[allow(deprecated)]
4260    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4261    where
4262        D: serde::Deserializer<'de>,
4263    {
4264        const FIELDS: &[&str] = &[
4265            "name",
4266            "display_name",
4267            "displayName",
4268            "effective_date",
4269            "effectiveDate",
4270            "change_class",
4271            "changeClass",
4272            "change_summary",
4273            "changeSummary",
4274            "sha256",
4275            "markdown",
4276            "html",
4277            "uri",
4278            "pdf_uri",
4279            "pdfUri",
4280        ];
4281        #[allow(clippy::enum_variant_names)]
4282        enum GeneratedField {
4283            Name,
4284            DisplayName,
4285            EffectiveDate,
4286            ChangeClass,
4287            ChangeSummary,
4288            Sha256,
4289            Markdown,
4290            Html,
4291            Uri,
4292            PdfUri,
4293            __SkipField__,
4294        }
4295        impl<'de> serde::Deserialize<'de> for GeneratedField {
4296            fn deserialize<D>(
4297                deserializer: D,
4298            ) -> std::result::Result<GeneratedField, D::Error>
4299            where
4300                D: serde::Deserializer<'de>,
4301            {
4302                struct GeneratedVisitor;
4303                impl serde::de::Visitor<'_> for GeneratedVisitor {
4304                    type Value = GeneratedField;
4305                    fn expecting(
4306                        &self,
4307                        formatter: &mut std::fmt::Formatter<'_>,
4308                    ) -> std::fmt::Result {
4309                        write!(formatter, "expected one of: {:?}", & FIELDS)
4310                    }
4311                    #[allow(unused_variables)]
4312                    fn visit_str<E>(
4313                        self,
4314                        value: &str,
4315                    ) -> std::result::Result<GeneratedField, E>
4316                    where
4317                        E: serde::de::Error,
4318                    {
4319                        match value {
4320                            "name" => Ok(GeneratedField::Name),
4321                            "displayName" | "display_name" => {
4322                                Ok(GeneratedField::DisplayName)
4323                            }
4324                            "effectiveDate" | "effective_date" => {
4325                                Ok(GeneratedField::EffectiveDate)
4326                            }
4327                            "changeClass" | "change_class" => {
4328                                Ok(GeneratedField::ChangeClass)
4329                            }
4330                            "changeSummary" | "change_summary" => {
4331                                Ok(GeneratedField::ChangeSummary)
4332                            }
4333                            "sha256" => Ok(GeneratedField::Sha256),
4334                            "markdown" => Ok(GeneratedField::Markdown),
4335                            "html" => Ok(GeneratedField::Html),
4336                            "uri" => Ok(GeneratedField::Uri),
4337                            "pdfUri" | "pdf_uri" => Ok(GeneratedField::PdfUri),
4338                            _ => Ok(GeneratedField::__SkipField__),
4339                        }
4340                    }
4341                }
4342                deserializer.deserialize_identifier(GeneratedVisitor)
4343            }
4344        }
4345        struct GeneratedVisitor;
4346        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
4347            type Value = LegalDocumentVersion;
4348            fn expecting(
4349                &self,
4350                formatter: &mut std::fmt::Formatter<'_>,
4351            ) -> std::fmt::Result {
4352                formatter
4353                    .write_str("struct origincloud.billing.v1beta1.LegalDocumentVersion")
4354            }
4355            fn visit_map<V>(
4356                self,
4357                mut map_: V,
4358            ) -> std::result::Result<LegalDocumentVersion, V::Error>
4359            where
4360                V: serde::de::MapAccess<'de>,
4361            {
4362                let mut name__ = None;
4363                let mut display_name__ = None;
4364                let mut effective_date__ = None;
4365                let mut change_class__ = None;
4366                let mut change_summary__ = None;
4367                let mut sha256__ = None;
4368                let mut markdown__ = None;
4369                let mut html__ = None;
4370                let mut uri__ = None;
4371                let mut pdf_uri__ = None;
4372                while let Some(k) = map_.next_key()? {
4373                    match k {
4374                        GeneratedField::Name => {
4375                            if name__.is_some() {
4376                                return Err(serde::de::Error::duplicate_field("name"));
4377                            }
4378                            name__ = Some(map_.next_value()?);
4379                        }
4380                        GeneratedField::DisplayName => {
4381                            if display_name__.is_some() {
4382                                return Err(
4383                                    serde::de::Error::duplicate_field("displayName"),
4384                                );
4385                            }
4386                            display_name__ = Some(map_.next_value()?);
4387                        }
4388                        GeneratedField::EffectiveDate => {
4389                            if effective_date__.is_some() {
4390                                return Err(
4391                                    serde::de::Error::duplicate_field("effectiveDate"),
4392                                );
4393                            }
4394                            effective_date__ = map_.next_value()?;
4395                        }
4396                        GeneratedField::ChangeClass => {
4397                            if change_class__.is_some() {
4398                                return Err(
4399                                    serde::de::Error::duplicate_field("changeClass"),
4400                                );
4401                            }
4402                            change_class__ = Some(
4403                                map_.next_value::<legal_document_version::ChangeClass>()?
4404                                    as i32,
4405                            );
4406                        }
4407                        GeneratedField::ChangeSummary => {
4408                            if change_summary__.is_some() {
4409                                return Err(
4410                                    serde::de::Error::duplicate_field("changeSummary"),
4411                                );
4412                            }
4413                            change_summary__ = Some(map_.next_value()?);
4414                        }
4415                        GeneratedField::Sha256 => {
4416                            if sha256__.is_some() {
4417                                return Err(serde::de::Error::duplicate_field("sha256"));
4418                            }
4419                            sha256__ = Some(map_.next_value()?);
4420                        }
4421                        GeneratedField::Markdown => {
4422                            if markdown__.is_some() {
4423                                return Err(serde::de::Error::duplicate_field("markdown"));
4424                            }
4425                            markdown__ = Some(map_.next_value()?);
4426                        }
4427                        GeneratedField::Html => {
4428                            if html__.is_some() {
4429                                return Err(serde::de::Error::duplicate_field("html"));
4430                            }
4431                            html__ = Some(map_.next_value()?);
4432                        }
4433                        GeneratedField::Uri => {
4434                            if uri__.is_some() {
4435                                return Err(serde::de::Error::duplicate_field("uri"));
4436                            }
4437                            uri__ = Some(map_.next_value()?);
4438                        }
4439                        GeneratedField::PdfUri => {
4440                            if pdf_uri__.is_some() {
4441                                return Err(serde::de::Error::duplicate_field("pdfUri"));
4442                            }
4443                            pdf_uri__ = Some(map_.next_value()?);
4444                        }
4445                        GeneratedField::__SkipField__ => {
4446                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
4447                        }
4448                    }
4449                }
4450                Ok(LegalDocumentVersion {
4451                    name: name__.unwrap_or_default(),
4452                    display_name: display_name__.unwrap_or_default(),
4453                    effective_date: effective_date__,
4454                    change_class: change_class__.unwrap_or_default(),
4455                    change_summary: change_summary__.unwrap_or_default(),
4456                    sha256: sha256__.unwrap_or_default(),
4457                    markdown: markdown__.unwrap_or_default(),
4458                    html: html__.unwrap_or_default(),
4459                    uri: uri__.unwrap_or_default(),
4460                    pdf_uri: pdf_uri__.unwrap_or_default(),
4461                })
4462            }
4463        }
4464        deserializer
4465            .deserialize_struct(
4466                "origincloud.billing.v1beta1.LegalDocumentVersion",
4467                FIELDS,
4468                GeneratedVisitor,
4469            )
4470    }
4471}
4472impl serde::Serialize for legal_document_version::ChangeClass {
4473    #[allow(deprecated)]
4474    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4475    where
4476        S: serde::Serializer,
4477    {
4478        let variant = match self {
4479            Self::Unspecified => "CHANGE_CLASS_UNSPECIFIED",
4480            Self::Material => "MATERIAL",
4481            Self::Notice => "NOTICE",
4482            Self::Editorial => "EDITORIAL",
4483        };
4484        serializer.serialize_str(variant)
4485    }
4486}
4487impl<'de> serde::Deserialize<'de> for legal_document_version::ChangeClass {
4488    #[allow(deprecated)]
4489    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4490    where
4491        D: serde::Deserializer<'de>,
4492    {
4493        const FIELDS: &[&str] = &[
4494            "CHANGE_CLASS_UNSPECIFIED",
4495            "MATERIAL",
4496            "NOTICE",
4497            "EDITORIAL",
4498        ];
4499        struct GeneratedVisitor;
4500        impl serde::de::Visitor<'_> for GeneratedVisitor {
4501            type Value = legal_document_version::ChangeClass;
4502            fn expecting(
4503                &self,
4504                formatter: &mut std::fmt::Formatter<'_>,
4505            ) -> std::fmt::Result {
4506                write!(formatter, "expected one of: {:?}", & FIELDS)
4507            }
4508            fn visit_i64<E>(self, v: i64) -> std::result::Result<Self::Value, E>
4509            where
4510                E: serde::de::Error,
4511            {
4512                i32::try_from(v)
4513                    .ok()
4514                    .and_then(|x| {
4515                        x
4516                            .try_into()
4517                            .ok()
4518                            .or_else(|| Some(
4519                                legal_document_version::ChangeClass::default(),
4520                            ))
4521                    })
4522                    .ok_or_else(|| {
4523                        serde::de::Error::invalid_value(
4524                            serde::de::Unexpected::Signed(v),
4525                            &self,
4526                        )
4527                    })
4528            }
4529            fn visit_u64<E>(self, v: u64) -> std::result::Result<Self::Value, E>
4530            where
4531                E: serde::de::Error,
4532            {
4533                i32::try_from(v)
4534                    .ok()
4535                    .and_then(|x| {
4536                        x
4537                            .try_into()
4538                            .ok()
4539                            .or_else(|| Some(
4540                                legal_document_version::ChangeClass::default(),
4541                            ))
4542                    })
4543                    .ok_or_else(|| {
4544                        serde::de::Error::invalid_value(
4545                            serde::de::Unexpected::Unsigned(v),
4546                            &self,
4547                        )
4548                    })
4549            }
4550            fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
4551            where
4552                E: serde::de::Error,
4553            {
4554                match value {
4555                    "CHANGE_CLASS_UNSPECIFIED" => {
4556                        Ok(legal_document_version::ChangeClass::Unspecified)
4557                    }
4558                    "MATERIAL" => Ok(legal_document_version::ChangeClass::Material),
4559                    "NOTICE" => Ok(legal_document_version::ChangeClass::Notice),
4560                    "EDITORIAL" => Ok(legal_document_version::ChangeClass::Editorial),
4561                    _ => Ok(legal_document_version::ChangeClass::default()),
4562                }
4563            }
4564        }
4565        deserializer.deserialize_any(GeneratedVisitor)
4566    }
4567}
4568impl serde::Serialize for LegalDocumentVersionToAccept {
4569    #[allow(deprecated)]
4570    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4571    where
4572        S: serde::Serializer,
4573    {
4574        use serde::ser::SerializeStruct;
4575        let mut len = 0;
4576        if !self.legal_document_version.is_empty() {
4577            len += 1;
4578        }
4579        if !self.sha256.is_empty() {
4580            len += 1;
4581        }
4582        let mut struct_ser = serializer
4583            .serialize_struct(
4584                "origincloud.billing.v1beta1.LegalDocumentVersionToAccept",
4585                len,
4586            )?;
4587        if !self.legal_document_version.is_empty() {
4588            struct_ser
4589                .serialize_field("legalDocumentVersion", &self.legal_document_version)?;
4590        }
4591        if !self.sha256.is_empty() {
4592            struct_ser.serialize_field("sha256", &self.sha256)?;
4593        }
4594        struct_ser.end()
4595    }
4596}
4597impl<'de> serde::Deserialize<'de> for LegalDocumentVersionToAccept {
4598    #[allow(deprecated)]
4599    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4600    where
4601        D: serde::Deserializer<'de>,
4602    {
4603        const FIELDS: &[&str] = &[
4604            "legal_document_version",
4605            "legalDocumentVersion",
4606            "sha256",
4607        ];
4608        #[allow(clippy::enum_variant_names)]
4609        enum GeneratedField {
4610            LegalDocumentVersion,
4611            Sha256,
4612            __SkipField__,
4613        }
4614        impl<'de> serde::Deserialize<'de> for GeneratedField {
4615            fn deserialize<D>(
4616                deserializer: D,
4617            ) -> std::result::Result<GeneratedField, D::Error>
4618            where
4619                D: serde::Deserializer<'de>,
4620            {
4621                struct GeneratedVisitor;
4622                impl serde::de::Visitor<'_> for GeneratedVisitor {
4623                    type Value = GeneratedField;
4624                    fn expecting(
4625                        &self,
4626                        formatter: &mut std::fmt::Formatter<'_>,
4627                    ) -> std::fmt::Result {
4628                        write!(formatter, "expected one of: {:?}", & FIELDS)
4629                    }
4630                    #[allow(unused_variables)]
4631                    fn visit_str<E>(
4632                        self,
4633                        value: &str,
4634                    ) -> std::result::Result<GeneratedField, E>
4635                    where
4636                        E: serde::de::Error,
4637                    {
4638                        match value {
4639                            "legalDocumentVersion" | "legal_document_version" => {
4640                                Ok(GeneratedField::LegalDocumentVersion)
4641                            }
4642                            "sha256" => Ok(GeneratedField::Sha256),
4643                            _ => Ok(GeneratedField::__SkipField__),
4644                        }
4645                    }
4646                }
4647                deserializer.deserialize_identifier(GeneratedVisitor)
4648            }
4649        }
4650        struct GeneratedVisitor;
4651        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
4652            type Value = LegalDocumentVersionToAccept;
4653            fn expecting(
4654                &self,
4655                formatter: &mut std::fmt::Formatter<'_>,
4656            ) -> std::fmt::Result {
4657                formatter
4658                    .write_str(
4659                        "struct origincloud.billing.v1beta1.LegalDocumentVersionToAccept",
4660                    )
4661            }
4662            fn visit_map<V>(
4663                self,
4664                mut map_: V,
4665            ) -> std::result::Result<LegalDocumentVersionToAccept, V::Error>
4666            where
4667                V: serde::de::MapAccess<'de>,
4668            {
4669                let mut legal_document_version__ = None;
4670                let mut sha256__ = None;
4671                while let Some(k) = map_.next_key()? {
4672                    match k {
4673                        GeneratedField::LegalDocumentVersion => {
4674                            if legal_document_version__.is_some() {
4675                                return Err(
4676                                    serde::de::Error::duplicate_field("legalDocumentVersion"),
4677                                );
4678                            }
4679                            legal_document_version__ = Some(map_.next_value()?);
4680                        }
4681                        GeneratedField::Sha256 => {
4682                            if sha256__.is_some() {
4683                                return Err(serde::de::Error::duplicate_field("sha256"));
4684                            }
4685                            sha256__ = Some(map_.next_value()?);
4686                        }
4687                        GeneratedField::__SkipField__ => {
4688                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
4689                        }
4690                    }
4691                }
4692                Ok(LegalDocumentVersionToAccept {
4693                    legal_document_version: legal_document_version__.unwrap_or_default(),
4694                    sha256: sha256__.unwrap_or_default(),
4695                })
4696            }
4697        }
4698        deserializer
4699            .deserialize_struct(
4700                "origincloud.billing.v1beta1.LegalDocumentVersionToAccept",
4701                FIELDS,
4702                GeneratedVisitor,
4703            )
4704    }
4705}
4706impl serde::Serialize for LegalRequirement {
4707    #[allow(deprecated)]
4708    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4709    where
4710        S: serde::Serializer,
4711    {
4712        use serde::ser::SerializeStruct;
4713        let mut len = 0;
4714        if !self.legal_document_version.is_empty() {
4715            len += 1;
4716        }
4717        if !self.display_name.is_empty() {
4718            len += 1;
4719        }
4720        if self.effective_date.is_some() {
4721            len += 1;
4722        }
4723        if !self.change_summary.is_empty() {
4724            len += 1;
4725        }
4726        if !self.sha256.is_empty() {
4727            len += 1;
4728        }
4729        if self.blocking {
4730            len += 1;
4731        }
4732        let mut struct_ser = serializer
4733            .serialize_struct("origincloud.billing.v1beta1.LegalRequirement", len)?;
4734        if !self.legal_document_version.is_empty() {
4735            struct_ser
4736                .serialize_field("legalDocumentVersion", &self.legal_document_version)?;
4737        }
4738        if !self.display_name.is_empty() {
4739            struct_ser.serialize_field("displayName", &self.display_name)?;
4740        }
4741        if let Some(v) = self.effective_date.as_ref() {
4742            struct_ser.serialize_field("effectiveDate", v)?;
4743        }
4744        if !self.change_summary.is_empty() {
4745            struct_ser.serialize_field("changeSummary", &self.change_summary)?;
4746        }
4747        if !self.sha256.is_empty() {
4748            struct_ser.serialize_field("sha256", &self.sha256)?;
4749        }
4750        if self.blocking {
4751            struct_ser.serialize_field("blocking", &self.blocking)?;
4752        }
4753        struct_ser.end()
4754    }
4755}
4756impl<'de> serde::Deserialize<'de> for LegalRequirement {
4757    #[allow(deprecated)]
4758    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4759    where
4760        D: serde::Deserializer<'de>,
4761    {
4762        const FIELDS: &[&str] = &[
4763            "legal_document_version",
4764            "legalDocumentVersion",
4765            "display_name",
4766            "displayName",
4767            "effective_date",
4768            "effectiveDate",
4769            "change_summary",
4770            "changeSummary",
4771            "sha256",
4772            "blocking",
4773        ];
4774        #[allow(clippy::enum_variant_names)]
4775        enum GeneratedField {
4776            LegalDocumentVersion,
4777            DisplayName,
4778            EffectiveDate,
4779            ChangeSummary,
4780            Sha256,
4781            Blocking,
4782            __SkipField__,
4783        }
4784        impl<'de> serde::Deserialize<'de> for GeneratedField {
4785            fn deserialize<D>(
4786                deserializer: D,
4787            ) -> std::result::Result<GeneratedField, D::Error>
4788            where
4789                D: serde::Deserializer<'de>,
4790            {
4791                struct GeneratedVisitor;
4792                impl serde::de::Visitor<'_> for GeneratedVisitor {
4793                    type Value = GeneratedField;
4794                    fn expecting(
4795                        &self,
4796                        formatter: &mut std::fmt::Formatter<'_>,
4797                    ) -> std::fmt::Result {
4798                        write!(formatter, "expected one of: {:?}", & FIELDS)
4799                    }
4800                    #[allow(unused_variables)]
4801                    fn visit_str<E>(
4802                        self,
4803                        value: &str,
4804                    ) -> std::result::Result<GeneratedField, E>
4805                    where
4806                        E: serde::de::Error,
4807                    {
4808                        match value {
4809                            "legalDocumentVersion" | "legal_document_version" => {
4810                                Ok(GeneratedField::LegalDocumentVersion)
4811                            }
4812                            "displayName" | "display_name" => {
4813                                Ok(GeneratedField::DisplayName)
4814                            }
4815                            "effectiveDate" | "effective_date" => {
4816                                Ok(GeneratedField::EffectiveDate)
4817                            }
4818                            "changeSummary" | "change_summary" => {
4819                                Ok(GeneratedField::ChangeSummary)
4820                            }
4821                            "sha256" => Ok(GeneratedField::Sha256),
4822                            "blocking" => Ok(GeneratedField::Blocking),
4823                            _ => Ok(GeneratedField::__SkipField__),
4824                        }
4825                    }
4826                }
4827                deserializer.deserialize_identifier(GeneratedVisitor)
4828            }
4829        }
4830        struct GeneratedVisitor;
4831        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
4832            type Value = LegalRequirement;
4833            fn expecting(
4834                &self,
4835                formatter: &mut std::fmt::Formatter<'_>,
4836            ) -> std::fmt::Result {
4837                formatter
4838                    .write_str("struct origincloud.billing.v1beta1.LegalRequirement")
4839            }
4840            fn visit_map<V>(
4841                self,
4842                mut map_: V,
4843            ) -> std::result::Result<LegalRequirement, V::Error>
4844            where
4845                V: serde::de::MapAccess<'de>,
4846            {
4847                let mut legal_document_version__ = None;
4848                let mut display_name__ = None;
4849                let mut effective_date__ = None;
4850                let mut change_summary__ = None;
4851                let mut sha256__ = None;
4852                let mut blocking__ = None;
4853                while let Some(k) = map_.next_key()? {
4854                    match k {
4855                        GeneratedField::LegalDocumentVersion => {
4856                            if legal_document_version__.is_some() {
4857                                return Err(
4858                                    serde::de::Error::duplicate_field("legalDocumentVersion"),
4859                                );
4860                            }
4861                            legal_document_version__ = Some(map_.next_value()?);
4862                        }
4863                        GeneratedField::DisplayName => {
4864                            if display_name__.is_some() {
4865                                return Err(
4866                                    serde::de::Error::duplicate_field("displayName"),
4867                                );
4868                            }
4869                            display_name__ = Some(map_.next_value()?);
4870                        }
4871                        GeneratedField::EffectiveDate => {
4872                            if effective_date__.is_some() {
4873                                return Err(
4874                                    serde::de::Error::duplicate_field("effectiveDate"),
4875                                );
4876                            }
4877                            effective_date__ = map_.next_value()?;
4878                        }
4879                        GeneratedField::ChangeSummary => {
4880                            if change_summary__.is_some() {
4881                                return Err(
4882                                    serde::de::Error::duplicate_field("changeSummary"),
4883                                );
4884                            }
4885                            change_summary__ = Some(map_.next_value()?);
4886                        }
4887                        GeneratedField::Sha256 => {
4888                            if sha256__.is_some() {
4889                                return Err(serde::de::Error::duplicate_field("sha256"));
4890                            }
4891                            sha256__ = Some(map_.next_value()?);
4892                        }
4893                        GeneratedField::Blocking => {
4894                            if blocking__.is_some() {
4895                                return Err(serde::de::Error::duplicate_field("blocking"));
4896                            }
4897                            blocking__ = Some(map_.next_value()?);
4898                        }
4899                        GeneratedField::__SkipField__ => {
4900                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
4901                        }
4902                    }
4903                }
4904                Ok(LegalRequirement {
4905                    legal_document_version: legal_document_version__.unwrap_or_default(),
4906                    display_name: display_name__.unwrap_or_default(),
4907                    effective_date: effective_date__,
4908                    change_summary: change_summary__.unwrap_or_default(),
4909                    sha256: sha256__.unwrap_or_default(),
4910                    blocking: blocking__.unwrap_or_default(),
4911                })
4912            }
4913        }
4914        deserializer
4915            .deserialize_struct(
4916                "origincloud.billing.v1beta1.LegalRequirement",
4917                FIELDS,
4918                GeneratedVisitor,
4919            )
4920    }
4921}
4922impl serde::Serialize for ListBillingAccountsRequest {
4923    #[allow(deprecated)]
4924    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4925    where
4926        S: serde::Serializer,
4927    {
4928        use serde::ser::SerializeStruct;
4929        let mut len = 0;
4930        if !self.parent.is_empty() {
4931            len += 1;
4932        }
4933        if self.page_size != 0 {
4934            len += 1;
4935        }
4936        if !self.page_token.is_empty() {
4937            len += 1;
4938        }
4939        let mut struct_ser = serializer
4940            .serialize_struct(
4941                "origincloud.billing.v1beta1.ListBillingAccountsRequest",
4942                len,
4943            )?;
4944        if !self.parent.is_empty() {
4945            struct_ser.serialize_field("parent", &self.parent)?;
4946        }
4947        if self.page_size != 0 {
4948            struct_ser.serialize_field("pageSize", &self.page_size)?;
4949        }
4950        if !self.page_token.is_empty() {
4951            struct_ser.serialize_field("pageToken", &self.page_token)?;
4952        }
4953        struct_ser.end()
4954    }
4955}
4956impl<'de> serde::Deserialize<'de> for ListBillingAccountsRequest {
4957    #[allow(deprecated)]
4958    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4959    where
4960        D: serde::Deserializer<'de>,
4961    {
4962        const FIELDS: &[&str] = &[
4963            "parent",
4964            "page_size",
4965            "pageSize",
4966            "page_token",
4967            "pageToken",
4968        ];
4969        #[allow(clippy::enum_variant_names)]
4970        enum GeneratedField {
4971            Parent,
4972            PageSize,
4973            PageToken,
4974            __SkipField__,
4975        }
4976        impl<'de> serde::Deserialize<'de> for GeneratedField {
4977            fn deserialize<D>(
4978                deserializer: D,
4979            ) -> std::result::Result<GeneratedField, D::Error>
4980            where
4981                D: serde::Deserializer<'de>,
4982            {
4983                struct GeneratedVisitor;
4984                impl serde::de::Visitor<'_> for GeneratedVisitor {
4985                    type Value = GeneratedField;
4986                    fn expecting(
4987                        &self,
4988                        formatter: &mut std::fmt::Formatter<'_>,
4989                    ) -> std::fmt::Result {
4990                        write!(formatter, "expected one of: {:?}", & FIELDS)
4991                    }
4992                    #[allow(unused_variables)]
4993                    fn visit_str<E>(
4994                        self,
4995                        value: &str,
4996                    ) -> std::result::Result<GeneratedField, E>
4997                    where
4998                        E: serde::de::Error,
4999                    {
5000                        match value {
5001                            "parent" => Ok(GeneratedField::Parent),
5002                            "pageSize" | "page_size" => Ok(GeneratedField::PageSize),
5003                            "pageToken" | "page_token" => Ok(GeneratedField::PageToken),
5004                            _ => Ok(GeneratedField::__SkipField__),
5005                        }
5006                    }
5007                }
5008                deserializer.deserialize_identifier(GeneratedVisitor)
5009            }
5010        }
5011        struct GeneratedVisitor;
5012        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
5013            type Value = ListBillingAccountsRequest;
5014            fn expecting(
5015                &self,
5016                formatter: &mut std::fmt::Formatter<'_>,
5017            ) -> std::fmt::Result {
5018                formatter
5019                    .write_str(
5020                        "struct origincloud.billing.v1beta1.ListBillingAccountsRequest",
5021                    )
5022            }
5023            fn visit_map<V>(
5024                self,
5025                mut map_: V,
5026            ) -> std::result::Result<ListBillingAccountsRequest, V::Error>
5027            where
5028                V: serde::de::MapAccess<'de>,
5029            {
5030                let mut parent__ = None;
5031                let mut page_size__ = None;
5032                let mut page_token__ = None;
5033                while let Some(k) = map_.next_key()? {
5034                    match k {
5035                        GeneratedField::Parent => {
5036                            if parent__.is_some() {
5037                                return Err(serde::de::Error::duplicate_field("parent"));
5038                            }
5039                            parent__ = Some(map_.next_value()?);
5040                        }
5041                        GeneratedField::PageSize => {
5042                            if page_size__.is_some() {
5043                                return Err(serde::de::Error::duplicate_field("pageSize"));
5044                            }
5045                            page_size__ = Some(
5046                                map_
5047                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
5048                                    .0,
5049                            );
5050                        }
5051                        GeneratedField::PageToken => {
5052                            if page_token__.is_some() {
5053                                return Err(serde::de::Error::duplicate_field("pageToken"));
5054                            }
5055                            page_token__ = Some(map_.next_value()?);
5056                        }
5057                        GeneratedField::__SkipField__ => {
5058                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
5059                        }
5060                    }
5061                }
5062                Ok(ListBillingAccountsRequest {
5063                    parent: parent__.unwrap_or_default(),
5064                    page_size: page_size__.unwrap_or_default(),
5065                    page_token: page_token__.unwrap_or_default(),
5066                })
5067            }
5068        }
5069        deserializer
5070            .deserialize_struct(
5071                "origincloud.billing.v1beta1.ListBillingAccountsRequest",
5072                FIELDS,
5073                GeneratedVisitor,
5074            )
5075    }
5076}
5077impl serde::Serialize for ListBillingAccountsResponse {
5078    #[allow(deprecated)]
5079    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5080    where
5081        S: serde::Serializer,
5082    {
5083        use serde::ser::SerializeStruct;
5084        let mut len = 0;
5085        if !self.billing_accounts.is_empty() {
5086            len += 1;
5087        }
5088        if !self.next_page_token.is_empty() {
5089            len += 1;
5090        }
5091        let mut struct_ser = serializer
5092            .serialize_struct(
5093                "origincloud.billing.v1beta1.ListBillingAccountsResponse",
5094                len,
5095            )?;
5096        if !self.billing_accounts.is_empty() {
5097            struct_ser.serialize_field("billingAccounts", &self.billing_accounts)?;
5098        }
5099        if !self.next_page_token.is_empty() {
5100            struct_ser.serialize_field("nextPageToken", &self.next_page_token)?;
5101        }
5102        struct_ser.end()
5103    }
5104}
5105impl<'de> serde::Deserialize<'de> for ListBillingAccountsResponse {
5106    #[allow(deprecated)]
5107    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5108    where
5109        D: serde::Deserializer<'de>,
5110    {
5111        const FIELDS: &[&str] = &[
5112            "billing_accounts",
5113            "billingAccounts",
5114            "next_page_token",
5115            "nextPageToken",
5116        ];
5117        #[allow(clippy::enum_variant_names)]
5118        enum GeneratedField {
5119            BillingAccounts,
5120            NextPageToken,
5121            __SkipField__,
5122        }
5123        impl<'de> serde::Deserialize<'de> for GeneratedField {
5124            fn deserialize<D>(
5125                deserializer: D,
5126            ) -> std::result::Result<GeneratedField, D::Error>
5127            where
5128                D: serde::Deserializer<'de>,
5129            {
5130                struct GeneratedVisitor;
5131                impl serde::de::Visitor<'_> for GeneratedVisitor {
5132                    type Value = GeneratedField;
5133                    fn expecting(
5134                        &self,
5135                        formatter: &mut std::fmt::Formatter<'_>,
5136                    ) -> std::fmt::Result {
5137                        write!(formatter, "expected one of: {:?}", & FIELDS)
5138                    }
5139                    #[allow(unused_variables)]
5140                    fn visit_str<E>(
5141                        self,
5142                        value: &str,
5143                    ) -> std::result::Result<GeneratedField, E>
5144                    where
5145                        E: serde::de::Error,
5146                    {
5147                        match value {
5148                            "billingAccounts" | "billing_accounts" => {
5149                                Ok(GeneratedField::BillingAccounts)
5150                            }
5151                            "nextPageToken" | "next_page_token" => {
5152                                Ok(GeneratedField::NextPageToken)
5153                            }
5154                            _ => Ok(GeneratedField::__SkipField__),
5155                        }
5156                    }
5157                }
5158                deserializer.deserialize_identifier(GeneratedVisitor)
5159            }
5160        }
5161        struct GeneratedVisitor;
5162        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
5163            type Value = ListBillingAccountsResponse;
5164            fn expecting(
5165                &self,
5166                formatter: &mut std::fmt::Formatter<'_>,
5167            ) -> std::fmt::Result {
5168                formatter
5169                    .write_str(
5170                        "struct origincloud.billing.v1beta1.ListBillingAccountsResponse",
5171                    )
5172            }
5173            fn visit_map<V>(
5174                self,
5175                mut map_: V,
5176            ) -> std::result::Result<ListBillingAccountsResponse, V::Error>
5177            where
5178                V: serde::de::MapAccess<'de>,
5179            {
5180                let mut billing_accounts__ = None;
5181                let mut next_page_token__ = None;
5182                while let Some(k) = map_.next_key()? {
5183                    match k {
5184                        GeneratedField::BillingAccounts => {
5185                            if billing_accounts__.is_some() {
5186                                return Err(
5187                                    serde::de::Error::duplicate_field("billingAccounts"),
5188                                );
5189                            }
5190                            billing_accounts__ = Some(map_.next_value()?);
5191                        }
5192                        GeneratedField::NextPageToken => {
5193                            if next_page_token__.is_some() {
5194                                return Err(
5195                                    serde::de::Error::duplicate_field("nextPageToken"),
5196                                );
5197                            }
5198                            next_page_token__ = Some(map_.next_value()?);
5199                        }
5200                        GeneratedField::__SkipField__ => {
5201                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
5202                        }
5203                    }
5204                }
5205                Ok(ListBillingAccountsResponse {
5206                    billing_accounts: billing_accounts__.unwrap_or_default(),
5207                    next_page_token: next_page_token__.unwrap_or_default(),
5208                })
5209            }
5210        }
5211        deserializer
5212            .deserialize_struct(
5213                "origincloud.billing.v1beta1.ListBillingAccountsResponse",
5214                FIELDS,
5215                GeneratedVisitor,
5216            )
5217    }
5218}
5219impl serde::Serialize for ListBillingCountriesRequest {
5220    #[allow(deprecated)]
5221    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5222    where
5223        S: serde::Serializer,
5224    {
5225        use serde::ser::SerializeStruct;
5226        let mut len = 0;
5227        if self.page_size != 0 {
5228            len += 1;
5229        }
5230        if !self.page_token.is_empty() {
5231            len += 1;
5232        }
5233        let mut struct_ser = serializer
5234            .serialize_struct(
5235                "origincloud.billing.v1beta1.ListBillingCountriesRequest",
5236                len,
5237            )?;
5238        if self.page_size != 0 {
5239            struct_ser.serialize_field("pageSize", &self.page_size)?;
5240        }
5241        if !self.page_token.is_empty() {
5242            struct_ser.serialize_field("pageToken", &self.page_token)?;
5243        }
5244        struct_ser.end()
5245    }
5246}
5247impl<'de> serde::Deserialize<'de> for ListBillingCountriesRequest {
5248    #[allow(deprecated)]
5249    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5250    where
5251        D: serde::Deserializer<'de>,
5252    {
5253        const FIELDS: &[&str] = &["page_size", "pageSize", "page_token", "pageToken"];
5254        #[allow(clippy::enum_variant_names)]
5255        enum GeneratedField {
5256            PageSize,
5257            PageToken,
5258            __SkipField__,
5259        }
5260        impl<'de> serde::Deserialize<'de> for GeneratedField {
5261            fn deserialize<D>(
5262                deserializer: D,
5263            ) -> std::result::Result<GeneratedField, D::Error>
5264            where
5265                D: serde::Deserializer<'de>,
5266            {
5267                struct GeneratedVisitor;
5268                impl serde::de::Visitor<'_> for GeneratedVisitor {
5269                    type Value = GeneratedField;
5270                    fn expecting(
5271                        &self,
5272                        formatter: &mut std::fmt::Formatter<'_>,
5273                    ) -> std::fmt::Result {
5274                        write!(formatter, "expected one of: {:?}", & FIELDS)
5275                    }
5276                    #[allow(unused_variables)]
5277                    fn visit_str<E>(
5278                        self,
5279                        value: &str,
5280                    ) -> std::result::Result<GeneratedField, E>
5281                    where
5282                        E: serde::de::Error,
5283                    {
5284                        match value {
5285                            "pageSize" | "page_size" => Ok(GeneratedField::PageSize),
5286                            "pageToken" | "page_token" => Ok(GeneratedField::PageToken),
5287                            _ => Ok(GeneratedField::__SkipField__),
5288                        }
5289                    }
5290                }
5291                deserializer.deserialize_identifier(GeneratedVisitor)
5292            }
5293        }
5294        struct GeneratedVisitor;
5295        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
5296            type Value = ListBillingCountriesRequest;
5297            fn expecting(
5298                &self,
5299                formatter: &mut std::fmt::Formatter<'_>,
5300            ) -> std::fmt::Result {
5301                formatter
5302                    .write_str(
5303                        "struct origincloud.billing.v1beta1.ListBillingCountriesRequest",
5304                    )
5305            }
5306            fn visit_map<V>(
5307                self,
5308                mut map_: V,
5309            ) -> std::result::Result<ListBillingCountriesRequest, V::Error>
5310            where
5311                V: serde::de::MapAccess<'de>,
5312            {
5313                let mut page_size__ = None;
5314                let mut page_token__ = None;
5315                while let Some(k) = map_.next_key()? {
5316                    match k {
5317                        GeneratedField::PageSize => {
5318                            if page_size__.is_some() {
5319                                return Err(serde::de::Error::duplicate_field("pageSize"));
5320                            }
5321                            page_size__ = Some(
5322                                map_
5323                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
5324                                    .0,
5325                            );
5326                        }
5327                        GeneratedField::PageToken => {
5328                            if page_token__.is_some() {
5329                                return Err(serde::de::Error::duplicate_field("pageToken"));
5330                            }
5331                            page_token__ = Some(map_.next_value()?);
5332                        }
5333                        GeneratedField::__SkipField__ => {
5334                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
5335                        }
5336                    }
5337                }
5338                Ok(ListBillingCountriesRequest {
5339                    page_size: page_size__.unwrap_or_default(),
5340                    page_token: page_token__.unwrap_or_default(),
5341                })
5342            }
5343        }
5344        deserializer
5345            .deserialize_struct(
5346                "origincloud.billing.v1beta1.ListBillingCountriesRequest",
5347                FIELDS,
5348                GeneratedVisitor,
5349            )
5350    }
5351}
5352impl serde::Serialize for ListBillingCountriesResponse {
5353    #[allow(deprecated)]
5354    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5355    where
5356        S: serde::Serializer,
5357    {
5358        use serde::ser::SerializeStruct;
5359        let mut len = 0;
5360        if !self.billing_countries.is_empty() {
5361            len += 1;
5362        }
5363        if !self.next_page_token.is_empty() {
5364            len += 1;
5365        }
5366        let mut struct_ser = serializer
5367            .serialize_struct(
5368                "origincloud.billing.v1beta1.ListBillingCountriesResponse",
5369                len,
5370            )?;
5371        if !self.billing_countries.is_empty() {
5372            struct_ser.serialize_field("billingCountries", &self.billing_countries)?;
5373        }
5374        if !self.next_page_token.is_empty() {
5375            struct_ser.serialize_field("nextPageToken", &self.next_page_token)?;
5376        }
5377        struct_ser.end()
5378    }
5379}
5380impl<'de> serde::Deserialize<'de> for ListBillingCountriesResponse {
5381    #[allow(deprecated)]
5382    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5383    where
5384        D: serde::Deserializer<'de>,
5385    {
5386        const FIELDS: &[&str] = &[
5387            "billing_countries",
5388            "billingCountries",
5389            "next_page_token",
5390            "nextPageToken",
5391        ];
5392        #[allow(clippy::enum_variant_names)]
5393        enum GeneratedField {
5394            BillingCountries,
5395            NextPageToken,
5396            __SkipField__,
5397        }
5398        impl<'de> serde::Deserialize<'de> for GeneratedField {
5399            fn deserialize<D>(
5400                deserializer: D,
5401            ) -> std::result::Result<GeneratedField, D::Error>
5402            where
5403                D: serde::Deserializer<'de>,
5404            {
5405                struct GeneratedVisitor;
5406                impl serde::de::Visitor<'_> for GeneratedVisitor {
5407                    type Value = GeneratedField;
5408                    fn expecting(
5409                        &self,
5410                        formatter: &mut std::fmt::Formatter<'_>,
5411                    ) -> std::fmt::Result {
5412                        write!(formatter, "expected one of: {:?}", & FIELDS)
5413                    }
5414                    #[allow(unused_variables)]
5415                    fn visit_str<E>(
5416                        self,
5417                        value: &str,
5418                    ) -> std::result::Result<GeneratedField, E>
5419                    where
5420                        E: serde::de::Error,
5421                    {
5422                        match value {
5423                            "billingCountries" | "billing_countries" => {
5424                                Ok(GeneratedField::BillingCountries)
5425                            }
5426                            "nextPageToken" | "next_page_token" => {
5427                                Ok(GeneratedField::NextPageToken)
5428                            }
5429                            _ => Ok(GeneratedField::__SkipField__),
5430                        }
5431                    }
5432                }
5433                deserializer.deserialize_identifier(GeneratedVisitor)
5434            }
5435        }
5436        struct GeneratedVisitor;
5437        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
5438            type Value = ListBillingCountriesResponse;
5439            fn expecting(
5440                &self,
5441                formatter: &mut std::fmt::Formatter<'_>,
5442            ) -> std::fmt::Result {
5443                formatter
5444                    .write_str(
5445                        "struct origincloud.billing.v1beta1.ListBillingCountriesResponse",
5446                    )
5447            }
5448            fn visit_map<V>(
5449                self,
5450                mut map_: V,
5451            ) -> std::result::Result<ListBillingCountriesResponse, V::Error>
5452            where
5453                V: serde::de::MapAccess<'de>,
5454            {
5455                let mut billing_countries__ = None;
5456                let mut next_page_token__ = None;
5457                while let Some(k) = map_.next_key()? {
5458                    match k {
5459                        GeneratedField::BillingCountries => {
5460                            if billing_countries__.is_some() {
5461                                return Err(
5462                                    serde::de::Error::duplicate_field("billingCountries"),
5463                                );
5464                            }
5465                            billing_countries__ = Some(map_.next_value()?);
5466                        }
5467                        GeneratedField::NextPageToken => {
5468                            if next_page_token__.is_some() {
5469                                return Err(
5470                                    serde::de::Error::duplicate_field("nextPageToken"),
5471                                );
5472                            }
5473                            next_page_token__ = Some(map_.next_value()?);
5474                        }
5475                        GeneratedField::__SkipField__ => {
5476                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
5477                        }
5478                    }
5479                }
5480                Ok(ListBillingCountriesResponse {
5481                    billing_countries: billing_countries__.unwrap_or_default(),
5482                    next_page_token: next_page_token__.unwrap_or_default(),
5483                })
5484            }
5485        }
5486        deserializer
5487            .deserialize_struct(
5488                "origincloud.billing.v1beta1.ListBillingCountriesResponse",
5489                FIELDS,
5490                GeneratedVisitor,
5491            )
5492    }
5493}
5494impl serde::Serialize for ListLegalAcceptancesRequest {
5495    #[allow(deprecated)]
5496    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5497    where
5498        S: serde::Serializer,
5499    {
5500        use serde::ser::SerializeStruct;
5501        let mut len = 0;
5502        if !self.parent.is_empty() {
5503            len += 1;
5504        }
5505        if self.page_size != 0 {
5506            len += 1;
5507        }
5508        if !self.page_token.is_empty() {
5509            len += 1;
5510        }
5511        let mut struct_ser = serializer
5512            .serialize_struct(
5513                "origincloud.billing.v1beta1.ListLegalAcceptancesRequest",
5514                len,
5515            )?;
5516        if !self.parent.is_empty() {
5517            struct_ser.serialize_field("parent", &self.parent)?;
5518        }
5519        if self.page_size != 0 {
5520            struct_ser.serialize_field("pageSize", &self.page_size)?;
5521        }
5522        if !self.page_token.is_empty() {
5523            struct_ser.serialize_field("pageToken", &self.page_token)?;
5524        }
5525        struct_ser.end()
5526    }
5527}
5528impl<'de> serde::Deserialize<'de> for ListLegalAcceptancesRequest {
5529    #[allow(deprecated)]
5530    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5531    where
5532        D: serde::Deserializer<'de>,
5533    {
5534        const FIELDS: &[&str] = &[
5535            "parent",
5536            "page_size",
5537            "pageSize",
5538            "page_token",
5539            "pageToken",
5540        ];
5541        #[allow(clippy::enum_variant_names)]
5542        enum GeneratedField {
5543            Parent,
5544            PageSize,
5545            PageToken,
5546            __SkipField__,
5547        }
5548        impl<'de> serde::Deserialize<'de> for GeneratedField {
5549            fn deserialize<D>(
5550                deserializer: D,
5551            ) -> std::result::Result<GeneratedField, D::Error>
5552            where
5553                D: serde::Deserializer<'de>,
5554            {
5555                struct GeneratedVisitor;
5556                impl serde::de::Visitor<'_> for GeneratedVisitor {
5557                    type Value = GeneratedField;
5558                    fn expecting(
5559                        &self,
5560                        formatter: &mut std::fmt::Formatter<'_>,
5561                    ) -> std::fmt::Result {
5562                        write!(formatter, "expected one of: {:?}", & FIELDS)
5563                    }
5564                    #[allow(unused_variables)]
5565                    fn visit_str<E>(
5566                        self,
5567                        value: &str,
5568                    ) -> std::result::Result<GeneratedField, E>
5569                    where
5570                        E: serde::de::Error,
5571                    {
5572                        match value {
5573                            "parent" => Ok(GeneratedField::Parent),
5574                            "pageSize" | "page_size" => Ok(GeneratedField::PageSize),
5575                            "pageToken" | "page_token" => Ok(GeneratedField::PageToken),
5576                            _ => Ok(GeneratedField::__SkipField__),
5577                        }
5578                    }
5579                }
5580                deserializer.deserialize_identifier(GeneratedVisitor)
5581            }
5582        }
5583        struct GeneratedVisitor;
5584        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
5585            type Value = ListLegalAcceptancesRequest;
5586            fn expecting(
5587                &self,
5588                formatter: &mut std::fmt::Formatter<'_>,
5589            ) -> std::fmt::Result {
5590                formatter
5591                    .write_str(
5592                        "struct origincloud.billing.v1beta1.ListLegalAcceptancesRequest",
5593                    )
5594            }
5595            fn visit_map<V>(
5596                self,
5597                mut map_: V,
5598            ) -> std::result::Result<ListLegalAcceptancesRequest, V::Error>
5599            where
5600                V: serde::de::MapAccess<'de>,
5601            {
5602                let mut parent__ = None;
5603                let mut page_size__ = None;
5604                let mut page_token__ = None;
5605                while let Some(k) = map_.next_key()? {
5606                    match k {
5607                        GeneratedField::Parent => {
5608                            if parent__.is_some() {
5609                                return Err(serde::de::Error::duplicate_field("parent"));
5610                            }
5611                            parent__ = Some(map_.next_value()?);
5612                        }
5613                        GeneratedField::PageSize => {
5614                            if page_size__.is_some() {
5615                                return Err(serde::de::Error::duplicate_field("pageSize"));
5616                            }
5617                            page_size__ = Some(
5618                                map_
5619                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
5620                                    .0,
5621                            );
5622                        }
5623                        GeneratedField::PageToken => {
5624                            if page_token__.is_some() {
5625                                return Err(serde::de::Error::duplicate_field("pageToken"));
5626                            }
5627                            page_token__ = Some(map_.next_value()?);
5628                        }
5629                        GeneratedField::__SkipField__ => {
5630                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
5631                        }
5632                    }
5633                }
5634                Ok(ListLegalAcceptancesRequest {
5635                    parent: parent__.unwrap_or_default(),
5636                    page_size: page_size__.unwrap_or_default(),
5637                    page_token: page_token__.unwrap_or_default(),
5638                })
5639            }
5640        }
5641        deserializer
5642            .deserialize_struct(
5643                "origincloud.billing.v1beta1.ListLegalAcceptancesRequest",
5644                FIELDS,
5645                GeneratedVisitor,
5646            )
5647    }
5648}
5649impl serde::Serialize for ListLegalAcceptancesResponse {
5650    #[allow(deprecated)]
5651    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5652    where
5653        S: serde::Serializer,
5654    {
5655        use serde::ser::SerializeStruct;
5656        let mut len = 0;
5657        if !self.legal_acceptances.is_empty() {
5658            len += 1;
5659        }
5660        if !self.next_page_token.is_empty() {
5661            len += 1;
5662        }
5663        let mut struct_ser = serializer
5664            .serialize_struct(
5665                "origincloud.billing.v1beta1.ListLegalAcceptancesResponse",
5666                len,
5667            )?;
5668        if !self.legal_acceptances.is_empty() {
5669            struct_ser.serialize_field("legalAcceptances", &self.legal_acceptances)?;
5670        }
5671        if !self.next_page_token.is_empty() {
5672            struct_ser.serialize_field("nextPageToken", &self.next_page_token)?;
5673        }
5674        struct_ser.end()
5675    }
5676}
5677impl<'de> serde::Deserialize<'de> for ListLegalAcceptancesResponse {
5678    #[allow(deprecated)]
5679    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5680    where
5681        D: serde::Deserializer<'de>,
5682    {
5683        const FIELDS: &[&str] = &[
5684            "legal_acceptances",
5685            "legalAcceptances",
5686            "next_page_token",
5687            "nextPageToken",
5688        ];
5689        #[allow(clippy::enum_variant_names)]
5690        enum GeneratedField {
5691            LegalAcceptances,
5692            NextPageToken,
5693            __SkipField__,
5694        }
5695        impl<'de> serde::Deserialize<'de> for GeneratedField {
5696            fn deserialize<D>(
5697                deserializer: D,
5698            ) -> std::result::Result<GeneratedField, D::Error>
5699            where
5700                D: serde::Deserializer<'de>,
5701            {
5702                struct GeneratedVisitor;
5703                impl serde::de::Visitor<'_> for GeneratedVisitor {
5704                    type Value = GeneratedField;
5705                    fn expecting(
5706                        &self,
5707                        formatter: &mut std::fmt::Formatter<'_>,
5708                    ) -> std::fmt::Result {
5709                        write!(formatter, "expected one of: {:?}", & FIELDS)
5710                    }
5711                    #[allow(unused_variables)]
5712                    fn visit_str<E>(
5713                        self,
5714                        value: &str,
5715                    ) -> std::result::Result<GeneratedField, E>
5716                    where
5717                        E: serde::de::Error,
5718                    {
5719                        match value {
5720                            "legalAcceptances" | "legal_acceptances" => {
5721                                Ok(GeneratedField::LegalAcceptances)
5722                            }
5723                            "nextPageToken" | "next_page_token" => {
5724                                Ok(GeneratedField::NextPageToken)
5725                            }
5726                            _ => Ok(GeneratedField::__SkipField__),
5727                        }
5728                    }
5729                }
5730                deserializer.deserialize_identifier(GeneratedVisitor)
5731            }
5732        }
5733        struct GeneratedVisitor;
5734        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
5735            type Value = ListLegalAcceptancesResponse;
5736            fn expecting(
5737                &self,
5738                formatter: &mut std::fmt::Formatter<'_>,
5739            ) -> std::fmt::Result {
5740                formatter
5741                    .write_str(
5742                        "struct origincloud.billing.v1beta1.ListLegalAcceptancesResponse",
5743                    )
5744            }
5745            fn visit_map<V>(
5746                self,
5747                mut map_: V,
5748            ) -> std::result::Result<ListLegalAcceptancesResponse, V::Error>
5749            where
5750                V: serde::de::MapAccess<'de>,
5751            {
5752                let mut legal_acceptances__ = None;
5753                let mut next_page_token__ = None;
5754                while let Some(k) = map_.next_key()? {
5755                    match k {
5756                        GeneratedField::LegalAcceptances => {
5757                            if legal_acceptances__.is_some() {
5758                                return Err(
5759                                    serde::de::Error::duplicate_field("legalAcceptances"),
5760                                );
5761                            }
5762                            legal_acceptances__ = Some(map_.next_value()?);
5763                        }
5764                        GeneratedField::NextPageToken => {
5765                            if next_page_token__.is_some() {
5766                                return Err(
5767                                    serde::de::Error::duplicate_field("nextPageToken"),
5768                                );
5769                            }
5770                            next_page_token__ = Some(map_.next_value()?);
5771                        }
5772                        GeneratedField::__SkipField__ => {
5773                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
5774                        }
5775                    }
5776                }
5777                Ok(ListLegalAcceptancesResponse {
5778                    legal_acceptances: legal_acceptances__.unwrap_or_default(),
5779                    next_page_token: next_page_token__.unwrap_or_default(),
5780                })
5781            }
5782        }
5783        deserializer
5784            .deserialize_struct(
5785                "origincloud.billing.v1beta1.ListLegalAcceptancesResponse",
5786                FIELDS,
5787                GeneratedVisitor,
5788            )
5789    }
5790}
5791impl serde::Serialize for ListLegalDocumentVersionsRequest {
5792    #[allow(deprecated)]
5793    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5794    where
5795        S: serde::Serializer,
5796    {
5797        use serde::ser::SerializeStruct;
5798        let mut len = 0;
5799        if !self.parent.is_empty() {
5800            len += 1;
5801        }
5802        if self.page_size != 0 {
5803            len += 1;
5804        }
5805        if !self.page_token.is_empty() {
5806            len += 1;
5807        }
5808        let mut struct_ser = serializer
5809            .serialize_struct(
5810                "origincloud.billing.v1beta1.ListLegalDocumentVersionsRequest",
5811                len,
5812            )?;
5813        if !self.parent.is_empty() {
5814            struct_ser.serialize_field("parent", &self.parent)?;
5815        }
5816        if self.page_size != 0 {
5817            struct_ser.serialize_field("pageSize", &self.page_size)?;
5818        }
5819        if !self.page_token.is_empty() {
5820            struct_ser.serialize_field("pageToken", &self.page_token)?;
5821        }
5822        struct_ser.end()
5823    }
5824}
5825impl<'de> serde::Deserialize<'de> for ListLegalDocumentVersionsRequest {
5826    #[allow(deprecated)]
5827    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5828    where
5829        D: serde::Deserializer<'de>,
5830    {
5831        const FIELDS: &[&str] = &[
5832            "parent",
5833            "page_size",
5834            "pageSize",
5835            "page_token",
5836            "pageToken",
5837        ];
5838        #[allow(clippy::enum_variant_names)]
5839        enum GeneratedField {
5840            Parent,
5841            PageSize,
5842            PageToken,
5843            __SkipField__,
5844        }
5845        impl<'de> serde::Deserialize<'de> for GeneratedField {
5846            fn deserialize<D>(
5847                deserializer: D,
5848            ) -> std::result::Result<GeneratedField, D::Error>
5849            where
5850                D: serde::Deserializer<'de>,
5851            {
5852                struct GeneratedVisitor;
5853                impl serde::de::Visitor<'_> for GeneratedVisitor {
5854                    type Value = GeneratedField;
5855                    fn expecting(
5856                        &self,
5857                        formatter: &mut std::fmt::Formatter<'_>,
5858                    ) -> std::fmt::Result {
5859                        write!(formatter, "expected one of: {:?}", & FIELDS)
5860                    }
5861                    #[allow(unused_variables)]
5862                    fn visit_str<E>(
5863                        self,
5864                        value: &str,
5865                    ) -> std::result::Result<GeneratedField, E>
5866                    where
5867                        E: serde::de::Error,
5868                    {
5869                        match value {
5870                            "parent" => Ok(GeneratedField::Parent),
5871                            "pageSize" | "page_size" => Ok(GeneratedField::PageSize),
5872                            "pageToken" | "page_token" => Ok(GeneratedField::PageToken),
5873                            _ => Ok(GeneratedField::__SkipField__),
5874                        }
5875                    }
5876                }
5877                deserializer.deserialize_identifier(GeneratedVisitor)
5878            }
5879        }
5880        struct GeneratedVisitor;
5881        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
5882            type Value = ListLegalDocumentVersionsRequest;
5883            fn expecting(
5884                &self,
5885                formatter: &mut std::fmt::Formatter<'_>,
5886            ) -> std::fmt::Result {
5887                formatter
5888                    .write_str(
5889                        "struct origincloud.billing.v1beta1.ListLegalDocumentVersionsRequest",
5890                    )
5891            }
5892            fn visit_map<V>(
5893                self,
5894                mut map_: V,
5895            ) -> std::result::Result<ListLegalDocumentVersionsRequest, V::Error>
5896            where
5897                V: serde::de::MapAccess<'de>,
5898            {
5899                let mut parent__ = None;
5900                let mut page_size__ = None;
5901                let mut page_token__ = None;
5902                while let Some(k) = map_.next_key()? {
5903                    match k {
5904                        GeneratedField::Parent => {
5905                            if parent__.is_some() {
5906                                return Err(serde::de::Error::duplicate_field("parent"));
5907                            }
5908                            parent__ = Some(map_.next_value()?);
5909                        }
5910                        GeneratedField::PageSize => {
5911                            if page_size__.is_some() {
5912                                return Err(serde::de::Error::duplicate_field("pageSize"));
5913                            }
5914                            page_size__ = Some(
5915                                map_
5916                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
5917                                    .0,
5918                            );
5919                        }
5920                        GeneratedField::PageToken => {
5921                            if page_token__.is_some() {
5922                                return Err(serde::de::Error::duplicate_field("pageToken"));
5923                            }
5924                            page_token__ = Some(map_.next_value()?);
5925                        }
5926                        GeneratedField::__SkipField__ => {
5927                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
5928                        }
5929                    }
5930                }
5931                Ok(ListLegalDocumentVersionsRequest {
5932                    parent: parent__.unwrap_or_default(),
5933                    page_size: page_size__.unwrap_or_default(),
5934                    page_token: page_token__.unwrap_or_default(),
5935                })
5936            }
5937        }
5938        deserializer
5939            .deserialize_struct(
5940                "origincloud.billing.v1beta1.ListLegalDocumentVersionsRequest",
5941                FIELDS,
5942                GeneratedVisitor,
5943            )
5944    }
5945}
5946impl serde::Serialize for ListLegalDocumentVersionsResponse {
5947    #[allow(deprecated)]
5948    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5949    where
5950        S: serde::Serializer,
5951    {
5952        use serde::ser::SerializeStruct;
5953        let mut len = 0;
5954        if !self.legal_document_versions.is_empty() {
5955            len += 1;
5956        }
5957        if !self.next_page_token.is_empty() {
5958            len += 1;
5959        }
5960        let mut struct_ser = serializer
5961            .serialize_struct(
5962                "origincloud.billing.v1beta1.ListLegalDocumentVersionsResponse",
5963                len,
5964            )?;
5965        if !self.legal_document_versions.is_empty() {
5966            struct_ser
5967                .serialize_field(
5968                    "legalDocumentVersions",
5969                    &self.legal_document_versions,
5970                )?;
5971        }
5972        if !self.next_page_token.is_empty() {
5973            struct_ser.serialize_field("nextPageToken", &self.next_page_token)?;
5974        }
5975        struct_ser.end()
5976    }
5977}
5978impl<'de> serde::Deserialize<'de> for ListLegalDocumentVersionsResponse {
5979    #[allow(deprecated)]
5980    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5981    where
5982        D: serde::Deserializer<'de>,
5983    {
5984        const FIELDS: &[&str] = &[
5985            "legal_document_versions",
5986            "legalDocumentVersions",
5987            "next_page_token",
5988            "nextPageToken",
5989        ];
5990        #[allow(clippy::enum_variant_names)]
5991        enum GeneratedField {
5992            LegalDocumentVersions,
5993            NextPageToken,
5994            __SkipField__,
5995        }
5996        impl<'de> serde::Deserialize<'de> for GeneratedField {
5997            fn deserialize<D>(
5998                deserializer: D,
5999            ) -> std::result::Result<GeneratedField, D::Error>
6000            where
6001                D: serde::Deserializer<'de>,
6002            {
6003                struct GeneratedVisitor;
6004                impl serde::de::Visitor<'_> for GeneratedVisitor {
6005                    type Value = GeneratedField;
6006                    fn expecting(
6007                        &self,
6008                        formatter: &mut std::fmt::Formatter<'_>,
6009                    ) -> std::fmt::Result {
6010                        write!(formatter, "expected one of: {:?}", & FIELDS)
6011                    }
6012                    #[allow(unused_variables)]
6013                    fn visit_str<E>(
6014                        self,
6015                        value: &str,
6016                    ) -> std::result::Result<GeneratedField, E>
6017                    where
6018                        E: serde::de::Error,
6019                    {
6020                        match value {
6021                            "legalDocumentVersions" | "legal_document_versions" => {
6022                                Ok(GeneratedField::LegalDocumentVersions)
6023                            }
6024                            "nextPageToken" | "next_page_token" => {
6025                                Ok(GeneratedField::NextPageToken)
6026                            }
6027                            _ => Ok(GeneratedField::__SkipField__),
6028                        }
6029                    }
6030                }
6031                deserializer.deserialize_identifier(GeneratedVisitor)
6032            }
6033        }
6034        struct GeneratedVisitor;
6035        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
6036            type Value = ListLegalDocumentVersionsResponse;
6037            fn expecting(
6038                &self,
6039                formatter: &mut std::fmt::Formatter<'_>,
6040            ) -> std::fmt::Result {
6041                formatter
6042                    .write_str(
6043                        "struct origincloud.billing.v1beta1.ListLegalDocumentVersionsResponse",
6044                    )
6045            }
6046            fn visit_map<V>(
6047                self,
6048                mut map_: V,
6049            ) -> std::result::Result<ListLegalDocumentVersionsResponse, V::Error>
6050            where
6051                V: serde::de::MapAccess<'de>,
6052            {
6053                let mut legal_document_versions__ = None;
6054                let mut next_page_token__ = None;
6055                while let Some(k) = map_.next_key()? {
6056                    match k {
6057                        GeneratedField::LegalDocumentVersions => {
6058                            if legal_document_versions__.is_some() {
6059                                return Err(
6060                                    serde::de::Error::duplicate_field("legalDocumentVersions"),
6061                                );
6062                            }
6063                            legal_document_versions__ = Some(map_.next_value()?);
6064                        }
6065                        GeneratedField::NextPageToken => {
6066                            if next_page_token__.is_some() {
6067                                return Err(
6068                                    serde::de::Error::duplicate_field("nextPageToken"),
6069                                );
6070                            }
6071                            next_page_token__ = Some(map_.next_value()?);
6072                        }
6073                        GeneratedField::__SkipField__ => {
6074                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
6075                        }
6076                    }
6077                }
6078                Ok(ListLegalDocumentVersionsResponse {
6079                    legal_document_versions: legal_document_versions__
6080                        .unwrap_or_default(),
6081                    next_page_token: next_page_token__.unwrap_or_default(),
6082                })
6083            }
6084        }
6085        deserializer
6086            .deserialize_struct(
6087                "origincloud.billing.v1beta1.ListLegalDocumentVersionsResponse",
6088                FIELDS,
6089                GeneratedVisitor,
6090            )
6091    }
6092}
6093impl serde::Serialize for ListLegalDocumentsRequest {
6094    #[allow(deprecated)]
6095    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
6096    where
6097        S: serde::Serializer,
6098    {
6099        use serde::ser::SerializeStruct;
6100        let mut len = 0;
6101        if self.page_size != 0 {
6102            len += 1;
6103        }
6104        if !self.page_token.is_empty() {
6105            len += 1;
6106        }
6107        let mut struct_ser = serializer
6108            .serialize_struct(
6109                "origincloud.billing.v1beta1.ListLegalDocumentsRequest",
6110                len,
6111            )?;
6112        if self.page_size != 0 {
6113            struct_ser.serialize_field("pageSize", &self.page_size)?;
6114        }
6115        if !self.page_token.is_empty() {
6116            struct_ser.serialize_field("pageToken", &self.page_token)?;
6117        }
6118        struct_ser.end()
6119    }
6120}
6121impl<'de> serde::Deserialize<'de> for ListLegalDocumentsRequest {
6122    #[allow(deprecated)]
6123    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6124    where
6125        D: serde::Deserializer<'de>,
6126    {
6127        const FIELDS: &[&str] = &["page_size", "pageSize", "page_token", "pageToken"];
6128        #[allow(clippy::enum_variant_names)]
6129        enum GeneratedField {
6130            PageSize,
6131            PageToken,
6132            __SkipField__,
6133        }
6134        impl<'de> serde::Deserialize<'de> for GeneratedField {
6135            fn deserialize<D>(
6136                deserializer: D,
6137            ) -> std::result::Result<GeneratedField, D::Error>
6138            where
6139                D: serde::Deserializer<'de>,
6140            {
6141                struct GeneratedVisitor;
6142                impl serde::de::Visitor<'_> for GeneratedVisitor {
6143                    type Value = GeneratedField;
6144                    fn expecting(
6145                        &self,
6146                        formatter: &mut std::fmt::Formatter<'_>,
6147                    ) -> std::fmt::Result {
6148                        write!(formatter, "expected one of: {:?}", & FIELDS)
6149                    }
6150                    #[allow(unused_variables)]
6151                    fn visit_str<E>(
6152                        self,
6153                        value: &str,
6154                    ) -> std::result::Result<GeneratedField, E>
6155                    where
6156                        E: serde::de::Error,
6157                    {
6158                        match value {
6159                            "pageSize" | "page_size" => Ok(GeneratedField::PageSize),
6160                            "pageToken" | "page_token" => Ok(GeneratedField::PageToken),
6161                            _ => Ok(GeneratedField::__SkipField__),
6162                        }
6163                    }
6164                }
6165                deserializer.deserialize_identifier(GeneratedVisitor)
6166            }
6167        }
6168        struct GeneratedVisitor;
6169        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
6170            type Value = ListLegalDocumentsRequest;
6171            fn expecting(
6172                &self,
6173                formatter: &mut std::fmt::Formatter<'_>,
6174            ) -> std::fmt::Result {
6175                formatter
6176                    .write_str(
6177                        "struct origincloud.billing.v1beta1.ListLegalDocumentsRequest",
6178                    )
6179            }
6180            fn visit_map<V>(
6181                self,
6182                mut map_: V,
6183            ) -> std::result::Result<ListLegalDocumentsRequest, V::Error>
6184            where
6185                V: serde::de::MapAccess<'de>,
6186            {
6187                let mut page_size__ = None;
6188                let mut page_token__ = None;
6189                while let Some(k) = map_.next_key()? {
6190                    match k {
6191                        GeneratedField::PageSize => {
6192                            if page_size__.is_some() {
6193                                return Err(serde::de::Error::duplicate_field("pageSize"));
6194                            }
6195                            page_size__ = Some(
6196                                map_
6197                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
6198                                    .0,
6199                            );
6200                        }
6201                        GeneratedField::PageToken => {
6202                            if page_token__.is_some() {
6203                                return Err(serde::de::Error::duplicate_field("pageToken"));
6204                            }
6205                            page_token__ = Some(map_.next_value()?);
6206                        }
6207                        GeneratedField::__SkipField__ => {
6208                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
6209                        }
6210                    }
6211                }
6212                Ok(ListLegalDocumentsRequest {
6213                    page_size: page_size__.unwrap_or_default(),
6214                    page_token: page_token__.unwrap_or_default(),
6215                })
6216            }
6217        }
6218        deserializer
6219            .deserialize_struct(
6220                "origincloud.billing.v1beta1.ListLegalDocumentsRequest",
6221                FIELDS,
6222                GeneratedVisitor,
6223            )
6224    }
6225}
6226impl serde::Serialize for ListLegalDocumentsResponse {
6227    #[allow(deprecated)]
6228    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
6229    where
6230        S: serde::Serializer,
6231    {
6232        use serde::ser::SerializeStruct;
6233        let mut len = 0;
6234        if !self.legal_documents.is_empty() {
6235            len += 1;
6236        }
6237        if !self.next_page_token.is_empty() {
6238            len += 1;
6239        }
6240        let mut struct_ser = serializer
6241            .serialize_struct(
6242                "origincloud.billing.v1beta1.ListLegalDocumentsResponse",
6243                len,
6244            )?;
6245        if !self.legal_documents.is_empty() {
6246            struct_ser.serialize_field("legalDocuments", &self.legal_documents)?;
6247        }
6248        if !self.next_page_token.is_empty() {
6249            struct_ser.serialize_field("nextPageToken", &self.next_page_token)?;
6250        }
6251        struct_ser.end()
6252    }
6253}
6254impl<'de> serde::Deserialize<'de> for ListLegalDocumentsResponse {
6255    #[allow(deprecated)]
6256    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6257    where
6258        D: serde::Deserializer<'de>,
6259    {
6260        const FIELDS: &[&str] = &[
6261            "legal_documents",
6262            "legalDocuments",
6263            "next_page_token",
6264            "nextPageToken",
6265        ];
6266        #[allow(clippy::enum_variant_names)]
6267        enum GeneratedField {
6268            LegalDocuments,
6269            NextPageToken,
6270            __SkipField__,
6271        }
6272        impl<'de> serde::Deserialize<'de> for GeneratedField {
6273            fn deserialize<D>(
6274                deserializer: D,
6275            ) -> std::result::Result<GeneratedField, D::Error>
6276            where
6277                D: serde::Deserializer<'de>,
6278            {
6279                struct GeneratedVisitor;
6280                impl serde::de::Visitor<'_> for GeneratedVisitor {
6281                    type Value = GeneratedField;
6282                    fn expecting(
6283                        &self,
6284                        formatter: &mut std::fmt::Formatter<'_>,
6285                    ) -> std::fmt::Result {
6286                        write!(formatter, "expected one of: {:?}", & FIELDS)
6287                    }
6288                    #[allow(unused_variables)]
6289                    fn visit_str<E>(
6290                        self,
6291                        value: &str,
6292                    ) -> std::result::Result<GeneratedField, E>
6293                    where
6294                        E: serde::de::Error,
6295                    {
6296                        match value {
6297                            "legalDocuments" | "legal_documents" => {
6298                                Ok(GeneratedField::LegalDocuments)
6299                            }
6300                            "nextPageToken" | "next_page_token" => {
6301                                Ok(GeneratedField::NextPageToken)
6302                            }
6303                            _ => Ok(GeneratedField::__SkipField__),
6304                        }
6305                    }
6306                }
6307                deserializer.deserialize_identifier(GeneratedVisitor)
6308            }
6309        }
6310        struct GeneratedVisitor;
6311        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
6312            type Value = ListLegalDocumentsResponse;
6313            fn expecting(
6314                &self,
6315                formatter: &mut std::fmt::Formatter<'_>,
6316            ) -> std::fmt::Result {
6317                formatter
6318                    .write_str(
6319                        "struct origincloud.billing.v1beta1.ListLegalDocumentsResponse",
6320                    )
6321            }
6322            fn visit_map<V>(
6323                self,
6324                mut map_: V,
6325            ) -> std::result::Result<ListLegalDocumentsResponse, V::Error>
6326            where
6327                V: serde::de::MapAccess<'de>,
6328            {
6329                let mut legal_documents__ = None;
6330                let mut next_page_token__ = None;
6331                while let Some(k) = map_.next_key()? {
6332                    match k {
6333                        GeneratedField::LegalDocuments => {
6334                            if legal_documents__.is_some() {
6335                                return Err(
6336                                    serde::de::Error::duplicate_field("legalDocuments"),
6337                                );
6338                            }
6339                            legal_documents__ = Some(map_.next_value()?);
6340                        }
6341                        GeneratedField::NextPageToken => {
6342                            if next_page_token__.is_some() {
6343                                return Err(
6344                                    serde::de::Error::duplicate_field("nextPageToken"),
6345                                );
6346                            }
6347                            next_page_token__ = Some(map_.next_value()?);
6348                        }
6349                        GeneratedField::__SkipField__ => {
6350                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
6351                        }
6352                    }
6353                }
6354                Ok(ListLegalDocumentsResponse {
6355                    legal_documents: legal_documents__.unwrap_or_default(),
6356                    next_page_token: next_page_token__.unwrap_or_default(),
6357                })
6358            }
6359        }
6360        deserializer
6361            .deserialize_struct(
6362                "origincloud.billing.v1beta1.ListLegalDocumentsResponse",
6363                FIELDS,
6364                GeneratedVisitor,
6365            )
6366    }
6367}
6368impl serde::Serialize for ListProjectBillingInfoRequest {
6369    #[allow(deprecated)]
6370    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
6371    where
6372        S: serde::Serializer,
6373    {
6374        use serde::ser::SerializeStruct;
6375        let mut len = 0;
6376        if !self.name.is_empty() {
6377            len += 1;
6378        }
6379        if self.page_size != 0 {
6380            len += 1;
6381        }
6382        if !self.page_token.is_empty() {
6383            len += 1;
6384        }
6385        let mut struct_ser = serializer
6386            .serialize_struct(
6387                "origincloud.billing.v1beta1.ListProjectBillingInfoRequest",
6388                len,
6389            )?;
6390        if !self.name.is_empty() {
6391            struct_ser.serialize_field("name", &self.name)?;
6392        }
6393        if self.page_size != 0 {
6394            struct_ser.serialize_field("pageSize", &self.page_size)?;
6395        }
6396        if !self.page_token.is_empty() {
6397            struct_ser.serialize_field("pageToken", &self.page_token)?;
6398        }
6399        struct_ser.end()
6400    }
6401}
6402impl<'de> serde::Deserialize<'de> for ListProjectBillingInfoRequest {
6403    #[allow(deprecated)]
6404    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6405    where
6406        D: serde::Deserializer<'de>,
6407    {
6408        const FIELDS: &[&str] = &[
6409            "name",
6410            "page_size",
6411            "pageSize",
6412            "page_token",
6413            "pageToken",
6414        ];
6415        #[allow(clippy::enum_variant_names)]
6416        enum GeneratedField {
6417            Name,
6418            PageSize,
6419            PageToken,
6420            __SkipField__,
6421        }
6422        impl<'de> serde::Deserialize<'de> for GeneratedField {
6423            fn deserialize<D>(
6424                deserializer: D,
6425            ) -> std::result::Result<GeneratedField, D::Error>
6426            where
6427                D: serde::Deserializer<'de>,
6428            {
6429                struct GeneratedVisitor;
6430                impl serde::de::Visitor<'_> for GeneratedVisitor {
6431                    type Value = GeneratedField;
6432                    fn expecting(
6433                        &self,
6434                        formatter: &mut std::fmt::Formatter<'_>,
6435                    ) -> std::fmt::Result {
6436                        write!(formatter, "expected one of: {:?}", & FIELDS)
6437                    }
6438                    #[allow(unused_variables)]
6439                    fn visit_str<E>(
6440                        self,
6441                        value: &str,
6442                    ) -> std::result::Result<GeneratedField, E>
6443                    where
6444                        E: serde::de::Error,
6445                    {
6446                        match value {
6447                            "name" => Ok(GeneratedField::Name),
6448                            "pageSize" | "page_size" => Ok(GeneratedField::PageSize),
6449                            "pageToken" | "page_token" => Ok(GeneratedField::PageToken),
6450                            _ => Ok(GeneratedField::__SkipField__),
6451                        }
6452                    }
6453                }
6454                deserializer.deserialize_identifier(GeneratedVisitor)
6455            }
6456        }
6457        struct GeneratedVisitor;
6458        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
6459            type Value = ListProjectBillingInfoRequest;
6460            fn expecting(
6461                &self,
6462                formatter: &mut std::fmt::Formatter<'_>,
6463            ) -> std::fmt::Result {
6464                formatter
6465                    .write_str(
6466                        "struct origincloud.billing.v1beta1.ListProjectBillingInfoRequest",
6467                    )
6468            }
6469            fn visit_map<V>(
6470                self,
6471                mut map_: V,
6472            ) -> std::result::Result<ListProjectBillingInfoRequest, V::Error>
6473            where
6474                V: serde::de::MapAccess<'de>,
6475            {
6476                let mut name__ = None;
6477                let mut page_size__ = None;
6478                let mut page_token__ = None;
6479                while let Some(k) = map_.next_key()? {
6480                    match k {
6481                        GeneratedField::Name => {
6482                            if name__.is_some() {
6483                                return Err(serde::de::Error::duplicate_field("name"));
6484                            }
6485                            name__ = Some(map_.next_value()?);
6486                        }
6487                        GeneratedField::PageSize => {
6488                            if page_size__.is_some() {
6489                                return Err(serde::de::Error::duplicate_field("pageSize"));
6490                            }
6491                            page_size__ = Some(
6492                                map_
6493                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
6494                                    .0,
6495                            );
6496                        }
6497                        GeneratedField::PageToken => {
6498                            if page_token__.is_some() {
6499                                return Err(serde::de::Error::duplicate_field("pageToken"));
6500                            }
6501                            page_token__ = Some(map_.next_value()?);
6502                        }
6503                        GeneratedField::__SkipField__ => {
6504                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
6505                        }
6506                    }
6507                }
6508                Ok(ListProjectBillingInfoRequest {
6509                    name: name__.unwrap_or_default(),
6510                    page_size: page_size__.unwrap_or_default(),
6511                    page_token: page_token__.unwrap_or_default(),
6512                })
6513            }
6514        }
6515        deserializer
6516            .deserialize_struct(
6517                "origincloud.billing.v1beta1.ListProjectBillingInfoRequest",
6518                FIELDS,
6519                GeneratedVisitor,
6520            )
6521    }
6522}
6523impl serde::Serialize for ListProjectBillingInfoResponse {
6524    #[allow(deprecated)]
6525    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
6526    where
6527        S: serde::Serializer,
6528    {
6529        use serde::ser::SerializeStruct;
6530        let mut len = 0;
6531        if !self.project_billing_infos.is_empty() {
6532            len += 1;
6533        }
6534        if !self.next_page_token.is_empty() {
6535            len += 1;
6536        }
6537        let mut struct_ser = serializer
6538            .serialize_struct(
6539                "origincloud.billing.v1beta1.ListProjectBillingInfoResponse",
6540                len,
6541            )?;
6542        if !self.project_billing_infos.is_empty() {
6543            struct_ser
6544                .serialize_field("projectBillingInfos", &self.project_billing_infos)?;
6545        }
6546        if !self.next_page_token.is_empty() {
6547            struct_ser.serialize_field("nextPageToken", &self.next_page_token)?;
6548        }
6549        struct_ser.end()
6550    }
6551}
6552impl<'de> serde::Deserialize<'de> for ListProjectBillingInfoResponse {
6553    #[allow(deprecated)]
6554    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6555    where
6556        D: serde::Deserializer<'de>,
6557    {
6558        const FIELDS: &[&str] = &[
6559            "project_billing_infos",
6560            "projectBillingInfos",
6561            "next_page_token",
6562            "nextPageToken",
6563        ];
6564        #[allow(clippy::enum_variant_names)]
6565        enum GeneratedField {
6566            ProjectBillingInfos,
6567            NextPageToken,
6568            __SkipField__,
6569        }
6570        impl<'de> serde::Deserialize<'de> for GeneratedField {
6571            fn deserialize<D>(
6572                deserializer: D,
6573            ) -> std::result::Result<GeneratedField, D::Error>
6574            where
6575                D: serde::Deserializer<'de>,
6576            {
6577                struct GeneratedVisitor;
6578                impl serde::de::Visitor<'_> for GeneratedVisitor {
6579                    type Value = GeneratedField;
6580                    fn expecting(
6581                        &self,
6582                        formatter: &mut std::fmt::Formatter<'_>,
6583                    ) -> std::fmt::Result {
6584                        write!(formatter, "expected one of: {:?}", & FIELDS)
6585                    }
6586                    #[allow(unused_variables)]
6587                    fn visit_str<E>(
6588                        self,
6589                        value: &str,
6590                    ) -> std::result::Result<GeneratedField, E>
6591                    where
6592                        E: serde::de::Error,
6593                    {
6594                        match value {
6595                            "projectBillingInfos" | "project_billing_infos" => {
6596                                Ok(GeneratedField::ProjectBillingInfos)
6597                            }
6598                            "nextPageToken" | "next_page_token" => {
6599                                Ok(GeneratedField::NextPageToken)
6600                            }
6601                            _ => Ok(GeneratedField::__SkipField__),
6602                        }
6603                    }
6604                }
6605                deserializer.deserialize_identifier(GeneratedVisitor)
6606            }
6607        }
6608        struct GeneratedVisitor;
6609        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
6610            type Value = ListProjectBillingInfoResponse;
6611            fn expecting(
6612                &self,
6613                formatter: &mut std::fmt::Formatter<'_>,
6614            ) -> std::fmt::Result {
6615                formatter
6616                    .write_str(
6617                        "struct origincloud.billing.v1beta1.ListProjectBillingInfoResponse",
6618                    )
6619            }
6620            fn visit_map<V>(
6621                self,
6622                mut map_: V,
6623            ) -> std::result::Result<ListProjectBillingInfoResponse, V::Error>
6624            where
6625                V: serde::de::MapAccess<'de>,
6626            {
6627                let mut project_billing_infos__ = None;
6628                let mut next_page_token__ = None;
6629                while let Some(k) = map_.next_key()? {
6630                    match k {
6631                        GeneratedField::ProjectBillingInfos => {
6632                            if project_billing_infos__.is_some() {
6633                                return Err(
6634                                    serde::de::Error::duplicate_field("projectBillingInfos"),
6635                                );
6636                            }
6637                            project_billing_infos__ = Some(map_.next_value()?);
6638                        }
6639                        GeneratedField::NextPageToken => {
6640                            if next_page_token__.is_some() {
6641                                return Err(
6642                                    serde::de::Error::duplicate_field("nextPageToken"),
6643                                );
6644                            }
6645                            next_page_token__ = Some(map_.next_value()?);
6646                        }
6647                        GeneratedField::__SkipField__ => {
6648                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
6649                        }
6650                    }
6651                }
6652                Ok(ListProjectBillingInfoResponse {
6653                    project_billing_infos: project_billing_infos__.unwrap_or_default(),
6654                    next_page_token: next_page_token__.unwrap_or_default(),
6655                })
6656            }
6657        }
6658        deserializer
6659            .deserialize_struct(
6660                "origincloud.billing.v1beta1.ListProjectBillingInfoResponse",
6661                FIELDS,
6662                GeneratedVisitor,
6663            )
6664    }
6665}
6666impl serde::Serialize for OrganizationCostReport {
6667    #[allow(deprecated)]
6668    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
6669    where
6670        S: serde::Serializer,
6671    {
6672        use serde::ser::SerializeStruct;
6673        let mut len = 0;
6674        if !self.total.is_empty() {
6675            len += 1;
6676        }
6677        if !self.services.is_empty() {
6678            len += 1;
6679        }
6680        if !self.projects.is_empty() {
6681            len += 1;
6682        }
6683        let mut struct_ser = serializer
6684            .serialize_struct(
6685                "origincloud.billing.v1beta1.OrganizationCostReport",
6686                len,
6687            )?;
6688        if !self.total.is_empty() {
6689            struct_ser.serialize_field("total", &self.total)?;
6690        }
6691        if !self.services.is_empty() {
6692            struct_ser.serialize_field("services", &self.services)?;
6693        }
6694        if !self.projects.is_empty() {
6695            struct_ser.serialize_field("projects", &self.projects)?;
6696        }
6697        struct_ser.end()
6698    }
6699}
6700impl<'de> serde::Deserialize<'de> for OrganizationCostReport {
6701    #[allow(deprecated)]
6702    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6703    where
6704        D: serde::Deserializer<'de>,
6705    {
6706        const FIELDS: &[&str] = &["total", "services", "projects"];
6707        #[allow(clippy::enum_variant_names)]
6708        enum GeneratedField {
6709            Total,
6710            Services,
6711            Projects,
6712            __SkipField__,
6713        }
6714        impl<'de> serde::Deserialize<'de> for GeneratedField {
6715            fn deserialize<D>(
6716                deserializer: D,
6717            ) -> std::result::Result<GeneratedField, D::Error>
6718            where
6719                D: serde::Deserializer<'de>,
6720            {
6721                struct GeneratedVisitor;
6722                impl serde::de::Visitor<'_> for GeneratedVisitor {
6723                    type Value = GeneratedField;
6724                    fn expecting(
6725                        &self,
6726                        formatter: &mut std::fmt::Formatter<'_>,
6727                    ) -> std::fmt::Result {
6728                        write!(formatter, "expected one of: {:?}", & FIELDS)
6729                    }
6730                    #[allow(unused_variables)]
6731                    fn visit_str<E>(
6732                        self,
6733                        value: &str,
6734                    ) -> std::result::Result<GeneratedField, E>
6735                    where
6736                        E: serde::de::Error,
6737                    {
6738                        match value {
6739                            "total" => Ok(GeneratedField::Total),
6740                            "services" => Ok(GeneratedField::Services),
6741                            "projects" => Ok(GeneratedField::Projects),
6742                            _ => Ok(GeneratedField::__SkipField__),
6743                        }
6744                    }
6745                }
6746                deserializer.deserialize_identifier(GeneratedVisitor)
6747            }
6748        }
6749        struct GeneratedVisitor;
6750        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
6751            type Value = OrganizationCostReport;
6752            fn expecting(
6753                &self,
6754                formatter: &mut std::fmt::Formatter<'_>,
6755            ) -> std::fmt::Result {
6756                formatter
6757                    .write_str(
6758                        "struct origincloud.billing.v1beta1.OrganizationCostReport",
6759                    )
6760            }
6761            fn visit_map<V>(
6762                self,
6763                mut map_: V,
6764            ) -> std::result::Result<OrganizationCostReport, V::Error>
6765            where
6766                V: serde::de::MapAccess<'de>,
6767            {
6768                let mut total__ = None;
6769                let mut services__ = None;
6770                let mut projects__ = None;
6771                while let Some(k) = map_.next_key()? {
6772                    match k {
6773                        GeneratedField::Total => {
6774                            if total__.is_some() {
6775                                return Err(serde::de::Error::duplicate_field("total"));
6776                            }
6777                            total__ = Some(map_.next_value()?);
6778                        }
6779                        GeneratedField::Services => {
6780                            if services__.is_some() {
6781                                return Err(serde::de::Error::duplicate_field("services"));
6782                            }
6783                            services__ = Some(map_.next_value()?);
6784                        }
6785                        GeneratedField::Projects => {
6786                            if projects__.is_some() {
6787                                return Err(serde::de::Error::duplicate_field("projects"));
6788                            }
6789                            projects__ = Some(map_.next_value()?);
6790                        }
6791                        GeneratedField::__SkipField__ => {
6792                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
6793                        }
6794                    }
6795                }
6796                Ok(OrganizationCostReport {
6797                    total: total__.unwrap_or_default(),
6798                    services: services__.unwrap_or_default(),
6799                    projects: projects__.unwrap_or_default(),
6800                })
6801            }
6802        }
6803        deserializer
6804            .deserialize_struct(
6805                "origincloud.billing.v1beta1.OrganizationCostReport",
6806                FIELDS,
6807                GeneratedVisitor,
6808            )
6809    }
6810}
6811impl serde::Serialize for PaymentMethod {
6812    #[allow(deprecated)]
6813    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
6814    where
6815        S: serde::Serializer,
6816    {
6817        use serde::ser::SerializeStruct;
6818        let mut len = 0;
6819        if self.state != 0 {
6820            len += 1;
6821        }
6822        if !self.card_brand.is_empty() {
6823            len += 1;
6824        }
6825        if !self.card_last4.is_empty() {
6826            len += 1;
6827        }
6828        let mut struct_ser = serializer
6829            .serialize_struct("origincloud.billing.v1beta1.PaymentMethod", len)?;
6830        if self.state != 0 {
6831            let v = payment_method::State::try_from(self.state)
6832                .map_err(|_| serde::ser::Error::custom(
6833                    format!("Invalid variant {}", self.state),
6834                ))?;
6835            struct_ser.serialize_field("state", &v)?;
6836        }
6837        if !self.card_brand.is_empty() {
6838            struct_ser.serialize_field("cardBrand", &self.card_brand)?;
6839        }
6840        if !self.card_last4.is_empty() {
6841            struct_ser.serialize_field("cardLast4", &self.card_last4)?;
6842        }
6843        struct_ser.end()
6844    }
6845}
6846impl<'de> serde::Deserialize<'de> for PaymentMethod {
6847    #[allow(deprecated)]
6848    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6849    where
6850        D: serde::Deserializer<'de>,
6851    {
6852        const FIELDS: &[&str] = &[
6853            "state",
6854            "card_brand",
6855            "cardBrand",
6856            "card_last4",
6857            "cardLast4",
6858        ];
6859        #[allow(clippy::enum_variant_names)]
6860        enum GeneratedField {
6861            State,
6862            CardBrand,
6863            CardLast4,
6864            __SkipField__,
6865        }
6866        impl<'de> serde::Deserialize<'de> for GeneratedField {
6867            fn deserialize<D>(
6868                deserializer: D,
6869            ) -> std::result::Result<GeneratedField, D::Error>
6870            where
6871                D: serde::Deserializer<'de>,
6872            {
6873                struct GeneratedVisitor;
6874                impl serde::de::Visitor<'_> for GeneratedVisitor {
6875                    type Value = GeneratedField;
6876                    fn expecting(
6877                        &self,
6878                        formatter: &mut std::fmt::Formatter<'_>,
6879                    ) -> std::fmt::Result {
6880                        write!(formatter, "expected one of: {:?}", & FIELDS)
6881                    }
6882                    #[allow(unused_variables)]
6883                    fn visit_str<E>(
6884                        self,
6885                        value: &str,
6886                    ) -> std::result::Result<GeneratedField, E>
6887                    where
6888                        E: serde::de::Error,
6889                    {
6890                        match value {
6891                            "state" => Ok(GeneratedField::State),
6892                            "cardBrand" | "card_brand" => Ok(GeneratedField::CardBrand),
6893                            "cardLast4" | "card_last4" => Ok(GeneratedField::CardLast4),
6894                            _ => Ok(GeneratedField::__SkipField__),
6895                        }
6896                    }
6897                }
6898                deserializer.deserialize_identifier(GeneratedVisitor)
6899            }
6900        }
6901        struct GeneratedVisitor;
6902        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
6903            type Value = PaymentMethod;
6904            fn expecting(
6905                &self,
6906                formatter: &mut std::fmt::Formatter<'_>,
6907            ) -> std::fmt::Result {
6908                formatter.write_str("struct origincloud.billing.v1beta1.PaymentMethod")
6909            }
6910            fn visit_map<V>(
6911                self,
6912                mut map_: V,
6913            ) -> std::result::Result<PaymentMethod, V::Error>
6914            where
6915                V: serde::de::MapAccess<'de>,
6916            {
6917                let mut state__ = None;
6918                let mut card_brand__ = None;
6919                let mut card_last4__ = None;
6920                while let Some(k) = map_.next_key()? {
6921                    match k {
6922                        GeneratedField::State => {
6923                            if state__.is_some() {
6924                                return Err(serde::de::Error::duplicate_field("state"));
6925                            }
6926                            state__ = Some(
6927                                map_.next_value::<payment_method::State>()? as i32,
6928                            );
6929                        }
6930                        GeneratedField::CardBrand => {
6931                            if card_brand__.is_some() {
6932                                return Err(serde::de::Error::duplicate_field("cardBrand"));
6933                            }
6934                            card_brand__ = Some(map_.next_value()?);
6935                        }
6936                        GeneratedField::CardLast4 => {
6937                            if card_last4__.is_some() {
6938                                return Err(serde::de::Error::duplicate_field("cardLast4"));
6939                            }
6940                            card_last4__ = Some(map_.next_value()?);
6941                        }
6942                        GeneratedField::__SkipField__ => {
6943                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
6944                        }
6945                    }
6946                }
6947                Ok(PaymentMethod {
6948                    state: state__.unwrap_or_default(),
6949                    card_brand: card_brand__.unwrap_or_default(),
6950                    card_last4: card_last4__.unwrap_or_default(),
6951                })
6952            }
6953        }
6954        deserializer
6955            .deserialize_struct(
6956                "origincloud.billing.v1beta1.PaymentMethod",
6957                FIELDS,
6958                GeneratedVisitor,
6959            )
6960    }
6961}
6962impl serde::Serialize for payment_method::State {
6963    #[allow(deprecated)]
6964    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
6965    where
6966        S: serde::Serializer,
6967    {
6968        let variant = match self {
6969            Self::Unspecified => "STATE_UNSPECIFIED",
6970            Self::Missing => "MISSING",
6971            Self::Verified => "VERIFIED",
6972            Self::NotRequired => "NOT_REQUIRED",
6973        };
6974        serializer.serialize_str(variant)
6975    }
6976}
6977impl<'de> serde::Deserialize<'de> for payment_method::State {
6978    #[allow(deprecated)]
6979    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6980    where
6981        D: serde::Deserializer<'de>,
6982    {
6983        const FIELDS: &[&str] = &[
6984            "STATE_UNSPECIFIED",
6985            "MISSING",
6986            "VERIFIED",
6987            "NOT_REQUIRED",
6988        ];
6989        struct GeneratedVisitor;
6990        impl serde::de::Visitor<'_> for GeneratedVisitor {
6991            type Value = payment_method::State;
6992            fn expecting(
6993                &self,
6994                formatter: &mut std::fmt::Formatter<'_>,
6995            ) -> std::fmt::Result {
6996                write!(formatter, "expected one of: {:?}", & FIELDS)
6997            }
6998            fn visit_i64<E>(self, v: i64) -> std::result::Result<Self::Value, E>
6999            where
7000                E: serde::de::Error,
7001            {
7002                i32::try_from(v)
7003                    .ok()
7004                    .and_then(|x| {
7005                        x
7006                            .try_into()
7007                            .ok()
7008                            .or_else(|| Some(payment_method::State::default()))
7009                    })
7010                    .ok_or_else(|| {
7011                        serde::de::Error::invalid_value(
7012                            serde::de::Unexpected::Signed(v),
7013                            &self,
7014                        )
7015                    })
7016            }
7017            fn visit_u64<E>(self, v: u64) -> std::result::Result<Self::Value, E>
7018            where
7019                E: serde::de::Error,
7020            {
7021                i32::try_from(v)
7022                    .ok()
7023                    .and_then(|x| {
7024                        x
7025                            .try_into()
7026                            .ok()
7027                            .or_else(|| Some(payment_method::State::default()))
7028                    })
7029                    .ok_or_else(|| {
7030                        serde::de::Error::invalid_value(
7031                            serde::de::Unexpected::Unsigned(v),
7032                            &self,
7033                        )
7034                    })
7035            }
7036            fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
7037            where
7038                E: serde::de::Error,
7039            {
7040                match value {
7041                    "STATE_UNSPECIFIED" => Ok(payment_method::State::Unspecified),
7042                    "MISSING" => Ok(payment_method::State::Missing),
7043                    "VERIFIED" => Ok(payment_method::State::Verified),
7044                    "NOT_REQUIRED" => Ok(payment_method::State::NotRequired),
7045                    _ => Ok(payment_method::State::default()),
7046                }
7047            }
7048        }
7049        deserializer.deserialize_any(GeneratedVisitor)
7050    }
7051}
7052impl serde::Serialize for Price {
7053    #[allow(deprecated)]
7054    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
7055    where
7056        S: serde::Serializer,
7057    {
7058        use serde::ser::SerializeStruct;
7059        let mut len = 0;
7060        if !self.product_key.is_empty() {
7061            len += 1;
7062        }
7063        if !self.dimensions.is_empty() {
7064            len += 1;
7065        }
7066        if !self.unit_type.is_empty() {
7067            len += 1;
7068        }
7069        if self.unit_count != 0 {
7070            len += 1;
7071        }
7072        if !self.amount.is_empty() {
7073            len += 1;
7074        }
7075        if self.valid_from.is_some() {
7076            len += 1;
7077        }
7078        if self.valid_until.is_some() {
7079            len += 1;
7080        }
7081        let mut struct_ser = serializer
7082            .serialize_struct("origincloud.billing.v1beta1.Price", len)?;
7083        if !self.product_key.is_empty() {
7084            struct_ser.serialize_field("product_key", &self.product_key)?;
7085        }
7086        if !self.dimensions.is_empty() {
7087            struct_ser.serialize_field("dimensions", &self.dimensions)?;
7088        }
7089        if !self.unit_type.is_empty() {
7090            struct_ser.serialize_field("unit_type", &self.unit_type)?;
7091        }
7092        if self.unit_count != 0 {
7093            struct_ser.serialize_field("unit_count", &self.unit_count)?;
7094        }
7095        if !self.amount.is_empty() {
7096            struct_ser.serialize_field("amount", &self.amount)?;
7097        }
7098        if let Some(v) = self.valid_from.as_ref() {
7099            struct_ser.serialize_field("valid_from", v)?;
7100        }
7101        if let Some(v) = self.valid_until.as_ref() {
7102            struct_ser.serialize_field("valid_until", v)?;
7103        }
7104        struct_ser.end()
7105    }
7106}
7107impl<'de> serde::Deserialize<'de> for Price {
7108    #[allow(deprecated)]
7109    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7110    where
7111        D: serde::Deserializer<'de>,
7112    {
7113        const FIELDS: &[&str] = &[
7114            "product_key",
7115            "dimensions",
7116            "unit_type",
7117            "unit_count",
7118            "amount",
7119            "valid_from",
7120            "valid_until",
7121        ];
7122        #[allow(clippy::enum_variant_names)]
7123        enum GeneratedField {
7124            ProductKey,
7125            Dimensions,
7126            UnitType,
7127            UnitCount,
7128            Amount,
7129            ValidFrom,
7130            ValidUntil,
7131            __SkipField__,
7132        }
7133        impl<'de> serde::Deserialize<'de> for GeneratedField {
7134            fn deserialize<D>(
7135                deserializer: D,
7136            ) -> std::result::Result<GeneratedField, D::Error>
7137            where
7138                D: serde::Deserializer<'de>,
7139            {
7140                struct GeneratedVisitor;
7141                impl serde::de::Visitor<'_> for GeneratedVisitor {
7142                    type Value = GeneratedField;
7143                    fn expecting(
7144                        &self,
7145                        formatter: &mut std::fmt::Formatter<'_>,
7146                    ) -> std::fmt::Result {
7147                        write!(formatter, "expected one of: {:?}", & FIELDS)
7148                    }
7149                    #[allow(unused_variables)]
7150                    fn visit_str<E>(
7151                        self,
7152                        value: &str,
7153                    ) -> std::result::Result<GeneratedField, E>
7154                    where
7155                        E: serde::de::Error,
7156                    {
7157                        match value {
7158                            "product_key" => Ok(GeneratedField::ProductKey),
7159                            "dimensions" => Ok(GeneratedField::Dimensions),
7160                            "unit_type" => Ok(GeneratedField::UnitType),
7161                            "unit_count" => Ok(GeneratedField::UnitCount),
7162                            "amount" => Ok(GeneratedField::Amount),
7163                            "valid_from" => Ok(GeneratedField::ValidFrom),
7164                            "valid_until" => Ok(GeneratedField::ValidUntil),
7165                            _ => Ok(GeneratedField::__SkipField__),
7166                        }
7167                    }
7168                }
7169                deserializer.deserialize_identifier(GeneratedVisitor)
7170            }
7171        }
7172        struct GeneratedVisitor;
7173        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
7174            type Value = Price;
7175            fn expecting(
7176                &self,
7177                formatter: &mut std::fmt::Formatter<'_>,
7178            ) -> std::fmt::Result {
7179                formatter.write_str("struct origincloud.billing.v1beta1.Price")
7180            }
7181            fn visit_map<V>(self, mut map_: V) -> std::result::Result<Price, V::Error>
7182            where
7183                V: serde::de::MapAccess<'de>,
7184            {
7185                let mut product_key__ = None;
7186                let mut dimensions__ = None;
7187                let mut unit_type__ = None;
7188                let mut unit_count__ = None;
7189                let mut amount__ = None;
7190                let mut valid_from__ = None;
7191                let mut valid_until__ = None;
7192                while let Some(k) = map_.next_key()? {
7193                    match k {
7194                        GeneratedField::ProductKey => {
7195                            if product_key__.is_some() {
7196                                return Err(
7197                                    serde::de::Error::duplicate_field("product_key"),
7198                                );
7199                            }
7200                            product_key__ = Some(map_.next_value()?);
7201                        }
7202                        GeneratedField::Dimensions => {
7203                            if dimensions__.is_some() {
7204                                return Err(serde::de::Error::duplicate_field("dimensions"));
7205                            }
7206                            dimensions__ = Some(
7207                                map_.next_value::<std::collections::BTreeMap<_, _>>()?,
7208                            );
7209                        }
7210                        GeneratedField::UnitType => {
7211                            if unit_type__.is_some() {
7212                                return Err(serde::de::Error::duplicate_field("unit_type"));
7213                            }
7214                            unit_type__ = Some(map_.next_value()?);
7215                        }
7216                        GeneratedField::UnitCount => {
7217                            if unit_count__.is_some() {
7218                                return Err(serde::de::Error::duplicate_field("unit_count"));
7219                            }
7220                            unit_count__ = Some(
7221                                map_
7222                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
7223                                    .0,
7224                            );
7225                        }
7226                        GeneratedField::Amount => {
7227                            if amount__.is_some() {
7228                                return Err(serde::de::Error::duplicate_field("amount"));
7229                            }
7230                            amount__ = Some(map_.next_value()?);
7231                        }
7232                        GeneratedField::ValidFrom => {
7233                            if valid_from__.is_some() {
7234                                return Err(serde::de::Error::duplicate_field("valid_from"));
7235                            }
7236                            valid_from__ = map_.next_value()?;
7237                        }
7238                        GeneratedField::ValidUntil => {
7239                            if valid_until__.is_some() {
7240                                return Err(
7241                                    serde::de::Error::duplicate_field("valid_until"),
7242                                );
7243                            }
7244                            valid_until__ = map_.next_value()?;
7245                        }
7246                        GeneratedField::__SkipField__ => {
7247                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
7248                        }
7249                    }
7250                }
7251                Ok(Price {
7252                    product_key: product_key__.unwrap_or_default(),
7253                    dimensions: dimensions__.unwrap_or_default(),
7254                    unit_type: unit_type__.unwrap_or_default(),
7255                    unit_count: unit_count__.unwrap_or_default(),
7256                    amount: amount__.unwrap_or_default(),
7257                    valid_from: valid_from__,
7258                    valid_until: valid_until__,
7259                })
7260            }
7261        }
7262        deserializer
7263            .deserialize_struct(
7264                "origincloud.billing.v1beta1.Price",
7265                FIELDS,
7266                GeneratedVisitor,
7267            )
7268    }
7269}
7270impl serde::Serialize for PriceFamily {
7271    #[allow(deprecated)]
7272    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
7273    where
7274        S: serde::Serializer,
7275    {
7276        use serde::ser::SerializeStruct;
7277        let mut len = 0;
7278        if !self.family.is_empty() {
7279            len += 1;
7280        }
7281        if !self.prices.is_empty() {
7282            len += 1;
7283        }
7284        let mut struct_ser = serializer
7285            .serialize_struct("origincloud.billing.v1beta1.PriceFamily", len)?;
7286        if !self.family.is_empty() {
7287            struct_ser.serialize_field("family", &self.family)?;
7288        }
7289        if !self.prices.is_empty() {
7290            struct_ser.serialize_field("prices", &self.prices)?;
7291        }
7292        struct_ser.end()
7293    }
7294}
7295impl<'de> serde::Deserialize<'de> for PriceFamily {
7296    #[allow(deprecated)]
7297    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7298    where
7299        D: serde::Deserializer<'de>,
7300    {
7301        const FIELDS: &[&str] = &["family", "prices"];
7302        #[allow(clippy::enum_variant_names)]
7303        enum GeneratedField {
7304            Family,
7305            Prices,
7306            __SkipField__,
7307        }
7308        impl<'de> serde::Deserialize<'de> for GeneratedField {
7309            fn deserialize<D>(
7310                deserializer: D,
7311            ) -> std::result::Result<GeneratedField, D::Error>
7312            where
7313                D: serde::Deserializer<'de>,
7314            {
7315                struct GeneratedVisitor;
7316                impl serde::de::Visitor<'_> for GeneratedVisitor {
7317                    type Value = GeneratedField;
7318                    fn expecting(
7319                        &self,
7320                        formatter: &mut std::fmt::Formatter<'_>,
7321                    ) -> std::fmt::Result {
7322                        write!(formatter, "expected one of: {:?}", & FIELDS)
7323                    }
7324                    #[allow(unused_variables)]
7325                    fn visit_str<E>(
7326                        self,
7327                        value: &str,
7328                    ) -> std::result::Result<GeneratedField, E>
7329                    where
7330                        E: serde::de::Error,
7331                    {
7332                        match value {
7333                            "family" => Ok(GeneratedField::Family),
7334                            "prices" => Ok(GeneratedField::Prices),
7335                            _ => Ok(GeneratedField::__SkipField__),
7336                        }
7337                    }
7338                }
7339                deserializer.deserialize_identifier(GeneratedVisitor)
7340            }
7341        }
7342        struct GeneratedVisitor;
7343        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
7344            type Value = PriceFamily;
7345            fn expecting(
7346                &self,
7347                formatter: &mut std::fmt::Formatter<'_>,
7348            ) -> std::fmt::Result {
7349                formatter.write_str("struct origincloud.billing.v1beta1.PriceFamily")
7350            }
7351            fn visit_map<V>(
7352                self,
7353                mut map_: V,
7354            ) -> std::result::Result<PriceFamily, V::Error>
7355            where
7356                V: serde::de::MapAccess<'de>,
7357            {
7358                let mut family__ = None;
7359                let mut prices__ = None;
7360                while let Some(k) = map_.next_key()? {
7361                    match k {
7362                        GeneratedField::Family => {
7363                            if family__.is_some() {
7364                                return Err(serde::de::Error::duplicate_field("family"));
7365                            }
7366                            family__ = Some(map_.next_value()?);
7367                        }
7368                        GeneratedField::Prices => {
7369                            if prices__.is_some() {
7370                                return Err(serde::de::Error::duplicate_field("prices"));
7371                            }
7372                            prices__ = Some(map_.next_value()?);
7373                        }
7374                        GeneratedField::__SkipField__ => {
7375                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
7376                        }
7377                    }
7378                }
7379                Ok(PriceFamily {
7380                    family: family__.unwrap_or_default(),
7381                    prices: prices__.unwrap_or_default(),
7382                })
7383            }
7384        }
7385        deserializer
7386            .deserialize_struct(
7387                "origincloud.billing.v1beta1.PriceFamily",
7388                FIELDS,
7389                GeneratedVisitor,
7390            )
7391    }
7392}
7393impl serde::Serialize for PriceList {
7394    #[allow(deprecated)]
7395    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
7396    where
7397        S: serde::Serializer,
7398    {
7399        use serde::ser::SerializeStruct;
7400        let mut len = 0;
7401        if !self.currency.is_empty() {
7402            len += 1;
7403        }
7404        if self.amounts_exclude_vat {
7405            len += 1;
7406        }
7407        if self.last_changed.is_some() {
7408            len += 1;
7409        }
7410        if !self.families.is_empty() {
7411            len += 1;
7412        }
7413        let mut struct_ser = serializer
7414            .serialize_struct("origincloud.billing.v1beta1.PriceList", len)?;
7415        if !self.currency.is_empty() {
7416            struct_ser.serialize_field("currency", &self.currency)?;
7417        }
7418        if self.amounts_exclude_vat {
7419            struct_ser
7420                .serialize_field("amounts_exclude_vat", &self.amounts_exclude_vat)?;
7421        }
7422        if let Some(v) = self.last_changed.as_ref() {
7423            struct_ser.serialize_field("last_changed", v)?;
7424        }
7425        if !self.families.is_empty() {
7426            struct_ser.serialize_field("families", &self.families)?;
7427        }
7428        struct_ser.end()
7429    }
7430}
7431impl<'de> serde::Deserialize<'de> for PriceList {
7432    #[allow(deprecated)]
7433    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7434    where
7435        D: serde::Deserializer<'de>,
7436    {
7437        const FIELDS: &[&str] = &[
7438            "currency",
7439            "amounts_exclude_vat",
7440            "last_changed",
7441            "families",
7442        ];
7443        #[allow(clippy::enum_variant_names)]
7444        enum GeneratedField {
7445            Currency,
7446            AmountsExcludeVat,
7447            LastChanged,
7448            Families,
7449            __SkipField__,
7450        }
7451        impl<'de> serde::Deserialize<'de> for GeneratedField {
7452            fn deserialize<D>(
7453                deserializer: D,
7454            ) -> std::result::Result<GeneratedField, D::Error>
7455            where
7456                D: serde::Deserializer<'de>,
7457            {
7458                struct GeneratedVisitor;
7459                impl serde::de::Visitor<'_> for GeneratedVisitor {
7460                    type Value = GeneratedField;
7461                    fn expecting(
7462                        &self,
7463                        formatter: &mut std::fmt::Formatter<'_>,
7464                    ) -> std::fmt::Result {
7465                        write!(formatter, "expected one of: {:?}", & FIELDS)
7466                    }
7467                    #[allow(unused_variables)]
7468                    fn visit_str<E>(
7469                        self,
7470                        value: &str,
7471                    ) -> std::result::Result<GeneratedField, E>
7472                    where
7473                        E: serde::de::Error,
7474                    {
7475                        match value {
7476                            "currency" => Ok(GeneratedField::Currency),
7477                            "amounts_exclude_vat" => {
7478                                Ok(GeneratedField::AmountsExcludeVat)
7479                            }
7480                            "last_changed" => Ok(GeneratedField::LastChanged),
7481                            "families" => Ok(GeneratedField::Families),
7482                            _ => Ok(GeneratedField::__SkipField__),
7483                        }
7484                    }
7485                }
7486                deserializer.deserialize_identifier(GeneratedVisitor)
7487            }
7488        }
7489        struct GeneratedVisitor;
7490        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
7491            type Value = PriceList;
7492            fn expecting(
7493                &self,
7494                formatter: &mut std::fmt::Formatter<'_>,
7495            ) -> std::fmt::Result {
7496                formatter.write_str("struct origincloud.billing.v1beta1.PriceList")
7497            }
7498            fn visit_map<V>(
7499                self,
7500                mut map_: V,
7501            ) -> std::result::Result<PriceList, V::Error>
7502            where
7503                V: serde::de::MapAccess<'de>,
7504            {
7505                let mut currency__ = None;
7506                let mut amounts_exclude_vat__ = None;
7507                let mut last_changed__ = None;
7508                let mut families__ = None;
7509                while let Some(k) = map_.next_key()? {
7510                    match k {
7511                        GeneratedField::Currency => {
7512                            if currency__.is_some() {
7513                                return Err(serde::de::Error::duplicate_field("currency"));
7514                            }
7515                            currency__ = Some(map_.next_value()?);
7516                        }
7517                        GeneratedField::AmountsExcludeVat => {
7518                            if amounts_exclude_vat__.is_some() {
7519                                return Err(
7520                                    serde::de::Error::duplicate_field("amounts_exclude_vat"),
7521                                );
7522                            }
7523                            amounts_exclude_vat__ = Some(map_.next_value()?);
7524                        }
7525                        GeneratedField::LastChanged => {
7526                            if last_changed__.is_some() {
7527                                return Err(
7528                                    serde::de::Error::duplicate_field("last_changed"),
7529                                );
7530                            }
7531                            last_changed__ = map_.next_value()?;
7532                        }
7533                        GeneratedField::Families => {
7534                            if families__.is_some() {
7535                                return Err(serde::de::Error::duplicate_field("families"));
7536                            }
7537                            families__ = Some(map_.next_value()?);
7538                        }
7539                        GeneratedField::__SkipField__ => {
7540                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
7541                        }
7542                    }
7543                }
7544                Ok(PriceList {
7545                    currency: currency__.unwrap_or_default(),
7546                    amounts_exclude_vat: amounts_exclude_vat__.unwrap_or_default(),
7547                    last_changed: last_changed__,
7548                    families: families__.unwrap_or_default(),
7549                })
7550            }
7551        }
7552        deserializer
7553            .deserialize_struct(
7554                "origincloud.billing.v1beta1.PriceList",
7555                FIELDS,
7556                GeneratedVisitor,
7557            )
7558    }
7559}
7560impl serde::Serialize for ProductCost {
7561    #[allow(deprecated)]
7562    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
7563    where
7564        S: serde::Serializer,
7565    {
7566        use serde::ser::SerializeStruct;
7567        let mut len = 0;
7568        if !self.product_key.is_empty() {
7569            len += 1;
7570        }
7571        if !self.total.is_empty() {
7572            len += 1;
7573        }
7574        if !self.buckets.is_empty() {
7575            len += 1;
7576        }
7577        let mut struct_ser = serializer
7578            .serialize_struct("origincloud.billing.v1beta1.ProductCost", len)?;
7579        if !self.product_key.is_empty() {
7580            struct_ser.serialize_field("productKey", &self.product_key)?;
7581        }
7582        if !self.total.is_empty() {
7583            struct_ser.serialize_field("total", &self.total)?;
7584        }
7585        if !self.buckets.is_empty() {
7586            struct_ser.serialize_field("buckets", &self.buckets)?;
7587        }
7588        struct_ser.end()
7589    }
7590}
7591impl<'de> serde::Deserialize<'de> for ProductCost {
7592    #[allow(deprecated)]
7593    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7594    where
7595        D: serde::Deserializer<'de>,
7596    {
7597        const FIELDS: &[&str] = &["product_key", "productKey", "total", "buckets"];
7598        #[allow(clippy::enum_variant_names)]
7599        enum GeneratedField {
7600            ProductKey,
7601            Total,
7602            Buckets,
7603            __SkipField__,
7604        }
7605        impl<'de> serde::Deserialize<'de> for GeneratedField {
7606            fn deserialize<D>(
7607                deserializer: D,
7608            ) -> std::result::Result<GeneratedField, D::Error>
7609            where
7610                D: serde::Deserializer<'de>,
7611            {
7612                struct GeneratedVisitor;
7613                impl serde::de::Visitor<'_> for GeneratedVisitor {
7614                    type Value = GeneratedField;
7615                    fn expecting(
7616                        &self,
7617                        formatter: &mut std::fmt::Formatter<'_>,
7618                    ) -> std::fmt::Result {
7619                        write!(formatter, "expected one of: {:?}", & FIELDS)
7620                    }
7621                    #[allow(unused_variables)]
7622                    fn visit_str<E>(
7623                        self,
7624                        value: &str,
7625                    ) -> std::result::Result<GeneratedField, E>
7626                    where
7627                        E: serde::de::Error,
7628                    {
7629                        match value {
7630                            "productKey" | "product_key" => {
7631                                Ok(GeneratedField::ProductKey)
7632                            }
7633                            "total" => Ok(GeneratedField::Total),
7634                            "buckets" => Ok(GeneratedField::Buckets),
7635                            _ => Ok(GeneratedField::__SkipField__),
7636                        }
7637                    }
7638                }
7639                deserializer.deserialize_identifier(GeneratedVisitor)
7640            }
7641        }
7642        struct GeneratedVisitor;
7643        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
7644            type Value = ProductCost;
7645            fn expecting(
7646                &self,
7647                formatter: &mut std::fmt::Formatter<'_>,
7648            ) -> std::fmt::Result {
7649                formatter.write_str("struct origincloud.billing.v1beta1.ProductCost")
7650            }
7651            fn visit_map<V>(
7652                self,
7653                mut map_: V,
7654            ) -> std::result::Result<ProductCost, V::Error>
7655            where
7656                V: serde::de::MapAccess<'de>,
7657            {
7658                let mut product_key__ = None;
7659                let mut total__ = None;
7660                let mut buckets__ = None;
7661                while let Some(k) = map_.next_key()? {
7662                    match k {
7663                        GeneratedField::ProductKey => {
7664                            if product_key__.is_some() {
7665                                return Err(serde::de::Error::duplicate_field("productKey"));
7666                            }
7667                            product_key__ = Some(map_.next_value()?);
7668                        }
7669                        GeneratedField::Total => {
7670                            if total__.is_some() {
7671                                return Err(serde::de::Error::duplicate_field("total"));
7672                            }
7673                            total__ = Some(map_.next_value()?);
7674                        }
7675                        GeneratedField::Buckets => {
7676                            if buckets__.is_some() {
7677                                return Err(serde::de::Error::duplicate_field("buckets"));
7678                            }
7679                            buckets__ = Some(map_.next_value()?);
7680                        }
7681                        GeneratedField::__SkipField__ => {
7682                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
7683                        }
7684                    }
7685                }
7686                Ok(ProductCost {
7687                    product_key: product_key__.unwrap_or_default(),
7688                    total: total__.unwrap_or_default(),
7689                    buckets: buckets__.unwrap_or_default(),
7690                })
7691            }
7692        }
7693        deserializer
7694            .deserialize_struct(
7695                "origincloud.billing.v1beta1.ProductCost",
7696                FIELDS,
7697                GeneratedVisitor,
7698            )
7699    }
7700}
7701impl serde::Serialize for ProjectBillingInfo {
7702    #[allow(deprecated)]
7703    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
7704    where
7705        S: serde::Serializer,
7706    {
7707        use serde::ser::SerializeStruct;
7708        let mut len = 0;
7709        if !self.name.is_empty() {
7710            len += 1;
7711        }
7712        if !self.billing_account.is_empty() {
7713            len += 1;
7714        }
7715        let mut struct_ser = serializer
7716            .serialize_struct("origincloud.billing.v1beta1.ProjectBillingInfo", len)?;
7717        if !self.name.is_empty() {
7718            struct_ser.serialize_field("name", &self.name)?;
7719        }
7720        if !self.billing_account.is_empty() {
7721            struct_ser.serialize_field("billingAccount", &self.billing_account)?;
7722        }
7723        struct_ser.end()
7724    }
7725}
7726impl<'de> serde::Deserialize<'de> for ProjectBillingInfo {
7727    #[allow(deprecated)]
7728    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7729    where
7730        D: serde::Deserializer<'de>,
7731    {
7732        const FIELDS: &[&str] = &["name", "billing_account", "billingAccount"];
7733        #[allow(clippy::enum_variant_names)]
7734        enum GeneratedField {
7735            Name,
7736            BillingAccount,
7737            __SkipField__,
7738        }
7739        impl<'de> serde::Deserialize<'de> for GeneratedField {
7740            fn deserialize<D>(
7741                deserializer: D,
7742            ) -> std::result::Result<GeneratedField, D::Error>
7743            where
7744                D: serde::Deserializer<'de>,
7745            {
7746                struct GeneratedVisitor;
7747                impl serde::de::Visitor<'_> for GeneratedVisitor {
7748                    type Value = GeneratedField;
7749                    fn expecting(
7750                        &self,
7751                        formatter: &mut std::fmt::Formatter<'_>,
7752                    ) -> std::fmt::Result {
7753                        write!(formatter, "expected one of: {:?}", & FIELDS)
7754                    }
7755                    #[allow(unused_variables)]
7756                    fn visit_str<E>(
7757                        self,
7758                        value: &str,
7759                    ) -> std::result::Result<GeneratedField, E>
7760                    where
7761                        E: serde::de::Error,
7762                    {
7763                        match value {
7764                            "name" => Ok(GeneratedField::Name),
7765                            "billingAccount" | "billing_account" => {
7766                                Ok(GeneratedField::BillingAccount)
7767                            }
7768                            _ => Ok(GeneratedField::__SkipField__),
7769                        }
7770                    }
7771                }
7772                deserializer.deserialize_identifier(GeneratedVisitor)
7773            }
7774        }
7775        struct GeneratedVisitor;
7776        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
7777            type Value = ProjectBillingInfo;
7778            fn expecting(
7779                &self,
7780                formatter: &mut std::fmt::Formatter<'_>,
7781            ) -> std::fmt::Result {
7782                formatter
7783                    .write_str("struct origincloud.billing.v1beta1.ProjectBillingInfo")
7784            }
7785            fn visit_map<V>(
7786                self,
7787                mut map_: V,
7788            ) -> std::result::Result<ProjectBillingInfo, V::Error>
7789            where
7790                V: serde::de::MapAccess<'de>,
7791            {
7792                let mut name__ = None;
7793                let mut billing_account__ = None;
7794                while let Some(k) = map_.next_key()? {
7795                    match k {
7796                        GeneratedField::Name => {
7797                            if name__.is_some() {
7798                                return Err(serde::de::Error::duplicate_field("name"));
7799                            }
7800                            name__ = Some(map_.next_value()?);
7801                        }
7802                        GeneratedField::BillingAccount => {
7803                            if billing_account__.is_some() {
7804                                return Err(
7805                                    serde::de::Error::duplicate_field("billingAccount"),
7806                                );
7807                            }
7808                            billing_account__ = Some(map_.next_value()?);
7809                        }
7810                        GeneratedField::__SkipField__ => {
7811                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
7812                        }
7813                    }
7814                }
7815                Ok(ProjectBillingInfo {
7816                    name: name__.unwrap_or_default(),
7817                    billing_account: billing_account__.unwrap_or_default(),
7818                })
7819            }
7820        }
7821        deserializer
7822            .deserialize_struct(
7823                "origincloud.billing.v1beta1.ProjectBillingInfo",
7824                FIELDS,
7825                GeneratedVisitor,
7826            )
7827    }
7828}
7829impl serde::Serialize for ProjectCost {
7830    #[allow(deprecated)]
7831    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
7832    where
7833        S: serde::Serializer,
7834    {
7835        use serde::ser::SerializeStruct;
7836        let mut len = 0;
7837        if !self.project.is_empty() {
7838            len += 1;
7839        }
7840        if !self.total.is_empty() {
7841            len += 1;
7842        }
7843        if !self.buckets.is_empty() {
7844            len += 1;
7845        }
7846        let mut struct_ser = serializer
7847            .serialize_struct("origincloud.billing.v1beta1.ProjectCost", len)?;
7848        if !self.project.is_empty() {
7849            struct_ser.serialize_field("project", &self.project)?;
7850        }
7851        if !self.total.is_empty() {
7852            struct_ser.serialize_field("total", &self.total)?;
7853        }
7854        if !self.buckets.is_empty() {
7855            struct_ser.serialize_field("buckets", &self.buckets)?;
7856        }
7857        struct_ser.end()
7858    }
7859}
7860impl<'de> serde::Deserialize<'de> for ProjectCost {
7861    #[allow(deprecated)]
7862    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
7863    where
7864        D: serde::Deserializer<'de>,
7865    {
7866        const FIELDS: &[&str] = &["project", "total", "buckets"];
7867        #[allow(clippy::enum_variant_names)]
7868        enum GeneratedField {
7869            Project,
7870            Total,
7871            Buckets,
7872            __SkipField__,
7873        }
7874        impl<'de> serde::Deserialize<'de> for GeneratedField {
7875            fn deserialize<D>(
7876                deserializer: D,
7877            ) -> std::result::Result<GeneratedField, D::Error>
7878            where
7879                D: serde::Deserializer<'de>,
7880            {
7881                struct GeneratedVisitor;
7882                impl serde::de::Visitor<'_> for GeneratedVisitor {
7883                    type Value = GeneratedField;
7884                    fn expecting(
7885                        &self,
7886                        formatter: &mut std::fmt::Formatter<'_>,
7887                    ) -> std::fmt::Result {
7888                        write!(formatter, "expected one of: {:?}", & FIELDS)
7889                    }
7890                    #[allow(unused_variables)]
7891                    fn visit_str<E>(
7892                        self,
7893                        value: &str,
7894                    ) -> std::result::Result<GeneratedField, E>
7895                    where
7896                        E: serde::de::Error,
7897                    {
7898                        match value {
7899                            "project" => Ok(GeneratedField::Project),
7900                            "total" => Ok(GeneratedField::Total),
7901                            "buckets" => Ok(GeneratedField::Buckets),
7902                            _ => Ok(GeneratedField::__SkipField__),
7903                        }
7904                    }
7905                }
7906                deserializer.deserialize_identifier(GeneratedVisitor)
7907            }
7908        }
7909        struct GeneratedVisitor;
7910        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
7911            type Value = ProjectCost;
7912            fn expecting(
7913                &self,
7914                formatter: &mut std::fmt::Formatter<'_>,
7915            ) -> std::fmt::Result {
7916                formatter.write_str("struct origincloud.billing.v1beta1.ProjectCost")
7917            }
7918            fn visit_map<V>(
7919                self,
7920                mut map_: V,
7921            ) -> std::result::Result<ProjectCost, V::Error>
7922            where
7923                V: serde::de::MapAccess<'de>,
7924            {
7925                let mut project__ = None;
7926                let mut total__ = None;
7927                let mut buckets__ = None;
7928                while let Some(k) = map_.next_key()? {
7929                    match k {
7930                        GeneratedField::Project => {
7931                            if project__.is_some() {
7932                                return Err(serde::de::Error::duplicate_field("project"));
7933                            }
7934                            project__ = Some(map_.next_value()?);
7935                        }
7936                        GeneratedField::Total => {
7937                            if total__.is_some() {
7938                                return Err(serde::de::Error::duplicate_field("total"));
7939                            }
7940                            total__ = Some(map_.next_value()?);
7941                        }
7942                        GeneratedField::Buckets => {
7943                            if buckets__.is_some() {
7944                                return Err(serde::de::Error::duplicate_field("buckets"));
7945                            }
7946                            buckets__ = Some(map_.next_value()?);
7947                        }
7948                        GeneratedField::__SkipField__ => {
7949                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
7950                        }
7951                    }
7952                }
7953                Ok(ProjectCost {
7954                    project: project__.unwrap_or_default(),
7955                    total: total__.unwrap_or_default(),
7956                    buckets: buckets__.unwrap_or_default(),
7957                })
7958            }
7959        }
7960        deserializer
7961            .deserialize_struct(
7962                "origincloud.billing.v1beta1.ProjectCost",
7963                FIELDS,
7964                GeneratedVisitor,
7965            )
7966    }
7967}
7968impl serde::Serialize for QueryBillingAccountCostRequest {
7969    #[allow(deprecated)]
7970    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
7971    where
7972        S: serde::Serializer,
7973    {
7974        use serde::ser::SerializeStruct;
7975        let mut len = 0;
7976        if !self.billing_account.is_empty() {
7977            len += 1;
7978        }
7979        if self.start_time.is_some() {
7980            len += 1;
7981        }
7982        if self.end_time.is_some() {
7983            len += 1;
7984        }
7985        if self.granularity != 0 {
7986            len += 1;
7987        }
7988        let mut struct_ser = serializer
7989            .serialize_struct(
7990                "origincloud.billing.v1beta1.QueryBillingAccountCostRequest",
7991                len,
7992            )?;
7993        if !self.billing_account.is_empty() {
7994            struct_ser.serialize_field("billingAccount", &self.billing_account)?;
7995        }
7996        if let Some(v) = self.start_time.as_ref() {
7997            struct_ser.serialize_field("startTime", v)?;
7998        }
7999        if let Some(v) = self.end_time.as_ref() {
8000            struct_ser.serialize_field("endTime", v)?;
8001        }
8002        if self.granularity != 0 {
8003            let v = Granularity::try_from(self.granularity)
8004                .map_err(|_| serde::ser::Error::custom(
8005                    format!("Invalid variant {}", self.granularity),
8006                ))?;
8007            struct_ser.serialize_field("granularity", &v)?;
8008        }
8009        struct_ser.end()
8010    }
8011}
8012impl<'de> serde::Deserialize<'de> for QueryBillingAccountCostRequest {
8013    #[allow(deprecated)]
8014    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8015    where
8016        D: serde::Deserializer<'de>,
8017    {
8018        const FIELDS: &[&str] = &[
8019            "billing_account",
8020            "billingAccount",
8021            "start_time",
8022            "startTime",
8023            "end_time",
8024            "endTime",
8025            "granularity",
8026        ];
8027        #[allow(clippy::enum_variant_names)]
8028        enum GeneratedField {
8029            BillingAccount,
8030            StartTime,
8031            EndTime,
8032            Granularity,
8033            __SkipField__,
8034        }
8035        impl<'de> serde::Deserialize<'de> for GeneratedField {
8036            fn deserialize<D>(
8037                deserializer: D,
8038            ) -> std::result::Result<GeneratedField, D::Error>
8039            where
8040                D: serde::Deserializer<'de>,
8041            {
8042                struct GeneratedVisitor;
8043                impl serde::de::Visitor<'_> for GeneratedVisitor {
8044                    type Value = GeneratedField;
8045                    fn expecting(
8046                        &self,
8047                        formatter: &mut std::fmt::Formatter<'_>,
8048                    ) -> std::fmt::Result {
8049                        write!(formatter, "expected one of: {:?}", & FIELDS)
8050                    }
8051                    #[allow(unused_variables)]
8052                    fn visit_str<E>(
8053                        self,
8054                        value: &str,
8055                    ) -> std::result::Result<GeneratedField, E>
8056                    where
8057                        E: serde::de::Error,
8058                    {
8059                        match value {
8060                            "billingAccount" | "billing_account" => {
8061                                Ok(GeneratedField::BillingAccount)
8062                            }
8063                            "startTime" | "start_time" => Ok(GeneratedField::StartTime),
8064                            "endTime" | "end_time" => Ok(GeneratedField::EndTime),
8065                            "granularity" => Ok(GeneratedField::Granularity),
8066                            _ => Ok(GeneratedField::__SkipField__),
8067                        }
8068                    }
8069                }
8070                deserializer.deserialize_identifier(GeneratedVisitor)
8071            }
8072        }
8073        struct GeneratedVisitor;
8074        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
8075            type Value = QueryBillingAccountCostRequest;
8076            fn expecting(
8077                &self,
8078                formatter: &mut std::fmt::Formatter<'_>,
8079            ) -> std::fmt::Result {
8080                formatter
8081                    .write_str(
8082                        "struct origincloud.billing.v1beta1.QueryBillingAccountCostRequest",
8083                    )
8084            }
8085            fn visit_map<V>(
8086                self,
8087                mut map_: V,
8088            ) -> std::result::Result<QueryBillingAccountCostRequest, V::Error>
8089            where
8090                V: serde::de::MapAccess<'de>,
8091            {
8092                let mut billing_account__ = None;
8093                let mut start_time__ = None;
8094                let mut end_time__ = None;
8095                let mut granularity__ = None;
8096                while let Some(k) = map_.next_key()? {
8097                    match k {
8098                        GeneratedField::BillingAccount => {
8099                            if billing_account__.is_some() {
8100                                return Err(
8101                                    serde::de::Error::duplicate_field("billingAccount"),
8102                                );
8103                            }
8104                            billing_account__ = Some(map_.next_value()?);
8105                        }
8106                        GeneratedField::StartTime => {
8107                            if start_time__.is_some() {
8108                                return Err(serde::de::Error::duplicate_field("startTime"));
8109                            }
8110                            start_time__ = map_.next_value()?;
8111                        }
8112                        GeneratedField::EndTime => {
8113                            if end_time__.is_some() {
8114                                return Err(serde::de::Error::duplicate_field("endTime"));
8115                            }
8116                            end_time__ = map_.next_value()?;
8117                        }
8118                        GeneratedField::Granularity => {
8119                            if granularity__.is_some() {
8120                                return Err(
8121                                    serde::de::Error::duplicate_field("granularity"),
8122                                );
8123                            }
8124                            granularity__ = Some(
8125                                map_.next_value::<Granularity>()? as i32,
8126                            );
8127                        }
8128                        GeneratedField::__SkipField__ => {
8129                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
8130                        }
8131                    }
8132                }
8133                Ok(QueryBillingAccountCostRequest {
8134                    billing_account: billing_account__.unwrap_or_default(),
8135                    start_time: start_time__,
8136                    end_time: end_time__,
8137                    granularity: granularity__.unwrap_or_default(),
8138                })
8139            }
8140        }
8141        deserializer
8142            .deserialize_struct(
8143                "origincloud.billing.v1beta1.QueryBillingAccountCostRequest",
8144                FIELDS,
8145                GeneratedVisitor,
8146            )
8147    }
8148}
8149impl serde::Serialize for QueryLegalRequirementsRequest {
8150    #[allow(deprecated)]
8151    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
8152    where
8153        S: serde::Serializer,
8154    {
8155        use serde::ser::SerializeStruct;
8156        let mut len = 0;
8157        if !self.name.is_empty() {
8158            len += 1;
8159        }
8160        let mut struct_ser = serializer
8161            .serialize_struct(
8162                "origincloud.billing.v1beta1.QueryLegalRequirementsRequest",
8163                len,
8164            )?;
8165        if !self.name.is_empty() {
8166            struct_ser.serialize_field("name", &self.name)?;
8167        }
8168        struct_ser.end()
8169    }
8170}
8171impl<'de> serde::Deserialize<'de> for QueryLegalRequirementsRequest {
8172    #[allow(deprecated)]
8173    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8174    where
8175        D: serde::Deserializer<'de>,
8176    {
8177        const FIELDS: &[&str] = &["name"];
8178        #[allow(clippy::enum_variant_names)]
8179        enum GeneratedField {
8180            Name,
8181            __SkipField__,
8182        }
8183        impl<'de> serde::Deserialize<'de> for GeneratedField {
8184            fn deserialize<D>(
8185                deserializer: D,
8186            ) -> std::result::Result<GeneratedField, D::Error>
8187            where
8188                D: serde::Deserializer<'de>,
8189            {
8190                struct GeneratedVisitor;
8191                impl serde::de::Visitor<'_> for GeneratedVisitor {
8192                    type Value = GeneratedField;
8193                    fn expecting(
8194                        &self,
8195                        formatter: &mut std::fmt::Formatter<'_>,
8196                    ) -> std::fmt::Result {
8197                        write!(formatter, "expected one of: {:?}", & FIELDS)
8198                    }
8199                    #[allow(unused_variables)]
8200                    fn visit_str<E>(
8201                        self,
8202                        value: &str,
8203                    ) -> std::result::Result<GeneratedField, E>
8204                    where
8205                        E: serde::de::Error,
8206                    {
8207                        match value {
8208                            "name" => Ok(GeneratedField::Name),
8209                            _ => Ok(GeneratedField::__SkipField__),
8210                        }
8211                    }
8212                }
8213                deserializer.deserialize_identifier(GeneratedVisitor)
8214            }
8215        }
8216        struct GeneratedVisitor;
8217        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
8218            type Value = QueryLegalRequirementsRequest;
8219            fn expecting(
8220                &self,
8221                formatter: &mut std::fmt::Formatter<'_>,
8222            ) -> std::fmt::Result {
8223                formatter
8224                    .write_str(
8225                        "struct origincloud.billing.v1beta1.QueryLegalRequirementsRequest",
8226                    )
8227            }
8228            fn visit_map<V>(
8229                self,
8230                mut map_: V,
8231            ) -> std::result::Result<QueryLegalRequirementsRequest, V::Error>
8232            where
8233                V: serde::de::MapAccess<'de>,
8234            {
8235                let mut name__ = None;
8236                while let Some(k) = map_.next_key()? {
8237                    match k {
8238                        GeneratedField::Name => {
8239                            if name__.is_some() {
8240                                return Err(serde::de::Error::duplicate_field("name"));
8241                            }
8242                            name__ = Some(map_.next_value()?);
8243                        }
8244                        GeneratedField::__SkipField__ => {
8245                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
8246                        }
8247                    }
8248                }
8249                Ok(QueryLegalRequirementsRequest {
8250                    name: name__.unwrap_or_default(),
8251                })
8252            }
8253        }
8254        deserializer
8255            .deserialize_struct(
8256                "origincloud.billing.v1beta1.QueryLegalRequirementsRequest",
8257                FIELDS,
8258                GeneratedVisitor,
8259            )
8260    }
8261}
8262impl serde::Serialize for QueryLegalRequirementsResponse {
8263    #[allow(deprecated)]
8264    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
8265    where
8266        S: serde::Serializer,
8267    {
8268        use serde::ser::SerializeStruct;
8269        let mut len = 0;
8270        if !self.requirements.is_empty() {
8271            len += 1;
8272        }
8273        let mut struct_ser = serializer
8274            .serialize_struct(
8275                "origincloud.billing.v1beta1.QueryLegalRequirementsResponse",
8276                len,
8277            )?;
8278        if !self.requirements.is_empty() {
8279            struct_ser.serialize_field("requirements", &self.requirements)?;
8280        }
8281        struct_ser.end()
8282    }
8283}
8284impl<'de> serde::Deserialize<'de> for QueryLegalRequirementsResponse {
8285    #[allow(deprecated)]
8286    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8287    where
8288        D: serde::Deserializer<'de>,
8289    {
8290        const FIELDS: &[&str] = &["requirements"];
8291        #[allow(clippy::enum_variant_names)]
8292        enum GeneratedField {
8293            Requirements,
8294            __SkipField__,
8295        }
8296        impl<'de> serde::Deserialize<'de> for GeneratedField {
8297            fn deserialize<D>(
8298                deserializer: D,
8299            ) -> std::result::Result<GeneratedField, D::Error>
8300            where
8301                D: serde::Deserializer<'de>,
8302            {
8303                struct GeneratedVisitor;
8304                impl serde::de::Visitor<'_> for GeneratedVisitor {
8305                    type Value = GeneratedField;
8306                    fn expecting(
8307                        &self,
8308                        formatter: &mut std::fmt::Formatter<'_>,
8309                    ) -> std::fmt::Result {
8310                        write!(formatter, "expected one of: {:?}", & FIELDS)
8311                    }
8312                    #[allow(unused_variables)]
8313                    fn visit_str<E>(
8314                        self,
8315                        value: &str,
8316                    ) -> std::result::Result<GeneratedField, E>
8317                    where
8318                        E: serde::de::Error,
8319                    {
8320                        match value {
8321                            "requirements" => Ok(GeneratedField::Requirements),
8322                            _ => Ok(GeneratedField::__SkipField__),
8323                        }
8324                    }
8325                }
8326                deserializer.deserialize_identifier(GeneratedVisitor)
8327            }
8328        }
8329        struct GeneratedVisitor;
8330        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
8331            type Value = QueryLegalRequirementsResponse;
8332            fn expecting(
8333                &self,
8334                formatter: &mut std::fmt::Formatter<'_>,
8335            ) -> std::fmt::Result {
8336                formatter
8337                    .write_str(
8338                        "struct origincloud.billing.v1beta1.QueryLegalRequirementsResponse",
8339                    )
8340            }
8341            fn visit_map<V>(
8342                self,
8343                mut map_: V,
8344            ) -> std::result::Result<QueryLegalRequirementsResponse, V::Error>
8345            where
8346                V: serde::de::MapAccess<'de>,
8347            {
8348                let mut requirements__ = None;
8349                while let Some(k) = map_.next_key()? {
8350                    match k {
8351                        GeneratedField::Requirements => {
8352                            if requirements__.is_some() {
8353                                return Err(
8354                                    serde::de::Error::duplicate_field("requirements"),
8355                                );
8356                            }
8357                            requirements__ = Some(map_.next_value()?);
8358                        }
8359                        GeneratedField::__SkipField__ => {
8360                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
8361                        }
8362                    }
8363                }
8364                Ok(QueryLegalRequirementsResponse {
8365                    requirements: requirements__.unwrap_or_default(),
8366                })
8367            }
8368        }
8369        deserializer
8370            .deserialize_struct(
8371                "origincloud.billing.v1beta1.QueryLegalRequirementsResponse",
8372                FIELDS,
8373                GeneratedVisitor,
8374            )
8375    }
8376}
8377impl serde::Serialize for QueryOrganizationCostRequest {
8378    #[allow(deprecated)]
8379    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
8380    where
8381        S: serde::Serializer,
8382    {
8383        use serde::ser::SerializeStruct;
8384        let mut len = 0;
8385        if !self.organization.is_empty() {
8386            len += 1;
8387        }
8388        if self.start_time.is_some() {
8389            len += 1;
8390        }
8391        if self.end_time.is_some() {
8392            len += 1;
8393        }
8394        if self.granularity != 0 {
8395            len += 1;
8396        }
8397        let mut struct_ser = serializer
8398            .serialize_struct(
8399                "origincloud.billing.v1beta1.QueryOrganizationCostRequest",
8400                len,
8401            )?;
8402        if !self.organization.is_empty() {
8403            struct_ser.serialize_field("organization", &self.organization)?;
8404        }
8405        if let Some(v) = self.start_time.as_ref() {
8406            struct_ser.serialize_field("startTime", v)?;
8407        }
8408        if let Some(v) = self.end_time.as_ref() {
8409            struct_ser.serialize_field("endTime", v)?;
8410        }
8411        if self.granularity != 0 {
8412            let v = Granularity::try_from(self.granularity)
8413                .map_err(|_| serde::ser::Error::custom(
8414                    format!("Invalid variant {}", self.granularity),
8415                ))?;
8416            struct_ser.serialize_field("granularity", &v)?;
8417        }
8418        struct_ser.end()
8419    }
8420}
8421impl<'de> serde::Deserialize<'de> for QueryOrganizationCostRequest {
8422    #[allow(deprecated)]
8423    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8424    where
8425        D: serde::Deserializer<'de>,
8426    {
8427        const FIELDS: &[&str] = &[
8428            "organization",
8429            "start_time",
8430            "startTime",
8431            "end_time",
8432            "endTime",
8433            "granularity",
8434        ];
8435        #[allow(clippy::enum_variant_names)]
8436        enum GeneratedField {
8437            Organization,
8438            StartTime,
8439            EndTime,
8440            Granularity,
8441            __SkipField__,
8442        }
8443        impl<'de> serde::Deserialize<'de> for GeneratedField {
8444            fn deserialize<D>(
8445                deserializer: D,
8446            ) -> std::result::Result<GeneratedField, D::Error>
8447            where
8448                D: serde::Deserializer<'de>,
8449            {
8450                struct GeneratedVisitor;
8451                impl serde::de::Visitor<'_> for GeneratedVisitor {
8452                    type Value = GeneratedField;
8453                    fn expecting(
8454                        &self,
8455                        formatter: &mut std::fmt::Formatter<'_>,
8456                    ) -> std::fmt::Result {
8457                        write!(formatter, "expected one of: {:?}", & FIELDS)
8458                    }
8459                    #[allow(unused_variables)]
8460                    fn visit_str<E>(
8461                        self,
8462                        value: &str,
8463                    ) -> std::result::Result<GeneratedField, E>
8464                    where
8465                        E: serde::de::Error,
8466                    {
8467                        match value {
8468                            "organization" => Ok(GeneratedField::Organization),
8469                            "startTime" | "start_time" => Ok(GeneratedField::StartTime),
8470                            "endTime" | "end_time" => Ok(GeneratedField::EndTime),
8471                            "granularity" => Ok(GeneratedField::Granularity),
8472                            _ => Ok(GeneratedField::__SkipField__),
8473                        }
8474                    }
8475                }
8476                deserializer.deserialize_identifier(GeneratedVisitor)
8477            }
8478        }
8479        struct GeneratedVisitor;
8480        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
8481            type Value = QueryOrganizationCostRequest;
8482            fn expecting(
8483                &self,
8484                formatter: &mut std::fmt::Formatter<'_>,
8485            ) -> std::fmt::Result {
8486                formatter
8487                    .write_str(
8488                        "struct origincloud.billing.v1beta1.QueryOrganizationCostRequest",
8489                    )
8490            }
8491            fn visit_map<V>(
8492                self,
8493                mut map_: V,
8494            ) -> std::result::Result<QueryOrganizationCostRequest, V::Error>
8495            where
8496                V: serde::de::MapAccess<'de>,
8497            {
8498                let mut organization__ = None;
8499                let mut start_time__ = None;
8500                let mut end_time__ = None;
8501                let mut granularity__ = None;
8502                while let Some(k) = map_.next_key()? {
8503                    match k {
8504                        GeneratedField::Organization => {
8505                            if organization__.is_some() {
8506                                return Err(
8507                                    serde::de::Error::duplicate_field("organization"),
8508                                );
8509                            }
8510                            organization__ = Some(map_.next_value()?);
8511                        }
8512                        GeneratedField::StartTime => {
8513                            if start_time__.is_some() {
8514                                return Err(serde::de::Error::duplicate_field("startTime"));
8515                            }
8516                            start_time__ = map_.next_value()?;
8517                        }
8518                        GeneratedField::EndTime => {
8519                            if end_time__.is_some() {
8520                                return Err(serde::de::Error::duplicate_field("endTime"));
8521                            }
8522                            end_time__ = map_.next_value()?;
8523                        }
8524                        GeneratedField::Granularity => {
8525                            if granularity__.is_some() {
8526                                return Err(
8527                                    serde::de::Error::duplicate_field("granularity"),
8528                                );
8529                            }
8530                            granularity__ = Some(
8531                                map_.next_value::<Granularity>()? as i32,
8532                            );
8533                        }
8534                        GeneratedField::__SkipField__ => {
8535                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
8536                        }
8537                    }
8538                }
8539                Ok(QueryOrganizationCostRequest {
8540                    organization: organization__.unwrap_or_default(),
8541                    start_time: start_time__,
8542                    end_time: end_time__,
8543                    granularity: granularity__.unwrap_or_default(),
8544                })
8545            }
8546        }
8547        deserializer
8548            .deserialize_struct(
8549                "origincloud.billing.v1beta1.QueryOrganizationCostRequest",
8550                FIELDS,
8551                GeneratedVisitor,
8552            )
8553    }
8554}
8555impl serde::Serialize for QueryProjectCostRequest {
8556    #[allow(deprecated)]
8557    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
8558    where
8559        S: serde::Serializer,
8560    {
8561        use serde::ser::SerializeStruct;
8562        let mut len = 0;
8563        if !self.project.is_empty() {
8564            len += 1;
8565        }
8566        if self.start_time.is_some() {
8567            len += 1;
8568        }
8569        if self.end_time.is_some() {
8570            len += 1;
8571        }
8572        if self.granularity != 0 {
8573            len += 1;
8574        }
8575        let mut struct_ser = serializer
8576            .serialize_struct(
8577                "origincloud.billing.v1beta1.QueryProjectCostRequest",
8578                len,
8579            )?;
8580        if !self.project.is_empty() {
8581            struct_ser.serialize_field("project", &self.project)?;
8582        }
8583        if let Some(v) = self.start_time.as_ref() {
8584            struct_ser.serialize_field("startTime", v)?;
8585        }
8586        if let Some(v) = self.end_time.as_ref() {
8587            struct_ser.serialize_field("endTime", v)?;
8588        }
8589        if self.granularity != 0 {
8590            let v = Granularity::try_from(self.granularity)
8591                .map_err(|_| serde::ser::Error::custom(
8592                    format!("Invalid variant {}", self.granularity),
8593                ))?;
8594            struct_ser.serialize_field("granularity", &v)?;
8595        }
8596        struct_ser.end()
8597    }
8598}
8599impl<'de> serde::Deserialize<'de> for QueryProjectCostRequest {
8600    #[allow(deprecated)]
8601    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8602    where
8603        D: serde::Deserializer<'de>,
8604    {
8605        const FIELDS: &[&str] = &[
8606            "project",
8607            "start_time",
8608            "startTime",
8609            "end_time",
8610            "endTime",
8611            "granularity",
8612        ];
8613        #[allow(clippy::enum_variant_names)]
8614        enum GeneratedField {
8615            Project,
8616            StartTime,
8617            EndTime,
8618            Granularity,
8619            __SkipField__,
8620        }
8621        impl<'de> serde::Deserialize<'de> for GeneratedField {
8622            fn deserialize<D>(
8623                deserializer: D,
8624            ) -> std::result::Result<GeneratedField, D::Error>
8625            where
8626                D: serde::Deserializer<'de>,
8627            {
8628                struct GeneratedVisitor;
8629                impl serde::de::Visitor<'_> for GeneratedVisitor {
8630                    type Value = GeneratedField;
8631                    fn expecting(
8632                        &self,
8633                        formatter: &mut std::fmt::Formatter<'_>,
8634                    ) -> std::fmt::Result {
8635                        write!(formatter, "expected one of: {:?}", & FIELDS)
8636                    }
8637                    #[allow(unused_variables)]
8638                    fn visit_str<E>(
8639                        self,
8640                        value: &str,
8641                    ) -> std::result::Result<GeneratedField, E>
8642                    where
8643                        E: serde::de::Error,
8644                    {
8645                        match value {
8646                            "project" => Ok(GeneratedField::Project),
8647                            "startTime" | "start_time" => Ok(GeneratedField::StartTime),
8648                            "endTime" | "end_time" => Ok(GeneratedField::EndTime),
8649                            "granularity" => Ok(GeneratedField::Granularity),
8650                            _ => Ok(GeneratedField::__SkipField__),
8651                        }
8652                    }
8653                }
8654                deserializer.deserialize_identifier(GeneratedVisitor)
8655            }
8656        }
8657        struct GeneratedVisitor;
8658        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
8659            type Value = QueryProjectCostRequest;
8660            fn expecting(
8661                &self,
8662                formatter: &mut std::fmt::Formatter<'_>,
8663            ) -> std::fmt::Result {
8664                formatter
8665                    .write_str(
8666                        "struct origincloud.billing.v1beta1.QueryProjectCostRequest",
8667                    )
8668            }
8669            fn visit_map<V>(
8670                self,
8671                mut map_: V,
8672            ) -> std::result::Result<QueryProjectCostRequest, V::Error>
8673            where
8674                V: serde::de::MapAccess<'de>,
8675            {
8676                let mut project__ = None;
8677                let mut start_time__ = None;
8678                let mut end_time__ = None;
8679                let mut granularity__ = None;
8680                while let Some(k) = map_.next_key()? {
8681                    match k {
8682                        GeneratedField::Project => {
8683                            if project__.is_some() {
8684                                return Err(serde::de::Error::duplicate_field("project"));
8685                            }
8686                            project__ = Some(map_.next_value()?);
8687                        }
8688                        GeneratedField::StartTime => {
8689                            if start_time__.is_some() {
8690                                return Err(serde::de::Error::duplicate_field("startTime"));
8691                            }
8692                            start_time__ = map_.next_value()?;
8693                        }
8694                        GeneratedField::EndTime => {
8695                            if end_time__.is_some() {
8696                                return Err(serde::de::Error::duplicate_field("endTime"));
8697                            }
8698                            end_time__ = map_.next_value()?;
8699                        }
8700                        GeneratedField::Granularity => {
8701                            if granularity__.is_some() {
8702                                return Err(
8703                                    serde::de::Error::duplicate_field("granularity"),
8704                                );
8705                            }
8706                            granularity__ = Some(
8707                                map_.next_value::<Granularity>()? as i32,
8708                            );
8709                        }
8710                        GeneratedField::__SkipField__ => {
8711                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
8712                        }
8713                    }
8714                }
8715                Ok(QueryProjectCostRequest {
8716                    project: project__.unwrap_or_default(),
8717                    start_time: start_time__,
8718                    end_time: end_time__,
8719                    granularity: granularity__.unwrap_or_default(),
8720                })
8721            }
8722        }
8723        deserializer
8724            .deserialize_struct(
8725                "origincloud.billing.v1beta1.QueryProjectCostRequest",
8726                FIELDS,
8727                GeneratedVisitor,
8728            )
8729    }
8730}
8731impl serde::Serialize for QueryProjectUsageRequest {
8732    #[allow(deprecated)]
8733    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
8734    where
8735        S: serde::Serializer,
8736    {
8737        use serde::ser::SerializeStruct;
8738        let mut len = 0;
8739        if !self.project.is_empty() {
8740            len += 1;
8741        }
8742        if self.start_time.is_some() {
8743            len += 1;
8744        }
8745        if self.end_time.is_some() {
8746            len += 1;
8747        }
8748        if self.page_size != 0 {
8749            len += 1;
8750        }
8751        if !self.page_token.is_empty() {
8752            len += 1;
8753        }
8754        let mut struct_ser = serializer
8755            .serialize_struct(
8756                "origincloud.billing.v1beta1.QueryProjectUsageRequest",
8757                len,
8758            )?;
8759        if !self.project.is_empty() {
8760            struct_ser.serialize_field("project", &self.project)?;
8761        }
8762        if let Some(v) = self.start_time.as_ref() {
8763            struct_ser.serialize_field("startTime", v)?;
8764        }
8765        if let Some(v) = self.end_time.as_ref() {
8766            struct_ser.serialize_field("endTime", v)?;
8767        }
8768        if self.page_size != 0 {
8769            struct_ser.serialize_field("pageSize", &self.page_size)?;
8770        }
8771        if !self.page_token.is_empty() {
8772            struct_ser.serialize_field("pageToken", &self.page_token)?;
8773        }
8774        struct_ser.end()
8775    }
8776}
8777impl<'de> serde::Deserialize<'de> for QueryProjectUsageRequest {
8778    #[allow(deprecated)]
8779    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8780    where
8781        D: serde::Deserializer<'de>,
8782    {
8783        const FIELDS: &[&str] = &[
8784            "project",
8785            "start_time",
8786            "startTime",
8787            "end_time",
8788            "endTime",
8789            "page_size",
8790            "pageSize",
8791            "page_token",
8792            "pageToken",
8793        ];
8794        #[allow(clippy::enum_variant_names)]
8795        enum GeneratedField {
8796            Project,
8797            StartTime,
8798            EndTime,
8799            PageSize,
8800            PageToken,
8801            __SkipField__,
8802        }
8803        impl<'de> serde::Deserialize<'de> for GeneratedField {
8804            fn deserialize<D>(
8805                deserializer: D,
8806            ) -> std::result::Result<GeneratedField, D::Error>
8807            where
8808                D: serde::Deserializer<'de>,
8809            {
8810                struct GeneratedVisitor;
8811                impl serde::de::Visitor<'_> for GeneratedVisitor {
8812                    type Value = GeneratedField;
8813                    fn expecting(
8814                        &self,
8815                        formatter: &mut std::fmt::Formatter<'_>,
8816                    ) -> std::fmt::Result {
8817                        write!(formatter, "expected one of: {:?}", & FIELDS)
8818                    }
8819                    #[allow(unused_variables)]
8820                    fn visit_str<E>(
8821                        self,
8822                        value: &str,
8823                    ) -> std::result::Result<GeneratedField, E>
8824                    where
8825                        E: serde::de::Error,
8826                    {
8827                        match value {
8828                            "project" => Ok(GeneratedField::Project),
8829                            "startTime" | "start_time" => Ok(GeneratedField::StartTime),
8830                            "endTime" | "end_time" => Ok(GeneratedField::EndTime),
8831                            "pageSize" | "page_size" => Ok(GeneratedField::PageSize),
8832                            "pageToken" | "page_token" => Ok(GeneratedField::PageToken),
8833                            _ => Ok(GeneratedField::__SkipField__),
8834                        }
8835                    }
8836                }
8837                deserializer.deserialize_identifier(GeneratedVisitor)
8838            }
8839        }
8840        struct GeneratedVisitor;
8841        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
8842            type Value = QueryProjectUsageRequest;
8843            fn expecting(
8844                &self,
8845                formatter: &mut std::fmt::Formatter<'_>,
8846            ) -> std::fmt::Result {
8847                formatter
8848                    .write_str(
8849                        "struct origincloud.billing.v1beta1.QueryProjectUsageRequest",
8850                    )
8851            }
8852            fn visit_map<V>(
8853                self,
8854                mut map_: V,
8855            ) -> std::result::Result<QueryProjectUsageRequest, V::Error>
8856            where
8857                V: serde::de::MapAccess<'de>,
8858            {
8859                let mut project__ = None;
8860                let mut start_time__ = None;
8861                let mut end_time__ = None;
8862                let mut page_size__ = None;
8863                let mut page_token__ = None;
8864                while let Some(k) = map_.next_key()? {
8865                    match k {
8866                        GeneratedField::Project => {
8867                            if project__.is_some() {
8868                                return Err(serde::de::Error::duplicate_field("project"));
8869                            }
8870                            project__ = Some(map_.next_value()?);
8871                        }
8872                        GeneratedField::StartTime => {
8873                            if start_time__.is_some() {
8874                                return Err(serde::de::Error::duplicate_field("startTime"));
8875                            }
8876                            start_time__ = map_.next_value()?;
8877                        }
8878                        GeneratedField::EndTime => {
8879                            if end_time__.is_some() {
8880                                return Err(serde::de::Error::duplicate_field("endTime"));
8881                            }
8882                            end_time__ = map_.next_value()?;
8883                        }
8884                        GeneratedField::PageSize => {
8885                            if page_size__.is_some() {
8886                                return Err(serde::de::Error::duplicate_field("pageSize"));
8887                            }
8888                            page_size__ = Some(
8889                                map_
8890                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
8891                                    .0,
8892                            );
8893                        }
8894                        GeneratedField::PageToken => {
8895                            if page_token__.is_some() {
8896                                return Err(serde::de::Error::duplicate_field("pageToken"));
8897                            }
8898                            page_token__ = Some(map_.next_value()?);
8899                        }
8900                        GeneratedField::__SkipField__ => {
8901                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
8902                        }
8903                    }
8904                }
8905                Ok(QueryProjectUsageRequest {
8906                    project: project__.unwrap_or_default(),
8907                    start_time: start_time__,
8908                    end_time: end_time__,
8909                    page_size: page_size__.unwrap_or_default(),
8910                    page_token: page_token__.unwrap_or_default(),
8911                })
8912            }
8913        }
8914        deserializer
8915            .deserialize_struct(
8916                "origincloud.billing.v1beta1.QueryProjectUsageRequest",
8917                FIELDS,
8918                GeneratedVisitor,
8919            )
8920    }
8921}
8922impl serde::Serialize for QueryProjectUsageResponse {
8923    #[allow(deprecated)]
8924    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
8925    where
8926        S: serde::Serializer,
8927    {
8928        use serde::ser::SerializeStruct;
8929        let mut len = 0;
8930        if !self.usage_records.is_empty() {
8931            len += 1;
8932        }
8933        if !self.next_page_token.is_empty() {
8934            len += 1;
8935        }
8936        let mut struct_ser = serializer
8937            .serialize_struct(
8938                "origincloud.billing.v1beta1.QueryProjectUsageResponse",
8939                len,
8940            )?;
8941        if !self.usage_records.is_empty() {
8942            struct_ser.serialize_field("usageRecords", &self.usage_records)?;
8943        }
8944        if !self.next_page_token.is_empty() {
8945            struct_ser.serialize_field("nextPageToken", &self.next_page_token)?;
8946        }
8947        struct_ser.end()
8948    }
8949}
8950impl<'de> serde::Deserialize<'de> for QueryProjectUsageResponse {
8951    #[allow(deprecated)]
8952    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
8953    where
8954        D: serde::Deserializer<'de>,
8955    {
8956        const FIELDS: &[&str] = &[
8957            "usage_records",
8958            "usageRecords",
8959            "next_page_token",
8960            "nextPageToken",
8961        ];
8962        #[allow(clippy::enum_variant_names)]
8963        enum GeneratedField {
8964            UsageRecords,
8965            NextPageToken,
8966            __SkipField__,
8967        }
8968        impl<'de> serde::Deserialize<'de> for GeneratedField {
8969            fn deserialize<D>(
8970                deserializer: D,
8971            ) -> std::result::Result<GeneratedField, D::Error>
8972            where
8973                D: serde::Deserializer<'de>,
8974            {
8975                struct GeneratedVisitor;
8976                impl serde::de::Visitor<'_> for GeneratedVisitor {
8977                    type Value = GeneratedField;
8978                    fn expecting(
8979                        &self,
8980                        formatter: &mut std::fmt::Formatter<'_>,
8981                    ) -> std::fmt::Result {
8982                        write!(formatter, "expected one of: {:?}", & FIELDS)
8983                    }
8984                    #[allow(unused_variables)]
8985                    fn visit_str<E>(
8986                        self,
8987                        value: &str,
8988                    ) -> std::result::Result<GeneratedField, E>
8989                    where
8990                        E: serde::de::Error,
8991                    {
8992                        match value {
8993                            "usageRecords" | "usage_records" => {
8994                                Ok(GeneratedField::UsageRecords)
8995                            }
8996                            "nextPageToken" | "next_page_token" => {
8997                                Ok(GeneratedField::NextPageToken)
8998                            }
8999                            _ => Ok(GeneratedField::__SkipField__),
9000                        }
9001                    }
9002                }
9003                deserializer.deserialize_identifier(GeneratedVisitor)
9004            }
9005        }
9006        struct GeneratedVisitor;
9007        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
9008            type Value = QueryProjectUsageResponse;
9009            fn expecting(
9010                &self,
9011                formatter: &mut std::fmt::Formatter<'_>,
9012            ) -> std::fmt::Result {
9013                formatter
9014                    .write_str(
9015                        "struct origincloud.billing.v1beta1.QueryProjectUsageResponse",
9016                    )
9017            }
9018            fn visit_map<V>(
9019                self,
9020                mut map_: V,
9021            ) -> std::result::Result<QueryProjectUsageResponse, V::Error>
9022            where
9023                V: serde::de::MapAccess<'de>,
9024            {
9025                let mut usage_records__ = None;
9026                let mut next_page_token__ = None;
9027                while let Some(k) = map_.next_key()? {
9028                    match k {
9029                        GeneratedField::UsageRecords => {
9030                            if usage_records__.is_some() {
9031                                return Err(
9032                                    serde::de::Error::duplicate_field("usageRecords"),
9033                                );
9034                            }
9035                            usage_records__ = Some(map_.next_value()?);
9036                        }
9037                        GeneratedField::NextPageToken => {
9038                            if next_page_token__.is_some() {
9039                                return Err(
9040                                    serde::de::Error::duplicate_field("nextPageToken"),
9041                                );
9042                            }
9043                            next_page_token__ = Some(map_.next_value()?);
9044                        }
9045                        GeneratedField::__SkipField__ => {
9046                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
9047                        }
9048                    }
9049                }
9050                Ok(QueryProjectUsageResponse {
9051                    usage_records: usage_records__.unwrap_or_default(),
9052                    next_page_token: next_page_token__.unwrap_or_default(),
9053                })
9054            }
9055        }
9056        deserializer
9057            .deserialize_struct(
9058                "origincloud.billing.v1beta1.QueryProjectUsageResponse",
9059                FIELDS,
9060                GeneratedVisitor,
9061            )
9062    }
9063}
9064impl serde::Serialize for ServiceCost {
9065    #[allow(deprecated)]
9066    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
9067    where
9068        S: serde::Serializer,
9069    {
9070        use serde::ser::SerializeStruct;
9071        let mut len = 0;
9072        if !self.service.is_empty() {
9073            len += 1;
9074        }
9075        if !self.total.is_empty() {
9076            len += 1;
9077        }
9078        if !self.products.is_empty() {
9079            len += 1;
9080        }
9081        let mut struct_ser = serializer
9082            .serialize_struct("origincloud.billing.v1beta1.ServiceCost", len)?;
9083        if !self.service.is_empty() {
9084            struct_ser.serialize_field("service", &self.service)?;
9085        }
9086        if !self.total.is_empty() {
9087            struct_ser.serialize_field("total", &self.total)?;
9088        }
9089        if !self.products.is_empty() {
9090            struct_ser.serialize_field("products", &self.products)?;
9091        }
9092        struct_ser.end()
9093    }
9094}
9095impl<'de> serde::Deserialize<'de> for ServiceCost {
9096    #[allow(deprecated)]
9097    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9098    where
9099        D: serde::Deserializer<'de>,
9100    {
9101        const FIELDS: &[&str] = &["service", "total", "products"];
9102        #[allow(clippy::enum_variant_names)]
9103        enum GeneratedField {
9104            Service,
9105            Total,
9106            Products,
9107            __SkipField__,
9108        }
9109        impl<'de> serde::Deserialize<'de> for GeneratedField {
9110            fn deserialize<D>(
9111                deserializer: D,
9112            ) -> std::result::Result<GeneratedField, D::Error>
9113            where
9114                D: serde::Deserializer<'de>,
9115            {
9116                struct GeneratedVisitor;
9117                impl serde::de::Visitor<'_> for GeneratedVisitor {
9118                    type Value = GeneratedField;
9119                    fn expecting(
9120                        &self,
9121                        formatter: &mut std::fmt::Formatter<'_>,
9122                    ) -> std::fmt::Result {
9123                        write!(formatter, "expected one of: {:?}", & FIELDS)
9124                    }
9125                    #[allow(unused_variables)]
9126                    fn visit_str<E>(
9127                        self,
9128                        value: &str,
9129                    ) -> std::result::Result<GeneratedField, E>
9130                    where
9131                        E: serde::de::Error,
9132                    {
9133                        match value {
9134                            "service" => Ok(GeneratedField::Service),
9135                            "total" => Ok(GeneratedField::Total),
9136                            "products" => Ok(GeneratedField::Products),
9137                            _ => Ok(GeneratedField::__SkipField__),
9138                        }
9139                    }
9140                }
9141                deserializer.deserialize_identifier(GeneratedVisitor)
9142            }
9143        }
9144        struct GeneratedVisitor;
9145        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
9146            type Value = ServiceCost;
9147            fn expecting(
9148                &self,
9149                formatter: &mut std::fmt::Formatter<'_>,
9150            ) -> std::fmt::Result {
9151                formatter.write_str("struct origincloud.billing.v1beta1.ServiceCost")
9152            }
9153            fn visit_map<V>(
9154                self,
9155                mut map_: V,
9156            ) -> std::result::Result<ServiceCost, V::Error>
9157            where
9158                V: serde::de::MapAccess<'de>,
9159            {
9160                let mut service__ = None;
9161                let mut total__ = None;
9162                let mut products__ = None;
9163                while let Some(k) = map_.next_key()? {
9164                    match k {
9165                        GeneratedField::Service => {
9166                            if service__.is_some() {
9167                                return Err(serde::de::Error::duplicate_field("service"));
9168                            }
9169                            service__ = Some(map_.next_value()?);
9170                        }
9171                        GeneratedField::Total => {
9172                            if total__.is_some() {
9173                                return Err(serde::de::Error::duplicate_field("total"));
9174                            }
9175                            total__ = Some(map_.next_value()?);
9176                        }
9177                        GeneratedField::Products => {
9178                            if products__.is_some() {
9179                                return Err(serde::de::Error::duplicate_field("products"));
9180                            }
9181                            products__ = Some(map_.next_value()?);
9182                        }
9183                        GeneratedField::__SkipField__ => {
9184                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
9185                        }
9186                    }
9187                }
9188                Ok(ServiceCost {
9189                    service: service__.unwrap_or_default(),
9190                    total: total__.unwrap_or_default(),
9191                    products: products__.unwrap_or_default(),
9192                })
9193            }
9194        }
9195        deserializer
9196            .deserialize_struct(
9197                "origincloud.billing.v1beta1.ServiceCost",
9198                FIELDS,
9199                GeneratedVisitor,
9200            )
9201    }
9202}
9203impl serde::Serialize for SpendLimit {
9204    #[allow(deprecated)]
9205    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
9206    where
9207        S: serde::Serializer,
9208    {
9209        use serde::ser::SerializeStruct;
9210        let mut len = 0;
9211        if !self.name.is_empty() {
9212            len += 1;
9213        }
9214        if self.limit.is_some() {
9215            len += 1;
9216        }
9217        if !self.alert_thresholds_percent.is_empty() {
9218            len += 1;
9219        }
9220        if !self.notification_emails.is_empty() {
9221            len += 1;
9222        }
9223        if self.update_time.is_some() {
9224            len += 1;
9225        }
9226        let mut struct_ser = serializer
9227            .serialize_struct("origincloud.billing.v1beta1.SpendLimit", len)?;
9228        if !self.name.is_empty() {
9229            struct_ser.serialize_field("name", &self.name)?;
9230        }
9231        if let Some(v) = self.limit.as_ref() {
9232            struct_ser.serialize_field("limit", v)?;
9233        }
9234        if !self.alert_thresholds_percent.is_empty() {
9235            struct_ser
9236                .serialize_field(
9237                    "alertThresholdsPercent",
9238                    &self.alert_thresholds_percent,
9239                )?;
9240        }
9241        if !self.notification_emails.is_empty() {
9242            struct_ser.serialize_field("notificationEmails", &self.notification_emails)?;
9243        }
9244        if let Some(v) = self.update_time.as_ref() {
9245            struct_ser.serialize_field("updateTime", v)?;
9246        }
9247        struct_ser.end()
9248    }
9249}
9250impl<'de> serde::Deserialize<'de> for SpendLimit {
9251    #[allow(deprecated)]
9252    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9253    where
9254        D: serde::Deserializer<'de>,
9255    {
9256        const FIELDS: &[&str] = &[
9257            "name",
9258            "limit",
9259            "alert_thresholds_percent",
9260            "alertThresholdsPercent",
9261            "notification_emails",
9262            "notificationEmails",
9263            "update_time",
9264            "updateTime",
9265        ];
9266        #[allow(clippy::enum_variant_names)]
9267        enum GeneratedField {
9268            Name,
9269            Limit,
9270            AlertThresholdsPercent,
9271            NotificationEmails,
9272            UpdateTime,
9273            __SkipField__,
9274        }
9275        impl<'de> serde::Deserialize<'de> for GeneratedField {
9276            fn deserialize<D>(
9277                deserializer: D,
9278            ) -> std::result::Result<GeneratedField, D::Error>
9279            where
9280                D: serde::Deserializer<'de>,
9281            {
9282                struct GeneratedVisitor;
9283                impl serde::de::Visitor<'_> for GeneratedVisitor {
9284                    type Value = GeneratedField;
9285                    fn expecting(
9286                        &self,
9287                        formatter: &mut std::fmt::Formatter<'_>,
9288                    ) -> std::fmt::Result {
9289                        write!(formatter, "expected one of: {:?}", & FIELDS)
9290                    }
9291                    #[allow(unused_variables)]
9292                    fn visit_str<E>(
9293                        self,
9294                        value: &str,
9295                    ) -> std::result::Result<GeneratedField, E>
9296                    where
9297                        E: serde::de::Error,
9298                    {
9299                        match value {
9300                            "name" => Ok(GeneratedField::Name),
9301                            "limit" => Ok(GeneratedField::Limit),
9302                            "alertThresholdsPercent" | "alert_thresholds_percent" => {
9303                                Ok(GeneratedField::AlertThresholdsPercent)
9304                            }
9305                            "notificationEmails" | "notification_emails" => {
9306                                Ok(GeneratedField::NotificationEmails)
9307                            }
9308                            "updateTime" | "update_time" => {
9309                                Ok(GeneratedField::UpdateTime)
9310                            }
9311                            _ => Ok(GeneratedField::__SkipField__),
9312                        }
9313                    }
9314                }
9315                deserializer.deserialize_identifier(GeneratedVisitor)
9316            }
9317        }
9318        struct GeneratedVisitor;
9319        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
9320            type Value = SpendLimit;
9321            fn expecting(
9322                &self,
9323                formatter: &mut std::fmt::Formatter<'_>,
9324            ) -> std::fmt::Result {
9325                formatter.write_str("struct origincloud.billing.v1beta1.SpendLimit")
9326            }
9327            fn visit_map<V>(
9328                self,
9329                mut map_: V,
9330            ) -> std::result::Result<SpendLimit, V::Error>
9331            where
9332                V: serde::de::MapAccess<'de>,
9333            {
9334                let mut name__ = None;
9335                let mut limit__ = None;
9336                let mut alert_thresholds_percent__ = None;
9337                let mut notification_emails__ = None;
9338                let mut update_time__ = None;
9339                while let Some(k) = map_.next_key()? {
9340                    match k {
9341                        GeneratedField::Name => {
9342                            if name__.is_some() {
9343                                return Err(serde::de::Error::duplicate_field("name"));
9344                            }
9345                            name__ = Some(map_.next_value()?);
9346                        }
9347                        GeneratedField::Limit => {
9348                            if limit__.is_some() {
9349                                return Err(serde::de::Error::duplicate_field("limit"));
9350                            }
9351                            limit__ = map_.next_value()?;
9352                        }
9353                        GeneratedField::AlertThresholdsPercent => {
9354                            if alert_thresholds_percent__.is_some() {
9355                                return Err(
9356                                    serde::de::Error::duplicate_field("alertThresholdsPercent"),
9357                                );
9358                            }
9359                            alert_thresholds_percent__ = Some(
9360                                map_
9361                                    .next_value::<
9362                                        Vec<::pbjson::private::NumberDeserialize<_>>,
9363                                    >()?
9364                                    .into_iter()
9365                                    .map(|x| x.0)
9366                                    .collect(),
9367                            );
9368                        }
9369                        GeneratedField::NotificationEmails => {
9370                            if notification_emails__.is_some() {
9371                                return Err(
9372                                    serde::de::Error::duplicate_field("notificationEmails"),
9373                                );
9374                            }
9375                            notification_emails__ = Some(map_.next_value()?);
9376                        }
9377                        GeneratedField::UpdateTime => {
9378                            if update_time__.is_some() {
9379                                return Err(serde::de::Error::duplicate_field("updateTime"));
9380                            }
9381                            update_time__ = map_.next_value()?;
9382                        }
9383                        GeneratedField::__SkipField__ => {
9384                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
9385                        }
9386                    }
9387                }
9388                Ok(SpendLimit {
9389                    name: name__.unwrap_or_default(),
9390                    limit: limit__,
9391                    alert_thresholds_percent: alert_thresholds_percent__
9392                        .unwrap_or_default(),
9393                    notification_emails: notification_emails__.unwrap_or_default(),
9394                    update_time: update_time__,
9395                })
9396            }
9397        }
9398        deserializer
9399            .deserialize_struct(
9400                "origincloud.billing.v1beta1.SpendLimit",
9401                FIELDS,
9402                GeneratedVisitor,
9403            )
9404    }
9405}
9406impl serde::Serialize for StartPaymentMethodSetupRequest {
9407    #[allow(deprecated)]
9408    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
9409    where
9410        S: serde::Serializer,
9411    {
9412        use serde::ser::SerializeStruct;
9413        let mut len = 0;
9414        if !self.name.is_empty() {
9415            len += 1;
9416        }
9417        let mut struct_ser = serializer
9418            .serialize_struct(
9419                "origincloud.billing.v1beta1.StartPaymentMethodSetupRequest",
9420                len,
9421            )?;
9422        if !self.name.is_empty() {
9423            struct_ser.serialize_field("name", &self.name)?;
9424        }
9425        struct_ser.end()
9426    }
9427}
9428impl<'de> serde::Deserialize<'de> for StartPaymentMethodSetupRequest {
9429    #[allow(deprecated)]
9430    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9431    where
9432        D: serde::Deserializer<'de>,
9433    {
9434        const FIELDS: &[&str] = &["name"];
9435        #[allow(clippy::enum_variant_names)]
9436        enum GeneratedField {
9437            Name,
9438            __SkipField__,
9439        }
9440        impl<'de> serde::Deserialize<'de> for GeneratedField {
9441            fn deserialize<D>(
9442                deserializer: D,
9443            ) -> std::result::Result<GeneratedField, D::Error>
9444            where
9445                D: serde::Deserializer<'de>,
9446            {
9447                struct GeneratedVisitor;
9448                impl serde::de::Visitor<'_> for GeneratedVisitor {
9449                    type Value = GeneratedField;
9450                    fn expecting(
9451                        &self,
9452                        formatter: &mut std::fmt::Formatter<'_>,
9453                    ) -> std::fmt::Result {
9454                        write!(formatter, "expected one of: {:?}", & FIELDS)
9455                    }
9456                    #[allow(unused_variables)]
9457                    fn visit_str<E>(
9458                        self,
9459                        value: &str,
9460                    ) -> std::result::Result<GeneratedField, E>
9461                    where
9462                        E: serde::de::Error,
9463                    {
9464                        match value {
9465                            "name" => Ok(GeneratedField::Name),
9466                            _ => Ok(GeneratedField::__SkipField__),
9467                        }
9468                    }
9469                }
9470                deserializer.deserialize_identifier(GeneratedVisitor)
9471            }
9472        }
9473        struct GeneratedVisitor;
9474        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
9475            type Value = StartPaymentMethodSetupRequest;
9476            fn expecting(
9477                &self,
9478                formatter: &mut std::fmt::Formatter<'_>,
9479            ) -> std::fmt::Result {
9480                formatter
9481                    .write_str(
9482                        "struct origincloud.billing.v1beta1.StartPaymentMethodSetupRequest",
9483                    )
9484            }
9485            fn visit_map<V>(
9486                self,
9487                mut map_: V,
9488            ) -> std::result::Result<StartPaymentMethodSetupRequest, V::Error>
9489            where
9490                V: serde::de::MapAccess<'de>,
9491            {
9492                let mut name__ = None;
9493                while let Some(k) = map_.next_key()? {
9494                    match k {
9495                        GeneratedField::Name => {
9496                            if name__.is_some() {
9497                                return Err(serde::de::Error::duplicate_field("name"));
9498                            }
9499                            name__ = Some(map_.next_value()?);
9500                        }
9501                        GeneratedField::__SkipField__ => {
9502                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
9503                        }
9504                    }
9505                }
9506                Ok(StartPaymentMethodSetupRequest {
9507                    name: name__.unwrap_or_default(),
9508                })
9509            }
9510        }
9511        deserializer
9512            .deserialize_struct(
9513                "origincloud.billing.v1beta1.StartPaymentMethodSetupRequest",
9514                FIELDS,
9515                GeneratedVisitor,
9516            )
9517    }
9518}
9519impl serde::Serialize for StartPaymentMethodSetupResponse {
9520    #[allow(deprecated)]
9521    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
9522    where
9523        S: serde::Serializer,
9524    {
9525        use serde::ser::SerializeStruct;
9526        let mut len = 0;
9527        if !self.redirect_uri.is_empty() {
9528            len += 1;
9529        }
9530        let mut struct_ser = serializer
9531            .serialize_struct(
9532                "origincloud.billing.v1beta1.StartPaymentMethodSetupResponse",
9533                len,
9534            )?;
9535        if !self.redirect_uri.is_empty() {
9536            struct_ser.serialize_field("redirectUri", &self.redirect_uri)?;
9537        }
9538        struct_ser.end()
9539    }
9540}
9541impl<'de> serde::Deserialize<'de> for StartPaymentMethodSetupResponse {
9542    #[allow(deprecated)]
9543    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9544    where
9545        D: serde::Deserializer<'de>,
9546    {
9547        const FIELDS: &[&str] = &["redirect_uri", "redirectUri"];
9548        #[allow(clippy::enum_variant_names)]
9549        enum GeneratedField {
9550            RedirectUri,
9551            __SkipField__,
9552        }
9553        impl<'de> serde::Deserialize<'de> for GeneratedField {
9554            fn deserialize<D>(
9555                deserializer: D,
9556            ) -> std::result::Result<GeneratedField, D::Error>
9557            where
9558                D: serde::Deserializer<'de>,
9559            {
9560                struct GeneratedVisitor;
9561                impl serde::de::Visitor<'_> for GeneratedVisitor {
9562                    type Value = GeneratedField;
9563                    fn expecting(
9564                        &self,
9565                        formatter: &mut std::fmt::Formatter<'_>,
9566                    ) -> std::fmt::Result {
9567                        write!(formatter, "expected one of: {:?}", & FIELDS)
9568                    }
9569                    #[allow(unused_variables)]
9570                    fn visit_str<E>(
9571                        self,
9572                        value: &str,
9573                    ) -> std::result::Result<GeneratedField, E>
9574                    where
9575                        E: serde::de::Error,
9576                    {
9577                        match value {
9578                            "redirectUri" | "redirect_uri" => {
9579                                Ok(GeneratedField::RedirectUri)
9580                            }
9581                            _ => Ok(GeneratedField::__SkipField__),
9582                        }
9583                    }
9584                }
9585                deserializer.deserialize_identifier(GeneratedVisitor)
9586            }
9587        }
9588        struct GeneratedVisitor;
9589        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
9590            type Value = StartPaymentMethodSetupResponse;
9591            fn expecting(
9592                &self,
9593                formatter: &mut std::fmt::Formatter<'_>,
9594            ) -> std::fmt::Result {
9595                formatter
9596                    .write_str(
9597                        "struct origincloud.billing.v1beta1.StartPaymentMethodSetupResponse",
9598                    )
9599            }
9600            fn visit_map<V>(
9601                self,
9602                mut map_: V,
9603            ) -> std::result::Result<StartPaymentMethodSetupResponse, V::Error>
9604            where
9605                V: serde::de::MapAccess<'de>,
9606            {
9607                let mut redirect_uri__ = None;
9608                while let Some(k) = map_.next_key()? {
9609                    match k {
9610                        GeneratedField::RedirectUri => {
9611                            if redirect_uri__.is_some() {
9612                                return Err(
9613                                    serde::de::Error::duplicate_field("redirectUri"),
9614                                );
9615                            }
9616                            redirect_uri__ = Some(map_.next_value()?);
9617                        }
9618                        GeneratedField::__SkipField__ => {
9619                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
9620                        }
9621                    }
9622                }
9623                Ok(StartPaymentMethodSetupResponse {
9624                    redirect_uri: redirect_uri__.unwrap_or_default(),
9625                })
9626            }
9627        }
9628        deserializer
9629            .deserialize_struct(
9630                "origincloud.billing.v1beta1.StartPaymentMethodSetupResponse",
9631                FIELDS,
9632                GeneratedVisitor,
9633            )
9634    }
9635}
9636impl serde::Serialize for UpdateBillingAccountRequest {
9637    #[allow(deprecated)]
9638    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
9639    where
9640        S: serde::Serializer,
9641    {
9642        use serde::ser::SerializeStruct;
9643        let mut len = 0;
9644        if self.billing_account.is_some() {
9645            len += 1;
9646        }
9647        if self.update_mask.is_some() {
9648            len += 1;
9649        }
9650        let mut struct_ser = serializer
9651            .serialize_struct(
9652                "origincloud.billing.v1beta1.UpdateBillingAccountRequest",
9653                len,
9654            )?;
9655        if let Some(v) = self.billing_account.as_ref() {
9656            struct_ser.serialize_field("billingAccount", v)?;
9657        }
9658        if let Some(v) = self.update_mask.as_ref() {
9659            struct_ser.serialize_field("updateMask", v)?;
9660        }
9661        struct_ser.end()
9662    }
9663}
9664impl<'de> serde::Deserialize<'de> for UpdateBillingAccountRequest {
9665    #[allow(deprecated)]
9666    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9667    where
9668        D: serde::Deserializer<'de>,
9669    {
9670        const FIELDS: &[&str] = &[
9671            "billing_account",
9672            "billingAccount",
9673            "update_mask",
9674            "updateMask",
9675        ];
9676        #[allow(clippy::enum_variant_names)]
9677        enum GeneratedField {
9678            BillingAccount,
9679            UpdateMask,
9680            __SkipField__,
9681        }
9682        impl<'de> serde::Deserialize<'de> for GeneratedField {
9683            fn deserialize<D>(
9684                deserializer: D,
9685            ) -> std::result::Result<GeneratedField, D::Error>
9686            where
9687                D: serde::Deserializer<'de>,
9688            {
9689                struct GeneratedVisitor;
9690                impl serde::de::Visitor<'_> for GeneratedVisitor {
9691                    type Value = GeneratedField;
9692                    fn expecting(
9693                        &self,
9694                        formatter: &mut std::fmt::Formatter<'_>,
9695                    ) -> std::fmt::Result {
9696                        write!(formatter, "expected one of: {:?}", & FIELDS)
9697                    }
9698                    #[allow(unused_variables)]
9699                    fn visit_str<E>(
9700                        self,
9701                        value: &str,
9702                    ) -> std::result::Result<GeneratedField, E>
9703                    where
9704                        E: serde::de::Error,
9705                    {
9706                        match value {
9707                            "billingAccount" | "billing_account" => {
9708                                Ok(GeneratedField::BillingAccount)
9709                            }
9710                            "updateMask" | "update_mask" => {
9711                                Ok(GeneratedField::UpdateMask)
9712                            }
9713                            _ => Ok(GeneratedField::__SkipField__),
9714                        }
9715                    }
9716                }
9717                deserializer.deserialize_identifier(GeneratedVisitor)
9718            }
9719        }
9720        struct GeneratedVisitor;
9721        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
9722            type Value = UpdateBillingAccountRequest;
9723            fn expecting(
9724                &self,
9725                formatter: &mut std::fmt::Formatter<'_>,
9726            ) -> std::fmt::Result {
9727                formatter
9728                    .write_str(
9729                        "struct origincloud.billing.v1beta1.UpdateBillingAccountRequest",
9730                    )
9731            }
9732            fn visit_map<V>(
9733                self,
9734                mut map_: V,
9735            ) -> std::result::Result<UpdateBillingAccountRequest, V::Error>
9736            where
9737                V: serde::de::MapAccess<'de>,
9738            {
9739                let mut billing_account__ = None;
9740                let mut update_mask__ = None;
9741                while let Some(k) = map_.next_key()? {
9742                    match k {
9743                        GeneratedField::BillingAccount => {
9744                            if billing_account__.is_some() {
9745                                return Err(
9746                                    serde::de::Error::duplicate_field("billingAccount"),
9747                                );
9748                            }
9749                            billing_account__ = map_.next_value()?;
9750                        }
9751                        GeneratedField::UpdateMask => {
9752                            if update_mask__.is_some() {
9753                                return Err(serde::de::Error::duplicate_field("updateMask"));
9754                            }
9755                            update_mask__ = map_.next_value()?;
9756                        }
9757                        GeneratedField::__SkipField__ => {
9758                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
9759                        }
9760                    }
9761                }
9762                Ok(UpdateBillingAccountRequest {
9763                    billing_account: billing_account__,
9764                    update_mask: update_mask__,
9765                })
9766            }
9767        }
9768        deserializer
9769            .deserialize_struct(
9770                "origincloud.billing.v1beta1.UpdateBillingAccountRequest",
9771                FIELDS,
9772                GeneratedVisitor,
9773            )
9774    }
9775}
9776impl serde::Serialize for UpdateProjectBillingInfoRequest {
9777    #[allow(deprecated)]
9778    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
9779    where
9780        S: serde::Serializer,
9781    {
9782        use serde::ser::SerializeStruct;
9783        let mut len = 0;
9784        if self.project_billing_info.is_some() {
9785            len += 1;
9786        }
9787        if self.update_mask.is_some() {
9788            len += 1;
9789        }
9790        let mut struct_ser = serializer
9791            .serialize_struct(
9792                "origincloud.billing.v1beta1.UpdateProjectBillingInfoRequest",
9793                len,
9794            )?;
9795        if let Some(v) = self.project_billing_info.as_ref() {
9796            struct_ser.serialize_field("projectBillingInfo", v)?;
9797        }
9798        if let Some(v) = self.update_mask.as_ref() {
9799            struct_ser.serialize_field("updateMask", v)?;
9800        }
9801        struct_ser.end()
9802    }
9803}
9804impl<'de> serde::Deserialize<'de> for UpdateProjectBillingInfoRequest {
9805    #[allow(deprecated)]
9806    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9807    where
9808        D: serde::Deserializer<'de>,
9809    {
9810        const FIELDS: &[&str] = &[
9811            "project_billing_info",
9812            "projectBillingInfo",
9813            "update_mask",
9814            "updateMask",
9815        ];
9816        #[allow(clippy::enum_variant_names)]
9817        enum GeneratedField {
9818            ProjectBillingInfo,
9819            UpdateMask,
9820            __SkipField__,
9821        }
9822        impl<'de> serde::Deserialize<'de> for GeneratedField {
9823            fn deserialize<D>(
9824                deserializer: D,
9825            ) -> std::result::Result<GeneratedField, D::Error>
9826            where
9827                D: serde::Deserializer<'de>,
9828            {
9829                struct GeneratedVisitor;
9830                impl serde::de::Visitor<'_> for GeneratedVisitor {
9831                    type Value = GeneratedField;
9832                    fn expecting(
9833                        &self,
9834                        formatter: &mut std::fmt::Formatter<'_>,
9835                    ) -> std::fmt::Result {
9836                        write!(formatter, "expected one of: {:?}", & FIELDS)
9837                    }
9838                    #[allow(unused_variables)]
9839                    fn visit_str<E>(
9840                        self,
9841                        value: &str,
9842                    ) -> std::result::Result<GeneratedField, E>
9843                    where
9844                        E: serde::de::Error,
9845                    {
9846                        match value {
9847                            "projectBillingInfo" | "project_billing_info" => {
9848                                Ok(GeneratedField::ProjectBillingInfo)
9849                            }
9850                            "updateMask" | "update_mask" => {
9851                                Ok(GeneratedField::UpdateMask)
9852                            }
9853                            _ => Ok(GeneratedField::__SkipField__),
9854                        }
9855                    }
9856                }
9857                deserializer.deserialize_identifier(GeneratedVisitor)
9858            }
9859        }
9860        struct GeneratedVisitor;
9861        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
9862            type Value = UpdateProjectBillingInfoRequest;
9863            fn expecting(
9864                &self,
9865                formatter: &mut std::fmt::Formatter<'_>,
9866            ) -> std::fmt::Result {
9867                formatter
9868                    .write_str(
9869                        "struct origincloud.billing.v1beta1.UpdateProjectBillingInfoRequest",
9870                    )
9871            }
9872            fn visit_map<V>(
9873                self,
9874                mut map_: V,
9875            ) -> std::result::Result<UpdateProjectBillingInfoRequest, V::Error>
9876            where
9877                V: serde::de::MapAccess<'de>,
9878            {
9879                let mut project_billing_info__ = None;
9880                let mut update_mask__ = None;
9881                while let Some(k) = map_.next_key()? {
9882                    match k {
9883                        GeneratedField::ProjectBillingInfo => {
9884                            if project_billing_info__.is_some() {
9885                                return Err(
9886                                    serde::de::Error::duplicate_field("projectBillingInfo"),
9887                                );
9888                            }
9889                            project_billing_info__ = map_.next_value()?;
9890                        }
9891                        GeneratedField::UpdateMask => {
9892                            if update_mask__.is_some() {
9893                                return Err(serde::de::Error::duplicate_field("updateMask"));
9894                            }
9895                            update_mask__ = map_.next_value()?;
9896                        }
9897                        GeneratedField::__SkipField__ => {
9898                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
9899                        }
9900                    }
9901                }
9902                Ok(UpdateProjectBillingInfoRequest {
9903                    project_billing_info: project_billing_info__,
9904                    update_mask: update_mask__,
9905                })
9906            }
9907        }
9908        deserializer
9909            .deserialize_struct(
9910                "origincloud.billing.v1beta1.UpdateProjectBillingInfoRequest",
9911                FIELDS,
9912                GeneratedVisitor,
9913            )
9914    }
9915}
9916impl serde::Serialize for UpdateSpendLimitRequest {
9917    #[allow(deprecated)]
9918    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
9919    where
9920        S: serde::Serializer,
9921    {
9922        use serde::ser::SerializeStruct;
9923        let mut len = 0;
9924        if self.spend_limit.is_some() {
9925            len += 1;
9926        }
9927        if self.update_mask.is_some() {
9928            len += 1;
9929        }
9930        let mut struct_ser = serializer
9931            .serialize_struct(
9932                "origincloud.billing.v1beta1.UpdateSpendLimitRequest",
9933                len,
9934            )?;
9935        if let Some(v) = self.spend_limit.as_ref() {
9936            struct_ser.serialize_field("spendLimit", v)?;
9937        }
9938        if let Some(v) = self.update_mask.as_ref() {
9939            struct_ser.serialize_field("updateMask", v)?;
9940        }
9941        struct_ser.end()
9942    }
9943}
9944impl<'de> serde::Deserialize<'de> for UpdateSpendLimitRequest {
9945    #[allow(deprecated)]
9946    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
9947    where
9948        D: serde::Deserializer<'de>,
9949    {
9950        const FIELDS: &[&str] = &[
9951            "spend_limit",
9952            "spendLimit",
9953            "update_mask",
9954            "updateMask",
9955        ];
9956        #[allow(clippy::enum_variant_names)]
9957        enum GeneratedField {
9958            SpendLimit,
9959            UpdateMask,
9960            __SkipField__,
9961        }
9962        impl<'de> serde::Deserialize<'de> for GeneratedField {
9963            fn deserialize<D>(
9964                deserializer: D,
9965            ) -> std::result::Result<GeneratedField, D::Error>
9966            where
9967                D: serde::Deserializer<'de>,
9968            {
9969                struct GeneratedVisitor;
9970                impl serde::de::Visitor<'_> for GeneratedVisitor {
9971                    type Value = GeneratedField;
9972                    fn expecting(
9973                        &self,
9974                        formatter: &mut std::fmt::Formatter<'_>,
9975                    ) -> std::fmt::Result {
9976                        write!(formatter, "expected one of: {:?}", & FIELDS)
9977                    }
9978                    #[allow(unused_variables)]
9979                    fn visit_str<E>(
9980                        self,
9981                        value: &str,
9982                    ) -> std::result::Result<GeneratedField, E>
9983                    where
9984                        E: serde::de::Error,
9985                    {
9986                        match value {
9987                            "spendLimit" | "spend_limit" => {
9988                                Ok(GeneratedField::SpendLimit)
9989                            }
9990                            "updateMask" | "update_mask" => {
9991                                Ok(GeneratedField::UpdateMask)
9992                            }
9993                            _ => Ok(GeneratedField::__SkipField__),
9994                        }
9995                    }
9996                }
9997                deserializer.deserialize_identifier(GeneratedVisitor)
9998            }
9999        }
10000        struct GeneratedVisitor;
10001        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
10002            type Value = UpdateSpendLimitRequest;
10003            fn expecting(
10004                &self,
10005                formatter: &mut std::fmt::Formatter<'_>,
10006            ) -> std::fmt::Result {
10007                formatter
10008                    .write_str(
10009                        "struct origincloud.billing.v1beta1.UpdateSpendLimitRequest",
10010                    )
10011            }
10012            fn visit_map<V>(
10013                self,
10014                mut map_: V,
10015            ) -> std::result::Result<UpdateSpendLimitRequest, V::Error>
10016            where
10017                V: serde::de::MapAccess<'de>,
10018            {
10019                let mut spend_limit__ = None;
10020                let mut update_mask__ = None;
10021                while let Some(k) = map_.next_key()? {
10022                    match k {
10023                        GeneratedField::SpendLimit => {
10024                            if spend_limit__.is_some() {
10025                                return Err(serde::de::Error::duplicate_field("spendLimit"));
10026                            }
10027                            spend_limit__ = map_.next_value()?;
10028                        }
10029                        GeneratedField::UpdateMask => {
10030                            if update_mask__.is_some() {
10031                                return Err(serde::de::Error::duplicate_field("updateMask"));
10032                            }
10033                            update_mask__ = map_.next_value()?;
10034                        }
10035                        GeneratedField::__SkipField__ => {
10036                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
10037                        }
10038                    }
10039                }
10040                Ok(UpdateSpendLimitRequest {
10041                    spend_limit: spend_limit__,
10042                    update_mask: update_mask__,
10043                })
10044            }
10045        }
10046        deserializer
10047            .deserialize_struct(
10048                "origincloud.billing.v1beta1.UpdateSpendLimitRequest",
10049                FIELDS,
10050                GeneratedVisitor,
10051            )
10052    }
10053}
10054impl serde::Serialize for UsageRecord {
10055    #[allow(deprecated)]
10056    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
10057    where
10058        S: serde::Serializer,
10059    {
10060        use serde::ser::SerializeStruct;
10061        let mut len = 0;
10062        if !self.resource_kind.is_empty() {
10063            len += 1;
10064        }
10065        if !self.resource_id.is_empty() {
10066            len += 1;
10067        }
10068        if !self.metric.is_empty() {
10069            len += 1;
10070        }
10071        if !self.product_key.is_empty() {
10072            len += 1;
10073        }
10074        if !self.quantity.is_empty() {
10075            len += 1;
10076        }
10077        if self.start_time.is_some() {
10078            len += 1;
10079        }
10080        if self.end_time.is_some() {
10081            len += 1;
10082        }
10083        if !self.billing_account.is_empty() {
10084            len += 1;
10085        }
10086        let mut struct_ser = serializer
10087            .serialize_struct("origincloud.billing.v1beta1.UsageRecord", len)?;
10088        if !self.resource_kind.is_empty() {
10089            struct_ser.serialize_field("resourceKind", &self.resource_kind)?;
10090        }
10091        if !self.resource_id.is_empty() {
10092            struct_ser.serialize_field("resourceId", &self.resource_id)?;
10093        }
10094        if !self.metric.is_empty() {
10095            struct_ser.serialize_field("metric", &self.metric)?;
10096        }
10097        if !self.product_key.is_empty() {
10098            struct_ser.serialize_field("productKey", &self.product_key)?;
10099        }
10100        if !self.quantity.is_empty() {
10101            struct_ser.serialize_field("quantity", &self.quantity)?;
10102        }
10103        if let Some(v) = self.start_time.as_ref() {
10104            struct_ser.serialize_field("startTime", v)?;
10105        }
10106        if let Some(v) = self.end_time.as_ref() {
10107            struct_ser.serialize_field("endTime", v)?;
10108        }
10109        if !self.billing_account.is_empty() {
10110            struct_ser.serialize_field("billingAccount", &self.billing_account)?;
10111        }
10112        struct_ser.end()
10113    }
10114}
10115impl<'de> serde::Deserialize<'de> for UsageRecord {
10116    #[allow(deprecated)]
10117    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
10118    where
10119        D: serde::Deserializer<'de>,
10120    {
10121        const FIELDS: &[&str] = &[
10122            "resource_kind",
10123            "resourceKind",
10124            "resource_id",
10125            "resourceId",
10126            "metric",
10127            "product_key",
10128            "productKey",
10129            "quantity",
10130            "start_time",
10131            "startTime",
10132            "end_time",
10133            "endTime",
10134            "billing_account",
10135            "billingAccount",
10136        ];
10137        #[allow(clippy::enum_variant_names)]
10138        enum GeneratedField {
10139            ResourceKind,
10140            ResourceId,
10141            Metric,
10142            ProductKey,
10143            Quantity,
10144            StartTime,
10145            EndTime,
10146            BillingAccount,
10147            __SkipField__,
10148        }
10149        impl<'de> serde::Deserialize<'de> for GeneratedField {
10150            fn deserialize<D>(
10151                deserializer: D,
10152            ) -> std::result::Result<GeneratedField, D::Error>
10153            where
10154                D: serde::Deserializer<'de>,
10155            {
10156                struct GeneratedVisitor;
10157                impl serde::de::Visitor<'_> for GeneratedVisitor {
10158                    type Value = GeneratedField;
10159                    fn expecting(
10160                        &self,
10161                        formatter: &mut std::fmt::Formatter<'_>,
10162                    ) -> std::fmt::Result {
10163                        write!(formatter, "expected one of: {:?}", & FIELDS)
10164                    }
10165                    #[allow(unused_variables)]
10166                    fn visit_str<E>(
10167                        self,
10168                        value: &str,
10169                    ) -> std::result::Result<GeneratedField, E>
10170                    where
10171                        E: serde::de::Error,
10172                    {
10173                        match value {
10174                            "resourceKind" | "resource_kind" => {
10175                                Ok(GeneratedField::ResourceKind)
10176                            }
10177                            "resourceId" | "resource_id" => {
10178                                Ok(GeneratedField::ResourceId)
10179                            }
10180                            "metric" => Ok(GeneratedField::Metric),
10181                            "productKey" | "product_key" => {
10182                                Ok(GeneratedField::ProductKey)
10183                            }
10184                            "quantity" => Ok(GeneratedField::Quantity),
10185                            "startTime" | "start_time" => Ok(GeneratedField::StartTime),
10186                            "endTime" | "end_time" => Ok(GeneratedField::EndTime),
10187                            "billingAccount" | "billing_account" => {
10188                                Ok(GeneratedField::BillingAccount)
10189                            }
10190                            _ => Ok(GeneratedField::__SkipField__),
10191                        }
10192                    }
10193                }
10194                deserializer.deserialize_identifier(GeneratedVisitor)
10195            }
10196        }
10197        struct GeneratedVisitor;
10198        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
10199            type Value = UsageRecord;
10200            fn expecting(
10201                &self,
10202                formatter: &mut std::fmt::Formatter<'_>,
10203            ) -> std::fmt::Result {
10204                formatter.write_str("struct origincloud.billing.v1beta1.UsageRecord")
10205            }
10206            fn visit_map<V>(
10207                self,
10208                mut map_: V,
10209            ) -> std::result::Result<UsageRecord, V::Error>
10210            where
10211                V: serde::de::MapAccess<'de>,
10212            {
10213                let mut resource_kind__ = None;
10214                let mut resource_id__ = None;
10215                let mut metric__ = None;
10216                let mut product_key__ = None;
10217                let mut quantity__ = None;
10218                let mut start_time__ = None;
10219                let mut end_time__ = None;
10220                let mut billing_account__ = None;
10221                while let Some(k) = map_.next_key()? {
10222                    match k {
10223                        GeneratedField::ResourceKind => {
10224                            if resource_kind__.is_some() {
10225                                return Err(
10226                                    serde::de::Error::duplicate_field("resourceKind"),
10227                                );
10228                            }
10229                            resource_kind__ = Some(map_.next_value()?);
10230                        }
10231                        GeneratedField::ResourceId => {
10232                            if resource_id__.is_some() {
10233                                return Err(serde::de::Error::duplicate_field("resourceId"));
10234                            }
10235                            resource_id__ = Some(map_.next_value()?);
10236                        }
10237                        GeneratedField::Metric => {
10238                            if metric__.is_some() {
10239                                return Err(serde::de::Error::duplicate_field("metric"));
10240                            }
10241                            metric__ = Some(map_.next_value()?);
10242                        }
10243                        GeneratedField::ProductKey => {
10244                            if product_key__.is_some() {
10245                                return Err(serde::de::Error::duplicate_field("productKey"));
10246                            }
10247                            product_key__ = Some(map_.next_value()?);
10248                        }
10249                        GeneratedField::Quantity => {
10250                            if quantity__.is_some() {
10251                                return Err(serde::de::Error::duplicate_field("quantity"));
10252                            }
10253                            quantity__ = Some(map_.next_value()?);
10254                        }
10255                        GeneratedField::StartTime => {
10256                            if start_time__.is_some() {
10257                                return Err(serde::de::Error::duplicate_field("startTime"));
10258                            }
10259                            start_time__ = map_.next_value()?;
10260                        }
10261                        GeneratedField::EndTime => {
10262                            if end_time__.is_some() {
10263                                return Err(serde::de::Error::duplicate_field("endTime"));
10264                            }
10265                            end_time__ = map_.next_value()?;
10266                        }
10267                        GeneratedField::BillingAccount => {
10268                            if billing_account__.is_some() {
10269                                return Err(
10270                                    serde::de::Error::duplicate_field("billingAccount"),
10271                                );
10272                            }
10273                            billing_account__ = Some(map_.next_value()?);
10274                        }
10275                        GeneratedField::__SkipField__ => {
10276                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
10277                        }
10278                    }
10279                }
10280                Ok(UsageRecord {
10281                    resource_kind: resource_kind__.unwrap_or_default(),
10282                    resource_id: resource_id__.unwrap_or_default(),
10283                    metric: metric__.unwrap_or_default(),
10284                    product_key: product_key__.unwrap_or_default(),
10285                    quantity: quantity__.unwrap_or_default(),
10286                    start_time: start_time__,
10287                    end_time: end_time__,
10288                    billing_account: billing_account__.unwrap_or_default(),
10289                })
10290            }
10291        }
10292        deserializer
10293            .deserialize_struct(
10294                "origincloud.billing.v1beta1.UsageRecord",
10295                FIELDS,
10296                GeneratedVisitor,
10297            )
10298    }
10299}
10300/// Calls `BillingAccountService`.
10301///
10302/// Billing accounts, which project each one pays for, and how they are paid.
10303#[derive(Clone, Debug)]
10304pub struct BillingAccountClient {
10305    service: ::origincloud_core::Service,
10306}
10307impl BillingAccountClient {
10308    /// Returns a client of `BillingAccountService` that sends its calls through `client`.
10309    pub fn new(client: &::origincloud_core::Client) -> Self {
10310        Self {
10311            service: client.service("billing", false),
10312        }
10313    }
10314    /// The endpoint the client sends its calls to, which also serves the operations its methods answer with.
10315    pub fn service(&self) -> &::origincloud_core::Service {
10316        &self.service
10317    }
10318    /// Returns a billing account. Needs `admin.billing_account.get` on the
10319    /// organization.
10320    pub async fn get_billing_account(
10321        &self,
10322        mut request: GetBillingAccountRequest,
10323    ) -> ::core::result::Result<BillingAccount, ::origincloud_core::Error> {
10324        let n0 = self.service.relative_name("name", &request.name, &["billing"])?;
10325        let p0 = ::origincloud_core::path_value(
10326            "name",
10327            &n0,
10328            "organizations/*/billingAccounts/*",
10329        )?;
10330        request.name = n0;
10331        let query = ::origincloud_core::query(&request, &["name"])?;
10332        let call = ::origincloud_core::Request::new(
10333                ::origincloud_core::Method::GET,
10334                format!("/v1beta1/{p0}"),
10335            )
10336            .with_query(query)
10337            .idempotent();
10338        self.service.call(call).await
10339    }
10340    /// Lists an organization's billing accounts, oldest first. Needs
10341    /// `admin.billing_account.list` on the organization.
10342    pub async fn list_billing_accounts(
10343        &self,
10344        mut request: ListBillingAccountsRequest,
10345    ) -> ::core::result::Result<ListBillingAccountsResponse, ::origincloud_core::Error> {
10346        let n0 = self
10347            .service
10348            .relative_name("parent", &request.parent, &["resourcemanager"])?;
10349        let p0 = ::origincloud_core::path_value("parent", &n0, "organizations/*")?;
10350        request.parent = n0;
10351        let query = ::origincloud_core::query(&request, &["parent"])?;
10352        let call = ::origincloud_core::Request::new(
10353                ::origincloud_core::Method::GET,
10354                format!("/v1beta1/{p0}/billingAccounts"),
10355            )
10356            .with_query(query)
10357            .idempotent();
10358        self.service.call(call).await
10359    }
10360    /// Returns everything [`list_billing_accounts`](Self::list_billing_accounts) 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.
10361    pub fn all_billing_accounts(
10362        &self,
10363        request: ListBillingAccountsRequest,
10364    ) -> ::origincloud_core::Pages<BillingAccount> {
10365        let client = self.clone();
10366        ::origincloud_core::Pages::new(
10367            request,
10368            move |request: ListBillingAccountsRequest| {
10369                let client = client.clone();
10370                async move {
10371                    let page = client.list_billing_accounts(request).await?;
10372                    Ok((page.billing_accounts, page.next_page_token))
10373                }
10374            },
10375            |request: &mut ListBillingAccountsRequest, token: ::std::string::String| {
10376                request.page_token = token;
10377            },
10378        )
10379    }
10380    /// Creates a billing account with its profile: `display_name`,
10381    /// `billing_address`, `invoice_email` and `contact_person` are required,
10382    /// and `vat_id` too for a billing address outside Germany. The account
10383    /// has no payment method yet: until one is verified, the projects linked
10384    /// to it can't create billable resources. Creating it grants nobody a
10385    /// role: whoever can create billing accounts can use it. Needs
10386    /// `admin.billing_account.create` on the organization.
10387    pub async fn create_billing_account(
10388        &self,
10389        mut request: CreateBillingAccountRequest,
10390    ) -> ::core::result::Result<BillingAccount, ::origincloud_core::Error> {
10391        if request.request_id.is_empty() {
10392            request.request_id = ::origincloud_core::new_request_id();
10393        }
10394        let n0 = self
10395            .service
10396            .relative_name("parent", &request.parent, &["resourcemanager"])?;
10397        let p0 = ::origincloud_core::path_value("parent", &n0, "organizations/*")?;
10398        request.parent = n0;
10399        let body = ::origincloud_core::json_body(
10400            request
10401                .billing_account
10402                .as_ref()
10403                .unwrap_or(&::core::default::Default::default()),
10404        )?;
10405        let query = ::origincloud_core::query(&request, &["parent", "billingAccount"])?;
10406        let call = ::origincloud_core::Request::new(
10407                ::origincloud_core::Method::POST,
10408                format!("/v1beta1/{p0}/billingAccounts"),
10409            )
10410            .with_body(body)
10411            .with_query(query)
10412            .idempotent();
10413        self.service.call(call).await
10414    }
10415    /// Changes a billing account's `display_name` or its profile. The profile
10416    /// fields named in `update_mask` are replaced and the others kept; once
10417    /// the update is applied, the account must have a whole profile
10418    /// (`billing_address`, `invoice_email`, `contact_person`, and `vat_id`
10419    /// for a billing address outside Germany), or the update is refused. Needs
10420    /// `admin.billing_account.update` on the organization.
10421    pub async fn update_billing_account(
10422        &self,
10423        mut request: UpdateBillingAccountRequest,
10424    ) -> ::core::result::Result<BillingAccount, ::origincloud_core::Error> {
10425        let n0 = self
10426            .service
10427            .relative_name(
10428                "billingAccount.name",
10429                request.billing_account.as_ref().map_or("", |m| m.name.as_str()),
10430                &["billing"],
10431            )?;
10432        let p0 = ::origincloud_core::path_value(
10433            "billingAccount.name",
10434            &n0,
10435            "organizations/*/billingAccounts/*",
10436        )?;
10437        if let Some(m) = request.billing_account.as_mut() {
10438            m.name = n0;
10439        }
10440        let body = ::origincloud_core::json_body(
10441            request
10442                .billing_account
10443                .as_ref()
10444                .unwrap_or(&::core::default::Default::default()),
10445        )?;
10446        let query = ::origincloud_core::query(
10447            &request,
10448            &["billingAccount.name", "billingAccount"],
10449        )?;
10450        let call = ::origincloud_core::Request::new(
10451                ::origincloud_core::Method::PATCH,
10452                format!("/v1beta1/{p0}"),
10453            )
10454            .with_body(body)
10455            .with_query(query);
10456        self.service.call(call).await
10457    }
10458    /// Deletes a billing account. Refused as a `CONFLICT` for the
10459    /// organization's default billing account, while a project is linked to
10460    /// the account (link it to another account first), and while the account
10461    /// has a spend limit (remove it first). Needs
10462    /// `admin.billing_account.delete` on the organization.
10463    pub async fn delete_billing_account(
10464        &self,
10465        mut request: DeleteBillingAccountRequest,
10466    ) -> ::core::result::Result<
10467        ::origincloud_core::protobuf::Empty,
10468        ::origincloud_core::Error,
10469    > {
10470        let n0 = self.service.relative_name("name", &request.name, &["billing"])?;
10471        let p0 = ::origincloud_core::path_value(
10472            "name",
10473            &n0,
10474            "organizations/*/billingAccounts/*",
10475        )?;
10476        request.name = n0;
10477        let query = ::origincloud_core::query(&request, &["name"])?;
10478        let call = ::origincloud_core::Request::new(
10479                ::origincloud_core::Method::DELETE,
10480                format!("/v1beta1/{p0}"),
10481            )
10482            .with_query(query);
10483        self.service.call(call).await
10484    }
10485    /// Starts adding a payment method to a billing account, and returns the
10486    /// payment provider's page to open in a browser: the payment details are
10487    /// entered there and never pass through this API. Once that page is done,
10488    /// call ConfirmPaymentMethodSetup. Starting again replaces a setup that
10489    /// wasn't confirmed. Refused as `INVALID_ARGUMENT` for an account whose
10490    /// `payment_method.state` is `payment_method::State::NotRequired`. Needs
10491    /// `admin.billing_account.update` on the organization.
10492    pub async fn start_payment_method_setup(
10493        &self,
10494        mut request: StartPaymentMethodSetupRequest,
10495    ) -> ::core::result::Result<
10496        StartPaymentMethodSetupResponse,
10497        ::origincloud_core::Error,
10498    > {
10499        let n0 = self.service.relative_name("name", &request.name, &["billing"])?;
10500        let p0 = ::origincloud_core::path_value(
10501            "name",
10502            &n0,
10503            "organizations/*/billingAccounts/*",
10504        )?;
10505        request.name = n0;
10506        let body = ::origincloud_core::json_body(&request)?;
10507        let call = ::origincloud_core::Request::new(
10508                ::origincloud_core::Method::POST,
10509                format!("/v1beta1/{p0}:startPaymentMethodSetup"),
10510            )
10511            .with_body(body);
10512        self.service.call(call).await
10513    }
10514    /// Completes the setup StartPaymentMethodSetup started, once its page is
10515    /// done: the payment provider is asked whether it finished, and only a
10516    /// finished setup is recorded. The account's `payment_method` is then
10517    /// `payment_method::State::Verified`, replacing any earlier one, and its projects can create
10518    /// billable resources. An unfinished or abandoned setup is refused as
10519    /// `INVALID_ARGUMENT` and changes nothing: finish the page, or start
10520    /// again. So is an account with no setup started, which includes a
10521    /// repeat of a confirmation that succeeded: read the account to see
10522    /// whether it did. Needs `admin.billing_account.update` on the
10523    /// organization.
10524    pub async fn confirm_payment_method_setup(
10525        &self,
10526        mut request: ConfirmPaymentMethodSetupRequest,
10527    ) -> ::core::result::Result<BillingAccount, ::origincloud_core::Error> {
10528        let n0 = self.service.relative_name("name", &request.name, &["billing"])?;
10529        let p0 = ::origincloud_core::path_value(
10530            "name",
10531            &n0,
10532            "organizations/*/billingAccounts/*",
10533        )?;
10534        request.name = n0;
10535        let body = ::origincloud_core::json_body(&request)?;
10536        let call = ::origincloud_core::Request::new(
10537                ::origincloud_core::Method::POST,
10538                format!("/v1beta1/{p0}:confirmPaymentMethodSetup"),
10539            )
10540            .with_body(body);
10541        self.service.call(call).await
10542    }
10543    /// Returns which billing account pays for a project. Needs
10544    /// `admin.project.get` on the project.
10545    pub async fn get_project_billing_info(
10546        &self,
10547        mut request: GetProjectBillingInfoRequest,
10548    ) -> ::core::result::Result<ProjectBillingInfo, ::origincloud_core::Error> {
10549        let n0 = self.service.relative_name("name", &request.name, &["billing"])?;
10550        let p0 = ::origincloud_core::path_value("name", &n0, "projects/*/billingInfo")?;
10551        request.name = n0;
10552        let query = ::origincloud_core::query(&request, &["name"])?;
10553        let call = ::origincloud_core::Request::new(
10554                ::origincloud_core::Method::GET,
10555                format!("/v1beta1/{p0}"),
10556            )
10557            .with_query(query)
10558            .idempotent();
10559        self.service.call(call).await
10560    }
10561    /// Links a project to another billing account of its organization, which
10562    /// pays for its usage from then on; what it used before stays charged to
10563    /// the account it was linked to then. A project is always linked to one
10564    /// account, so there is nothing to unlink. Needs `admin.project.attach`
10565    /// on the project, which is separate from access to billing accounts.
10566    pub async fn update_project_billing_info(
10567        &self,
10568        mut request: UpdateProjectBillingInfoRequest,
10569    ) -> ::core::result::Result<ProjectBillingInfo, ::origincloud_core::Error> {
10570        let n0 = self
10571            .service
10572            .relative_name(
10573                "projectBillingInfo.name",
10574                request.project_billing_info.as_ref().map_or("", |m| m.name.as_str()),
10575                &["billing"],
10576            )?;
10577        let p0 = ::origincloud_core::path_value(
10578            "projectBillingInfo.name",
10579            &n0,
10580            "projects/*/billingInfo",
10581        )?;
10582        if let Some(m) = request.project_billing_info.as_mut() {
10583            m.name = n0;
10584        }
10585        let body = ::origincloud_core::json_body(
10586            request
10587                .project_billing_info
10588                .as_ref()
10589                .unwrap_or(&::core::default::Default::default()),
10590        )?;
10591        let query = ::origincloud_core::query(
10592            &request,
10593            &["projectBillingInfo.name", "projectBillingInfo"],
10594        )?;
10595        let call = ::origincloud_core::Request::new(
10596                ::origincloud_core::Method::PATCH,
10597                format!("/v1beta1/{p0}"),
10598            )
10599            .with_body(body)
10600            .with_query(query);
10601        self.service.call(call).await
10602    }
10603    /// Lists the projects a billing account pays for, oldest first. Needs
10604    /// `admin.billing_account.get` on the organization.
10605    pub async fn list_project_billing_info(
10606        &self,
10607        mut request: ListProjectBillingInfoRequest,
10608    ) -> ::core::result::Result<
10609        ListProjectBillingInfoResponse,
10610        ::origincloud_core::Error,
10611    > {
10612        let n0 = self.service.relative_name("name", &request.name, &["billing"])?;
10613        let p0 = ::origincloud_core::path_value(
10614            "name",
10615            &n0,
10616            "organizations/*/billingAccounts/*",
10617        )?;
10618        request.name = n0;
10619        let query = ::origincloud_core::query(&request, &["name"])?;
10620        let call = ::origincloud_core::Request::new(
10621                ::origincloud_core::Method::GET,
10622                format!("/v1beta1/{p0}/projects"),
10623            )
10624            .with_query(query)
10625            .idempotent();
10626        self.service.call(call).await
10627    }
10628    /// Returns everything [`list_project_billing_info`](Self::list_project_billing_info) 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.
10629    pub fn all_project_billing_infos(
10630        &self,
10631        request: ListProjectBillingInfoRequest,
10632    ) -> ::origincloud_core::Pages<ProjectBillingInfo> {
10633        let client = self.clone();
10634        ::origincloud_core::Pages::new(
10635            request,
10636            move |request: ListProjectBillingInfoRequest| {
10637                let client = client.clone();
10638                async move {
10639                    let page = client.list_project_billing_info(request).await?;
10640                    Ok((page.project_billing_infos, page.next_page_token))
10641                }
10642            },
10643            |request: &mut ListProjectBillingInfoRequest, token: ::std::string::String| {
10644                request.page_token = token;
10645            },
10646        )
10647    }
10648    /// Returns a country a billing address may be in.
10649    pub async fn get_billing_country(
10650        &self,
10651        mut request: GetBillingCountryRequest,
10652    ) -> ::core::result::Result<BillingCountry, ::origincloud_core::Error> {
10653        let n0 = self.service.relative_name("name", &request.name, &["billing"])?;
10654        let p0 = ::origincloud_core::path_value("name", &n0, "billingCountries/*")?;
10655        request.name = n0;
10656        let query = ::origincloud_core::query(&request, &["name"])?;
10657        let call = ::origincloud_core::Request::new(
10658                ::origincloud_core::Method::GET,
10659                format!("/v1beta1/{p0}"),
10660            )
10661            .with_query(query)
10662            .idempotent();
10663        self.service.call(call).await
10664    }
10665    /// Lists the countries a billing address may be in, in the order a form
10666    /// shows them, and whether each needs a VAT id.
10667    pub async fn list_billing_countries(
10668        &self,
10669        request: ListBillingCountriesRequest,
10670    ) -> ::core::result::Result<
10671        ListBillingCountriesResponse,
10672        ::origincloud_core::Error,
10673    > {
10674        let query = ::origincloud_core::query(&request, &[])?;
10675        let call = ::origincloud_core::Request::new(
10676                ::origincloud_core::Method::GET,
10677                ::std::string::String::from("/v1beta1/billingCountries"),
10678            )
10679            .with_query(query)
10680            .idempotent();
10681        self.service.call(call).await
10682    }
10683    /// Returns everything [`list_billing_countries`](Self::list_billing_countries) 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.
10684    pub fn all_billing_countries(
10685        &self,
10686        request: ListBillingCountriesRequest,
10687    ) -> ::origincloud_core::Pages<BillingCountry> {
10688        let client = self.clone();
10689        ::origincloud_core::Pages::new(
10690            request,
10691            move |request: ListBillingCountriesRequest| {
10692                let client = client.clone();
10693                async move {
10694                    let page = client.list_billing_countries(request).await?;
10695                    Ok((page.billing_countries, page.next_page_token))
10696                }
10697            },
10698            |request: &mut ListBillingCountriesRequest, token: ::std::string::String| {
10699                request.page_token = token;
10700            },
10701        )
10702    }
10703}
10704/// Calls `CostService`.
10705///
10706/// Usage and cost: what a project, an organization or a billing account used
10707/// in a period, and what it costs, as read-only reports.
10708///
10709/// Usage is metered per resource and priced when it is recorded, at the
10710/// price list's rate then, so a later price change never changes a past
10711/// cost. A running resource's usage is recorded at least hourly; the last
10712/// hour can still be missing from a report.
10713#[derive(Clone, Debug)]
10714pub struct CostClient {
10715    service: ::origincloud_core::Service,
10716}
10717impl CostClient {
10718    /// Returns a client of `CostService` that sends its calls through `client`.
10719    pub fn new(client: &::origincloud_core::Client) -> Self {
10720        Self {
10721            service: client.service("billing", false),
10722        }
10723    }
10724    /// The endpoint the client sends its calls to, which also serves the operations its methods answer with.
10725    pub fn service(&self) -> &::origincloud_core::Service {
10726        &self.service
10727    }
10728    /// Returns a project's cost in a period, by service and product, in hourly
10729    /// or daily buckets. Needs `admin.usage.list` on the organization.
10730    pub async fn query_project_cost(
10731        &self,
10732        mut request: QueryProjectCostRequest,
10733    ) -> ::core::result::Result<CostReport, ::origincloud_core::Error> {
10734        let n0 = self
10735            .service
10736            .relative_name("project", &request.project, &["resourcemanager"])?;
10737        let p0 = ::origincloud_core::path_value("project", &n0, "projects/*")?;
10738        request.project = n0;
10739        let query = ::origincloud_core::query(&request, &["project"])?;
10740        let call = ::origincloud_core::Request::new(
10741                ::origincloud_core::Method::GET,
10742                format!("/v1beta1/{p0}:queryCost"),
10743            )
10744            .with_query(query)
10745            .idempotent();
10746        self.service.call(call).await
10747    }
10748    /// Returns an organization's cost in a period: every project's together,
10749    /// by service and product, and each project's on its own. Needs
10750    /// `admin.usage.list` on the organization, which reads every project's
10751    /// cost in it.
10752    pub async fn query_organization_cost(
10753        &self,
10754        mut request: QueryOrganizationCostRequest,
10755    ) -> ::core::result::Result<OrganizationCostReport, ::origincloud_core::Error> {
10756        let n0 = self
10757            .service
10758            .relative_name("organization", &request.organization, &["resourcemanager"])?;
10759        let p0 = ::origincloud_core::path_value("organization", &n0, "organizations/*")?;
10760        request.organization = n0;
10761        let query = ::origincloud_core::query(&request, &["organization"])?;
10762        let call = ::origincloud_core::Request::new(
10763                ::origincloud_core::Method::GET,
10764                format!("/v1beta1/{p0}:queryCost"),
10765            )
10766            .with_query(query)
10767            .idempotent();
10768        self.service.call(call).await
10769    }
10770    /// Returns what was charged to a billing account in a period, by service
10771    /// and product. A project's cost is charged to the account it was linked
10772    /// to when the usage was recorded, so moving a project moves only its
10773    /// later cost. Its spend limit compares the calendar month's total with
10774    /// `limit`. Needs `admin.spend_limit.get` on the organization.
10775    pub async fn query_billing_account_cost(
10776        &self,
10777        mut request: QueryBillingAccountCostRequest,
10778    ) -> ::core::result::Result<CostReport, ::origincloud_core::Error> {
10779        let n0 = self
10780            .service
10781            .relative_name("billingAccount", &request.billing_account, &["billing"])?;
10782        let p0 = ::origincloud_core::path_value(
10783            "billingAccount",
10784            &n0,
10785            "organizations/*/billingAccounts/*",
10786        )?;
10787        request.billing_account = n0;
10788        let query = ::origincloud_core::query(&request, &["billingAccount"])?;
10789        let call = ::origincloud_core::Request::new(
10790                ::origincloud_core::Method::GET,
10791                format!("/v1beta1/{p0}:queryCost"),
10792            )
10793            .with_query(query)
10794            .idempotent();
10795        self.service.call(call).await
10796    }
10797    /// Lists a project's metered usage records that overlap a period, the
10798    /// input its cost is priced from, oldest first. Needs `admin.usage.list`
10799    /// on the organization.
10800    pub async fn query_project_usage(
10801        &self,
10802        mut request: QueryProjectUsageRequest,
10803    ) -> ::core::result::Result<QueryProjectUsageResponse, ::origincloud_core::Error> {
10804        let n0 = self
10805            .service
10806            .relative_name("project", &request.project, &["resourcemanager"])?;
10807        let p0 = ::origincloud_core::path_value("project", &n0, "projects/*")?;
10808        request.project = n0;
10809        let query = ::origincloud_core::query(&request, &["project"])?;
10810        let call = ::origincloud_core::Request::new(
10811                ::origincloud_core::Method::GET,
10812                format!("/v1beta1/{p0}:queryUsage"),
10813            )
10814            .with_query(query)
10815            .idempotent();
10816        self.service.call(call).await
10817    }
10818    /// Returns everything [`query_project_usage`](Self::query_project_usage) 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.
10819    pub fn all_usage_records(
10820        &self,
10821        request: QueryProjectUsageRequest,
10822    ) -> ::origincloud_core::Pages<UsageRecord> {
10823        let client = self.clone();
10824        ::origincloud_core::Pages::new(
10825            request,
10826            move |request: QueryProjectUsageRequest| {
10827                let client = client.clone();
10828                async move {
10829                    let page = client.query_project_usage(request).await?;
10830                    Ok((page.usage_records, page.next_page_token))
10831                }
10832            },
10833            |request: &mut QueryProjectUsageRequest, token: ::std::string::String| {
10834                request.page_token = token;
10835            },
10836        )
10837    }
10838}
10839/// Calls `LegalAcceptanceService`.
10840///
10841/// A billing account's acceptances of the legal documents customers accept:
10842/// the Terms of Service, the Data Processing Agreement, the Service Level
10843/// Agreement and the Acceptable Use Policy. The billing account is the legal
10844/// entity that accepts. An acceptance is a record that never changes, and it
10845/// is kept after the billing account and its organization are deleted.
10846#[derive(Clone, Debug)]
10847pub struct LegalAcceptanceClient {
10848    service: ::origincloud_core::Service,
10849}
10850impl LegalAcceptanceClient {
10851    /// Returns a client of `LegalAcceptanceService` that sends its calls through `client`.
10852    pub fn new(client: &::origincloud_core::Client) -> Self {
10853        Self {
10854            service: client.service("billing", false),
10855        }
10856    }
10857    /// The endpoint the client sends its calls to, which also serves the operations its methods answer with.
10858    pub fn service(&self) -> &::origincloud_core::Service {
10859        &self.service
10860    }
10861    /// Lists a billing account's acceptances, the latest first. Needs
10862    /// `admin.billing_account.get` on the organization.
10863    pub async fn list_legal_acceptances(
10864        &self,
10865        mut request: ListLegalAcceptancesRequest,
10866    ) -> ::core::result::Result<
10867        ListLegalAcceptancesResponse,
10868        ::origincloud_core::Error,
10869    > {
10870        let n0 = self.service.relative_name("parent", &request.parent, &["billing"])?;
10871        let p0 = ::origincloud_core::path_value(
10872            "parent",
10873            &n0,
10874            "organizations/*/billingAccounts/*",
10875        )?;
10876        request.parent = n0;
10877        let query = ::origincloud_core::query(&request, &["parent"])?;
10878        let call = ::origincloud_core::Request::new(
10879                ::origincloud_core::Method::GET,
10880                format!("/v1beta1/{p0}/legalAcceptances"),
10881            )
10882            .with_query(query)
10883            .idempotent();
10884        self.service.call(call).await
10885    }
10886    /// Returns everything [`list_legal_acceptances`](Self::list_legal_acceptances) 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.
10887    pub fn all_legal_acceptances(
10888        &self,
10889        request: ListLegalAcceptancesRequest,
10890    ) -> ::origincloud_core::Pages<LegalAcceptance> {
10891        let client = self.clone();
10892        ::origincloud_core::Pages::new(
10893            request,
10894            move |request: ListLegalAcceptancesRequest| {
10895                let client = client.clone();
10896                async move {
10897                    let page = client.list_legal_acceptances(request).await?;
10898                    Ok((page.legal_acceptances, page.next_page_token))
10899                }
10900            },
10901            |request: &mut ListLegalAcceptancesRequest, token: ::std::string::String| {
10902                request.page_token = token;
10903            },
10904        )
10905    }
10906    /// Returns one of a billing account's acceptances. Needs
10907    /// `admin.billing_account.get` on the organization.
10908    pub async fn get_legal_acceptance(
10909        &self,
10910        mut request: GetLegalAcceptanceRequest,
10911    ) -> ::core::result::Result<LegalAcceptance, ::origincloud_core::Error> {
10912        let n0 = self.service.relative_name("name", &request.name, &["billing"])?;
10913        let p0 = ::origincloud_core::path_value(
10914            "name",
10915            &n0,
10916            "organizations/*/billingAccounts/*/legalAcceptances/*",
10917        )?;
10918        request.name = n0;
10919        let query = ::origincloud_core::query(&request, &["name"])?;
10920        let call = ::origincloud_core::Request::new(
10921                ::origincloud_core::Method::GET,
10922                format!("/v1beta1/{p0}"),
10923            )
10924            .with_query(query)
10925            .idempotent();
10926        self.service.call(call).await
10927    }
10928    /// Accepts versions of legal documents for a billing account, all of them
10929    /// or none. Each version is named with the `sha256` of the text the caller
10930    /// showed, and must be the version in force or one published to take effect
10931    /// later. A version the account accepted before is returned as it was then.
10932    /// `acts_as_business` must be true: the services are offered to businesses
10933    /// only. Needs `admin.billing_account.update` on the organization.
10934    pub async fn accept_legal_documents(
10935        &self,
10936        mut request: AcceptLegalDocumentsRequest,
10937    ) -> ::core::result::Result<
10938        ListLegalAcceptancesResponse,
10939        ::origincloud_core::Error,
10940    > {
10941        let n0 = self.service.relative_name("name", &request.name, &["billing"])?;
10942        let p0 = ::origincloud_core::path_value(
10943            "name",
10944            &n0,
10945            "organizations/*/billingAccounts/*",
10946        )?;
10947        request.name = n0;
10948        let body = ::origincloud_core::json_body(&request)?;
10949        let call = ::origincloud_core::Request::new(
10950                ::origincloud_core::Method::POST,
10951                format!("/v1beta1/{p0}:acceptLegalDocuments"),
10952            )
10953            .with_body(body)
10954            .idempotent();
10955        self.service.call(call).await
10956    }
10957    /// Returns the legal document versions a billing account has yet to
10958    /// accept. A version is `blocking` once it is in force: until the account
10959    /// accepts it, creating or growing billable resources charged to the
10960    /// account is refused. Running resources are never affected. Needs
10961    /// `admin.billing_account.get` on the organization.
10962    pub async fn query_legal_requirements(
10963        &self,
10964        mut request: QueryLegalRequirementsRequest,
10965    ) -> ::core::result::Result<
10966        QueryLegalRequirementsResponse,
10967        ::origincloud_core::Error,
10968    > {
10969        let n0 = self.service.relative_name("name", &request.name, &["billing"])?;
10970        let p0 = ::origincloud_core::path_value(
10971            "name",
10972            &n0,
10973            "organizations/*/billingAccounts/*",
10974        )?;
10975        request.name = n0;
10976        let query = ::origincloud_core::query(&request, &["name"])?;
10977        let call = ::origincloud_core::Request::new(
10978                ::origincloud_core::Method::GET,
10979                format!("/v1beta1/{p0}:queryLegalRequirements"),
10980            )
10981            .with_query(query)
10982            .idempotent();
10983        self.service.call(call).await
10984    }
10985}
10986/// Calls `LegalDocumentService`.
10987///
10988/// The legal documents Origin Cloud publishes: the Terms of Service, the Data
10989/// Processing Agreement, the Service Level Agreement and the Acceptable Use
10990/// Policy a customer accepts, and the documents published beside them. Every
10991/// version stays readable under its fixed name once it is published, and none
10992/// is ever changed: a correction is a new version.
10993///
10994/// Every method of this service is answered without an access token.
10995#[derive(Clone, Debug)]
10996pub struct LegalDocumentClient {
10997    service: ::origincloud_core::Service,
10998}
10999impl LegalDocumentClient {
11000    /// Returns a client of `LegalDocumentService` that sends its calls through `client`.
11001    pub fn new(client: &::origincloud_core::Client) -> Self {
11002        Self {
11003            service: client.service("billing", false),
11004        }
11005    }
11006    /// The endpoint the client sends its calls to, which also serves the operations its methods answer with.
11007    pub fn service(&self) -> &::origincloud_core::Service {
11008        &self.service
11009    }
11010    /// Lists the published legal documents, in a fixed order: `terms`, `dpa`,
11011    /// `sla`, `aup`, `subprocessors`, `toms`, `privacy`, `switching`,
11012    /// `shared-responsibility`. A document with no published version yet is
11013    /// left out.
11014    pub async fn list_legal_documents(
11015        &self,
11016        request: ListLegalDocumentsRequest,
11017    ) -> ::core::result::Result<ListLegalDocumentsResponse, ::origincloud_core::Error> {
11018        let query = ::origincloud_core::query(&request, &[])?;
11019        let call = ::origincloud_core::Request::new(
11020                ::origincloud_core::Method::GET,
11021                ::std::string::String::from("/v1beta1/legalDocuments"),
11022            )
11023            .with_query(query)
11024            .idempotent()
11025            .unauthenticated();
11026        self.service.call(call).await
11027    }
11028    /// Returns everything [`list_legal_documents`](Self::list_legal_documents) 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.
11029    pub fn all_legal_documents(
11030        &self,
11031        request: ListLegalDocumentsRequest,
11032    ) -> ::origincloud_core::Pages<LegalDocument> {
11033        let client = self.clone();
11034        ::origincloud_core::Pages::new(
11035            request,
11036            move |request: ListLegalDocumentsRequest| {
11037                let client = client.clone();
11038                async move {
11039                    let page = client.list_legal_documents(request).await?;
11040                    Ok((page.legal_documents, page.next_page_token))
11041                }
11042            },
11043            |request: &mut ListLegalDocumentsRequest, token: ::std::string::String| {
11044                request.page_token = token;
11045            },
11046        )
11047    }
11048    /// Returns a legal document, with the version in force now and the latest
11049    /// one published. Fails with `NOT_FOUND` for a document with no published
11050    /// version.
11051    pub async fn get_legal_document(
11052        &self,
11053        mut request: GetLegalDocumentRequest,
11054    ) -> ::core::result::Result<LegalDocument, ::origincloud_core::Error> {
11055        let n0 = self.service.relative_name("name", &request.name, &["billing"])?;
11056        let p0 = ::origincloud_core::path_value("name", &n0, "legalDocuments/*")?;
11057        request.name = n0;
11058        let query = ::origincloud_core::query(&request, &["name"])?;
11059        let call = ::origincloud_core::Request::new(
11060                ::origincloud_core::Method::GET,
11061                format!("/v1beta1/{p0}"),
11062            )
11063            .with_query(query)
11064            .idempotent()
11065            .unauthenticated();
11066        self.service.call(call).await
11067    }
11068    /// Lists a legal document's published versions, the latest first.
11069    pub async fn list_legal_document_versions(
11070        &self,
11071        mut request: ListLegalDocumentVersionsRequest,
11072    ) -> ::core::result::Result<
11073        ListLegalDocumentVersionsResponse,
11074        ::origincloud_core::Error,
11075    > {
11076        let n0 = self.service.relative_name("parent", &request.parent, &["billing"])?;
11077        let p0 = ::origincloud_core::path_value("parent", &n0, "legalDocuments/*")?;
11078        request.parent = n0;
11079        let query = ::origincloud_core::query(&request, &["parent"])?;
11080        let call = ::origincloud_core::Request::new(
11081                ::origincloud_core::Method::GET,
11082                format!("/v1beta1/{p0}/versions"),
11083            )
11084            .with_query(query)
11085            .idempotent()
11086            .unauthenticated();
11087        self.service.call(call).await
11088    }
11089    /// Returns everything [`list_legal_document_versions`](Self::list_legal_document_versions) 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.
11090    pub fn all_legal_document_versions(
11091        &self,
11092        request: ListLegalDocumentVersionsRequest,
11093    ) -> ::origincloud_core::Pages<LegalDocumentVersion> {
11094        let client = self.clone();
11095        ::origincloud_core::Pages::new(
11096            request,
11097            move |request: ListLegalDocumentVersionsRequest| {
11098                let client = client.clone();
11099                async move {
11100                    let page = client.list_legal_document_versions(request).await?;
11101                    Ok((page.legal_document_versions, page.next_page_token))
11102                }
11103            },
11104            |
11105                request: &mut ListLegalDocumentVersionsRequest,
11106                token: ::std::string::String|
11107            request.page_token = token,
11108        )
11109    }
11110    /// Returns one published version of a legal document, its text included.
11111    pub async fn get_legal_document_version(
11112        &self,
11113        mut request: GetLegalDocumentVersionRequest,
11114    ) -> ::core::result::Result<LegalDocumentVersion, ::origincloud_core::Error> {
11115        let n0 = self.service.relative_name("name", &request.name, &["billing"])?;
11116        let p0 = ::origincloud_core::path_value(
11117            "name",
11118            &n0,
11119            "legalDocuments/*/versions/*",
11120        )?;
11121        request.name = n0;
11122        let query = ::origincloud_core::query(&request, &["name"])?;
11123        let call = ::origincloud_core::Request::new(
11124                ::origincloud_core::Method::GET,
11125                format!("/v1beta1/{p0}"),
11126            )
11127            .with_query(query)
11128            .idempotent()
11129            .unauthenticated();
11130        self.service.call(call).await
11131    }
11132    /// Returns a published version as a PDF (`application/pdf`), the file
11133    /// itself rather than JSON. Every page's footer names the document, the
11134    /// version, the date it takes effect and its `sha256`.
11135    ///
11136    /// It answers with the file itself, not JSON: an [`HttpBody`](origincloud_core::HttpBody) with the file's bytes and media type.
11137    pub async fn download_legal_document_version(
11138        &self,
11139        mut request: DownloadLegalDocumentVersionRequest,
11140    ) -> ::core::result::Result<
11141        ::origincloud_core::HttpBody,
11142        ::origincloud_core::Error,
11143    > {
11144        let n0 = self.service.relative_name("name", &request.name, &["billing"])?;
11145        let p0 = ::origincloud_core::path_value(
11146            "name",
11147            &n0,
11148            "legalDocuments/*/versions/*",
11149        )?;
11150        request.name = n0;
11151        let query = ::origincloud_core::query(&request, &["name"])?;
11152        let call = ::origincloud_core::Request::new(
11153                ::origincloud_core::Method::GET,
11154                format!("/v1beta1/{p0}:download"),
11155            )
11156            .with_query(query)
11157            .idempotent()
11158            .unauthenticated();
11159        self.service.call_http_body(call).await
11160    }
11161}
11162/// Calls `PriceListService`.
11163///
11164/// The public price list: the list price of every billable product, for
11165/// anyone to read, websites included. It needs no access token.
11166///
11167/// Unlike the rest of this API, its path has been `/v1/pricing` since before
11168/// the API was published, and its fields are written in snake case, as
11169/// websites read them.
11170#[derive(Clone, Debug)]
11171pub struct PriceListClient {
11172    service: ::origincloud_core::Service,
11173}
11174impl PriceListClient {
11175    /// Returns a client of `PriceListService` that sends its calls through `client`.
11176    pub fn new(client: &::origincloud_core::Client) -> Self {
11177        Self {
11178            service: client.service("billing", false),
11179        }
11180    }
11181    /// The endpoint the client sends its calls to, which also serves the operations its methods answer with.
11182    pub fn service(&self) -> &::origincloud_core::Service {
11183        &self.service
11184    }
11185    /// Returns the prices in effect now. The answer carries an `ETag`; a
11186    /// request that sends it back in `If-None-Match` is answered
11187    /// `304 Not Modified`, without a body, while the list is unchanged.
11188    pub async fn get_price_list(
11189        &self,
11190        request: GetPriceListRequest,
11191    ) -> ::core::result::Result<PriceList, ::origincloud_core::Error> {
11192        let query = ::origincloud_core::query(&request, &[])?;
11193        let call = ::origincloud_core::Request::new(
11194                ::origincloud_core::Method::GET,
11195                ::std::string::String::from("/v1/pricing"),
11196            )
11197            .with_query(query)
11198            .idempotent();
11199        self.service.call(call).await
11200    }
11201}
11202/// Calls `SpendLimitService`.
11203///
11204/// Spend limits: an amount per calendar month for a billing account, and the
11205/// shares of it at which an alert is emailed. A spend limit only alerts: it
11206/// never stops or refuses anything.
11207///
11208/// Access to spend limits is granted apart from access to billing accounts:
11209/// an organization's owner holds it by default.
11210#[derive(Clone, Debug)]
11211pub struct SpendLimitClient {
11212    service: ::origincloud_core::Service,
11213}
11214impl SpendLimitClient {
11215    /// Returns a client of `SpendLimitService` that sends its calls through `client`.
11216    pub fn new(client: &::origincloud_core::Client) -> Self {
11217        Self {
11218            service: client.service("billing", false),
11219        }
11220    }
11221    /// The endpoint the client sends its calls to, which also serves the operations its methods answer with.
11222    pub fn service(&self) -> &::origincloud_core::Service {
11223        &self.service
11224    }
11225    /// Returns a billing account's spend limit; one that has none has no
11226    /// `limit`. Needs `admin.spend_limit.get` on the organization.
11227    pub async fn get_spend_limit(
11228        &self,
11229        mut request: GetSpendLimitRequest,
11230    ) -> ::core::result::Result<SpendLimit, ::origincloud_core::Error> {
11231        let n0 = self.service.relative_name("name", &request.name, &["billing"])?;
11232        let p0 = ::origincloud_core::path_value(
11233            "name",
11234            &n0,
11235            "organizations/*/billingAccounts/*/spendLimit",
11236        )?;
11237        request.name = n0;
11238        let query = ::origincloud_core::query(&request, &["name"])?;
11239        let call = ::origincloud_core::Request::new(
11240                ::origincloud_core::Method::GET,
11241                format!("/v1beta1/{p0}"),
11242            )
11243            .with_query(query)
11244            .idempotent();
11245        self.service.call(call).await
11246    }
11247    /// Sets or removes a billing account's spend limit. The fields named in
11248    /// `update_mask` are replaced and the others kept. A spend limit left
11249    /// without a `limit` is removed, with its thresholds and recipients. Needs
11250    /// `admin.spend_limit.update` on the organization.
11251    pub async fn update_spend_limit(
11252        &self,
11253        mut request: UpdateSpendLimitRequest,
11254    ) -> ::core::result::Result<SpendLimit, ::origincloud_core::Error> {
11255        let n0 = self
11256            .service
11257            .relative_name(
11258                "spendLimit.name",
11259                request.spend_limit.as_ref().map_or("", |m| m.name.as_str()),
11260                &["billing"],
11261            )?;
11262        let p0 = ::origincloud_core::path_value(
11263            "spendLimit.name",
11264            &n0,
11265            "organizations/*/billingAccounts/*/spendLimit",
11266        )?;
11267        if let Some(m) = request.spend_limit.as_mut() {
11268            m.name = n0;
11269        }
11270        let body = ::origincloud_core::json_body(
11271            request.spend_limit.as_ref().unwrap_or(&::core::default::Default::default()),
11272        )?;
11273        let query = ::origincloud_core::query(
11274            &request,
11275            &["spendLimit.name", "spendLimit"],
11276        )?;
11277        let call = ::origincloud_core::Request::new(
11278                ::origincloud_core::Method::PATCH,
11279                format!("/v1beta1/{p0}"),
11280            )
11281            .with_body(body)
11282            .with_query(query);
11283        self.service.call(call).await
11284    }
11285}