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