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/price_list.proto
5// source: origincloud/billing/v1beta1/spend_limit.proto
6
7/// An organization's billing account: who invoices are issued to, and how
8/// its projects' usage is paid.
9#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
10pub struct BillingAccount {
11    /// The billing account's resource name.
12    #[prost(string, tag = "1")]
13    pub name: ::prost::alloc::string::String,
14    /// The billing account's URN, the identifier access policies and the audit
15    /// log use.
16    #[prost(string, tag = "2")]
17    pub urn: ::prost::alloc::string::String,
18    /// The name the console and spend-limit alerts show. Not empty. An
19    /// organization's default account is called `default` until it is
20    /// renamed.
21    #[prost(string, tag = "3")]
22    pub display_name: ::prost::alloc::string::String,
23    /// Whether this is the organization's default billing account: the one
24    /// its new projects are linked to. Every organization has exactly one,
25    /// and it can't be deleted.
26    #[prost(bool, tag = "4")]
27    pub default_account: bool,
28    /// The postal address invoices are issued to. Required to create an
29    /// account; unset only on an organization's default account until its
30    /// profile is set.
31    #[prost(message, optional, tag = "5")]
32    pub billing_address: ::core::option::Option<BillingAddress>,
33    /// Where invoices are sent. Required to create an account; empty only on
34    /// an organization's default account until its profile is set.
35    #[prost(string, tag = "6")]
36    pub invoice_email: ::prost::alloc::string::String,
37    /// The VAT identification number invoices name; empty for none. Required
38    /// for a billing address outside Germany.
39    #[prost(string, tag = "7")]
40    pub vat_id: ::prost::alloc::string::String,
41    /// Who invoices are addressed to. Required to create an account; empty
42    /// only on an organization's default account until its profile is set.
43    #[prost(string, tag = "8")]
44    pub contact_person: ::prost::alloc::string::String,
45    /// How the account is paid.
46    #[prost(message, optional, tag = "9")]
47    pub payment_method: ::core::option::Option<PaymentMethod>,
48    /// When the billing account was created.
49    #[prost(message, optional, tag = "10")]
50    pub create_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
51    /// The principal that created the billing account, such as `user:<id>` or
52    /// `service_account:<id>`.
53    #[prost(string, tag = "11")]
54    pub creator: ::prost::alloc::string::String,
55}
56/// A postal address invoices are issued to. Every field is required.
57#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
58pub struct BillingAddress {
59    /// The street and house number.
60    #[prost(string, tag = "1")]
61    pub street: ::prost::alloc::string::String,
62    /// The city.
63    #[prost(string, tag = "2")]
64    pub city: ::prost::alloc::string::String,
65    /// The postal code.
66    #[prost(string, tag = "3")]
67    pub postal_code: ::prost::alloc::string::String,
68    /// The country, as the ISO 3166-1 alpha-2 code of one of the countries
69    /// ListBillingCountries lists, such as `DE`.
70    #[prost(string, tag = "4")]
71    pub region_code: ::prost::alloc::string::String,
72}
73/// How a billing account is paid. Only the payment method's kind and the
74/// last digits of a card are shown; the payment details themselves stay
75/// with the payment provider.
76#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
77pub struct PaymentMethod {
78    /// Whether the account can pay for usage.
79    #[prost(enumeration = "payment_method::State", tag = "1")]
80    pub state: i32,
81    /// The verified card's brand, such as `visa`; empty while no payment
82    /// method is verified, and for one that isn't a card.
83    #[prost(string, tag = "2")]
84    pub card_brand: ::prost::alloc::string::String,
85    /// The verified card's last four digits; empty while no payment method is
86    /// verified, and for one that isn't a card.
87    #[prost(string, tag = "3")]
88    pub card_last4: ::prost::alloc::string::String,
89}
90/// Nested message and enum types in `PaymentMethod`.
91pub mod payment_method {
92    /// Whether the account can pay for usage.
93    #[derive(
94        Clone,
95        Copy,
96        Debug,
97        PartialEq,
98        Eq,
99        Hash,
100        PartialOrd,
101        Ord,
102        ::prost::Enumeration
103    )]
104    #[repr(i32)]
105    pub enum State {
106        /// Not set.
107        Unspecified = 0,
108        /// No verified payment method: the projects linked to the account can't
109        /// create billable resources until one is added with
110        /// StartPaymentMethodSetup and ConfirmPaymentMethodSetup.
111        Missing = 1,
112        /// A payment method is verified, and billable resources can be created.
113        Verified = 2,
114        /// The account is invoiced by arrangement with the platform's operator:
115        /// it needs no payment method, and the setup methods are refused.
116        NotRequired = 3,
117    }
118    impl State {
119        /// String value of the enum field names used in the ProtoBuf definition.
120        ///
121        /// The values are not transformed in any way and thus are considered stable
122        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
123        pub fn as_str_name(&self) -> &'static str {
124            match self {
125                Self::Unspecified => "STATE_UNSPECIFIED",
126                Self::Missing => "MISSING",
127                Self::Verified => "VERIFIED",
128                Self::NotRequired => "NOT_REQUIRED",
129            }
130        }
131        /// Creates an enum from field names used in the ProtoBuf definition.
132        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
133            match value {
134                "STATE_UNSPECIFIED" => Some(Self::Unspecified),
135                "MISSING" => Some(Self::Missing),
136                "VERIFIED" => Some(Self::Verified),
137                "NOT_REQUIRED" => Some(Self::NotRequired),
138                _ => None,
139            }
140        }
141    }
142}
143/// Which billing account pays for a project.
144#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
145pub struct ProjectBillingInfo {
146    /// The billing info's resource name, `projects/{project}/billingInfo`.
147    #[prost(string, tag = "1")]
148    pub name: ::prost::alloc::string::String,
149    /// The billing account that pays for the project's usage, one of its
150    /// organization's.
151    #[prost(string, tag = "3")]
152    pub billing_account: ::prost::alloc::string::String,
153}
154/// A country a billing address may be in.
155#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
156pub struct BillingCountry {
157    /// The country's resource name, `billingCountries/{code}`.
158    #[prost(string, tag = "1")]
159    pub name: ::prost::alloc::string::String,
160    /// The ISO 3166-1 alpha-2 code a billing address names it by, such as
161    /// `DE`.
162    #[prost(string, tag = "2")]
163    pub region_code: ::prost::alloc::string::String,
164    /// The country's name in English.
165    #[prost(string, tag = "3")]
166    pub display_name: ::prost::alloc::string::String,
167    /// Whether a billing account with an address in this country needs a
168    /// `vat_id`. Customers in every country but Germany are invoiced without
169    /// VAT, as businesses under the reverse-charge rule, which needs one.
170    #[prost(bool, tag = "4")]
171    pub vat_id_required: bool,
172}
173/// The request for GetBillingAccount.
174#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
175pub struct GetBillingAccountRequest {
176    /// The billing account to return.
177    #[prost(string, tag = "1")]
178    pub name: ::prost::alloc::string::String,
179}
180/// The request for ListBillingAccounts.
181#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
182pub struct ListBillingAccountsRequest {
183    /// The organization whose billing accounts to list,
184    /// `organizations/{organization}`.
185    #[prost(string, tag = "1")]
186    pub parent: ::prost::alloc::string::String,
187    /// The most billing accounts to return; the server clamps it, and 0 means
188    /// its default.
189    #[prost(int32, tag = "2")]
190    pub page_size: i32,
191    /// A previous response's `next_page_token`, for the page after it.
192    #[prost(string, tag = "3")]
193    pub page_token: ::prost::alloc::string::String,
194}
195/// The response for ListBillingAccounts.
196#[derive(Clone, PartialEq, ::prost::Message)]
197pub struct ListBillingAccountsResponse {
198    /// The billing accounts on this page.
199    #[prost(message, repeated, tag = "1")]
200    pub billing_accounts: ::prost::alloc::vec::Vec<BillingAccount>,
201    /// The token for the next page; empty on the last one.
202    #[prost(string, tag = "2")]
203    pub next_page_token: ::prost::alloc::string::String,
204}
205/// The request for CreateBillingAccount.
206#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
207pub struct CreateBillingAccountRequest {
208    /// The organization to create the billing account in,
209    /// `organizations/{organization}`.
210    #[prost(string, tag = "1")]
211    pub parent: ::prost::alloc::string::String,
212    /// The billing account to create: its `display_name` and profile.
213    #[prost(message, optional, tag = "2")]
214    pub billing_account: ::core::option::Option<BillingAccount>,
215    /// A UUID; a repeat with the same id returns the billing account the first
216    /// request created instead of creating a second one.
217    #[prost(string, tag = "3")]
218    pub request_id: ::prost::alloc::string::String,
219}
220/// The request for UpdateBillingAccount.
221#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
222pub struct UpdateBillingAccountRequest {
223    /// The billing account, by its name, with the fields to change.
224    #[prost(message, optional, tag = "1")]
225    pub billing_account: ::core::option::Option<BillingAccount>,
226    /// The fields to change: `display_name`, `billing_address`,
227    /// `invoice_email`, `vat_id` and `contact_person`. `*` is every one of
228    /// them.
229    #[prost(message, optional, tag = "2")]
230    pub update_mask: ::core::option::Option<::origincloud_core::protobuf::FieldMask>,
231}
232/// The request for DeleteBillingAccount.
233#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
234pub struct DeleteBillingAccountRequest {
235    /// The billing account to delete.
236    #[prost(string, tag = "1")]
237    pub name: ::prost::alloc::string::String,
238}
239/// The request for StartPaymentMethodSetup.
240#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
241pub struct StartPaymentMethodSetupRequest {
242    /// The billing account to add a payment method to.
243    #[prost(string, tag = "1")]
244    pub name: ::prost::alloc::string::String,
245}
246/// The response for StartPaymentMethodSetup.
247#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
248pub struct StartPaymentMethodSetupResponse {
249    /// The payment provider's page to open in a browser, where the payment
250    /// details are entered. It returns to the console when done.
251    #[prost(string, tag = "1")]
252    pub redirect_uri: ::prost::alloc::string::String,
253}
254/// The request for ConfirmPaymentMethodSetup.
255#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
256pub struct ConfirmPaymentMethodSetupRequest {
257    /// The billing account whose setup to complete.
258    #[prost(string, tag = "1")]
259    pub name: ::prost::alloc::string::String,
260}
261/// The request for GetProjectBillingInfo.
262#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
263pub struct GetProjectBillingInfoRequest {
264    /// The billing info to return, `projects/{project}/billingInfo`.
265    #[prost(string, tag = "1")]
266    pub name: ::prost::alloc::string::String,
267}
268/// The request for UpdateProjectBillingInfo.
269#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
270pub struct UpdateProjectBillingInfoRequest {
271    /// The billing info, by its name, with the billing account to link.
272    #[prost(message, optional, tag = "1")]
273    pub project_billing_info: ::core::option::Option<ProjectBillingInfo>,
274    /// The fields to change: `billing_account`. `*` is the same.
275    #[prost(message, optional, tag = "2")]
276    pub update_mask: ::core::option::Option<::origincloud_core::protobuf::FieldMask>,
277}
278/// The request for ListProjectBillingInfo.
279#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
280pub struct ListProjectBillingInfoRequest {
281    /// The billing account whose projects to list.
282    #[prost(string, tag = "1")]
283    pub name: ::prost::alloc::string::String,
284    /// The most projects to return; the server clamps it, and 0 means its
285    /// default.
286    #[prost(int32, tag = "2")]
287    pub page_size: i32,
288    /// A previous response's `next_page_token`, for the page after it.
289    #[prost(string, tag = "3")]
290    pub page_token: ::prost::alloc::string::String,
291}
292/// The response for ListProjectBillingInfo.
293#[derive(Clone, PartialEq, ::prost::Message)]
294pub struct ListProjectBillingInfoResponse {
295    /// The billing info of each project on this page.
296    #[prost(message, repeated, tag = "1")]
297    pub project_billing_infos: ::prost::alloc::vec::Vec<ProjectBillingInfo>,
298    /// The token for the next page; empty on the last one.
299    #[prost(string, tag = "2")]
300    pub next_page_token: ::prost::alloc::string::String,
301}
302/// The request for GetBillingCountry.
303#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
304pub struct GetBillingCountryRequest {
305    /// The country to return, `billingCountries/{code}`, such as
306    /// `billingCountries/DE`.
307    #[prost(string, tag = "1")]
308    pub name: ::prost::alloc::string::String,
309}
310/// The request for ListBillingCountries.
311#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
312pub struct ListBillingCountriesRequest {
313    /// The most countries to return; the server clamps it, and 0 means its
314    /// default.
315    #[prost(int32, tag = "1")]
316    pub page_size: i32,
317    /// A previous response's `next_page_token`, for the page after it.
318    #[prost(string, tag = "2")]
319    pub page_token: ::prost::alloc::string::String,
320}
321/// The response for ListBillingCountries.
322#[derive(Clone, PartialEq, ::prost::Message)]
323pub struct ListBillingCountriesResponse {
324    /// The countries on this page.
325    #[prost(message, repeated, tag = "1")]
326    pub billing_countries: ::prost::alloc::vec::Vec<BillingCountry>,
327    /// The token for the next page; empty on the last one.
328    #[prost(string, tag = "2")]
329    pub next_page_token: ::prost::alloc::string::String,
330}
331/// A cost report: the period's total, by service and, within a service, by
332/// product. Every amount is in EUR, before VAT, as a decimal string.
333#[derive(Clone, PartialEq, ::prost::Message)]
334pub struct CostReport {
335    /// The period's total.
336    #[prost(string, tag = "1")]
337    pub total: ::prost::alloc::string::String,
338    /// Each service with any cost in the period, such as `compute`, in name
339    /// order.
340    #[prost(message, repeated, tag = "2")]
341    pub services: ::prost::alloc::vec::Vec<ServiceCost>,
342}
343/// One service's cost in a report.
344#[derive(Clone, PartialEq, ::prost::Message)]
345pub struct ServiceCost {
346    /// The service, the first segment of its products' keys, such as
347    /// `compute`.
348    #[prost(string, tag = "1")]
349    pub service: ::prost::alloc::string::String,
350    /// The service's total.
351    #[prost(string, tag = "2")]
352    pub total: ::prost::alloc::string::String,
353    /// Each of the service's products with any cost in the period, in key
354    /// order.
355    #[prost(message, repeated, tag = "3")]
356    pub products: ::prost::alloc::vec::Vec<ProductCost>,
357}
358/// One product's cost in a report.
359#[derive(Clone, PartialEq, ::prost::Message)]
360pub struct ProductCost {
361    /// The product as the price list names it, such as `compute.gp1.core.2`.
362    #[prost(string, tag = "1")]
363    pub product_key: ::prost::alloc::string::String,
364    /// The product's total.
365    #[prost(string, tag = "2")]
366    pub total: ::prost::alloc::string::String,
367    /// The buckets with any cost, oldest first.
368    #[prost(message, repeated, tag = "3")]
369    pub buckets: ::prost::alloc::vec::Vec<CostBucket>,
370}
371/// The cost of one hour or one day.
372#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
373pub struct CostBucket {
374    /// When the bucket starts.
375    #[prost(message, optional, tag = "1")]
376    pub start_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
377    /// The bucket's cost.
378    #[prost(string, tag = "2")]
379    pub amount: ::prost::alloc::string::String,
380}
381/// An organization's cost report: its projects' together, and each
382/// project's.
383#[derive(Clone, PartialEq, ::prost::Message)]
384pub struct OrganizationCostReport {
385    /// The period's total of every project.
386    #[prost(string, tag = "1")]
387    pub total: ::prost::alloc::string::String,
388    /// Each service with any cost in the period, over every project.
389    #[prost(message, repeated, tag = "2")]
390    pub services: ::prost::alloc::vec::Vec<ServiceCost>,
391    /// Each project with any cost in the period, in id order, a project
392    /// deleted since included.
393    #[prost(message, repeated, tag = "3")]
394    pub projects: ::prost::alloc::vec::Vec<ProjectCost>,
395}
396/// One project's cost in an organization's report, over every service.
397#[derive(Clone, PartialEq, ::prost::Message)]
398pub struct ProjectCost {
399    /// The project, `projects/{project}`.
400    #[prost(string, tag = "1")]
401    pub project: ::prost::alloc::string::String,
402    /// The project's total.
403    #[prost(string, tag = "2")]
404    pub total: ::prost::alloc::string::String,
405    /// The buckets with any cost, oldest first.
406    #[prost(message, repeated, tag = "3")]
407    pub buckets: ::prost::alloc::vec::Vec<CostBucket>,
408}
409/// One metered interval of one resource: how much of a metric it used from
410/// `start_time` to `end_time`.
411#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
412pub struct UsageRecord {
413    /// The kind of resource, such as `compute.instance`.
414    #[prost(string, tag = "1")]
415    pub resource_kind: ::prost::alloc::string::String,
416    /// The resource's id.
417    #[prost(string, tag = "2")]
418    pub resource_id: ::prost::alloc::string::String,
419    /// What was measured, such as `running_seconds`.
420    #[prost(string, tag = "3")]
421    pub metric: ::prost::alloc::string::String,
422    /// The product the usage is priced as, such as `compute.gp1.core.2`;
423    /// empty for a kind of resource that has none.
424    #[prost(string, tag = "4")]
425    pub product_key: ::prost::alloc::string::String,
426    /// How much was used, in the metric's unit, as a decimal string.
427    #[prost(string, tag = "5")]
428    pub quantity: ::prost::alloc::string::String,
429    /// When the interval starts.
430    #[prost(message, optional, tag = "6")]
431    pub start_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
432    /// When the interval ends.
433    #[prost(message, optional, tag = "7")]
434    pub end_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
435    /// The billing account the usage was charged to, the one the project was
436    /// linked to when it was recorded; empty if it had none.
437    #[prost(string, tag = "8")]
438    pub billing_account: ::prost::alloc::string::String,
439}
440/// The request for QueryProjectCost.
441#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
442pub struct QueryProjectCostRequest {
443    /// The project, `projects/{project}`.
444    #[prost(string, tag = "1")]
445    pub project: ::prost::alloc::string::String,
446    /// The period's start, included.
447    #[prost(message, optional, tag = "2")]
448    pub start_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
449    /// The period's end, left out; after `start_time`.
450    #[prost(message, optional, tag = "3")]
451    pub end_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
452    /// How finely to bucket the cost; daily when unset.
453    #[prost(enumeration = "Granularity", tag = "4")]
454    pub granularity: i32,
455}
456/// The request for QueryOrganizationCost.
457#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
458pub struct QueryOrganizationCostRequest {
459    /// The organization, `organizations/{organization}`.
460    #[prost(string, tag = "1")]
461    pub organization: ::prost::alloc::string::String,
462    /// The period's start, included.
463    #[prost(message, optional, tag = "2")]
464    pub start_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
465    /// The period's end, left out; after `start_time`.
466    #[prost(message, optional, tag = "3")]
467    pub end_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
468    /// How finely to bucket the cost; daily when unset.
469    #[prost(enumeration = "Granularity", tag = "4")]
470    pub granularity: i32,
471}
472/// The request for QueryBillingAccountCost.
473#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
474pub struct QueryBillingAccountCostRequest {
475    /// The billing account.
476    #[prost(string, tag = "1")]
477    pub billing_account: ::prost::alloc::string::String,
478    /// The period's start, included.
479    #[prost(message, optional, tag = "2")]
480    pub start_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
481    /// The period's end, left out; after `start_time`.
482    #[prost(message, optional, tag = "3")]
483    pub end_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
484    /// How finely to bucket the cost; daily when unset.
485    #[prost(enumeration = "Granularity", tag = "4")]
486    pub granularity: i32,
487}
488/// The request for QueryProjectUsage.
489#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
490pub struct QueryProjectUsageRequest {
491    /// The project, `projects/{project}`.
492    #[prost(string, tag = "1")]
493    pub project: ::prost::alloc::string::String,
494    /// The period's start: records that end after it are listed.
495    #[prost(message, optional, tag = "2")]
496    pub start_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
497    /// The period's end: records that start before it are listed; after
498    /// `start_time`.
499    #[prost(message, optional, tag = "3")]
500    pub end_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
501    /// The most records to return; the server clamps it, and 0 means its
502    /// default.
503    #[prost(int32, tag = "4")]
504    pub page_size: i32,
505    /// A previous response's `next_page_token`, for the page after it.
506    #[prost(string, tag = "5")]
507    pub page_token: ::prost::alloc::string::String,
508}
509/// The response for QueryProjectUsage.
510#[derive(Clone, PartialEq, ::prost::Message)]
511pub struct QueryProjectUsageResponse {
512    /// The usage records on this page.
513    #[prost(message, repeated, tag = "1")]
514    pub usage_records: ::prost::alloc::vec::Vec<UsageRecord>,
515    /// The token for the next page; empty on the last one.
516    #[prost(string, tag = "2")]
517    pub next_page_token: ::prost::alloc::string::String,
518}
519/// How finely a report's cost is bucketed.
520#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
521#[repr(i32)]
522pub enum Granularity {
523    /// Not set: daily.
524    Unspecified = 0,
525    /// One bucket per hour, starting on the hour.
526    Hourly = 1,
527    /// One bucket per day, starting at midnight UTC.
528    Daily = 2,
529}
530impl Granularity {
531    /// String value of the enum field names used in the ProtoBuf definition.
532    ///
533    /// The values are not transformed in any way and thus are considered stable
534    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
535    pub fn as_str_name(&self) -> &'static str {
536        match self {
537            Self::Unspecified => "GRANULARITY_UNSPECIFIED",
538            Self::Hourly => "HOURLY",
539            Self::Daily => "DAILY",
540        }
541    }
542    /// Creates an enum from field names used in the ProtoBuf definition.
543    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
544        match value {
545            "GRANULARITY_UNSPECIFIED" => Some(Self::Unspecified),
546            "HOURLY" => Some(Self::Hourly),
547            "DAILY" => Some(Self::Daily),
548            _ => None,
549        }
550    }
551}
552/// The price list. Every amount is in EUR, before VAT, which depends on the
553/// customer's country and is added on the invoice.
554#[derive(Clone, PartialEq, ::prost::Message)]
555pub struct PriceList {
556    /// Always `EUR`.
557    #[prost(string, tag = "1")]
558    pub currency: ::prost::alloc::string::String,
559    /// Always true: every amount is net, before VAT.
560    #[prost(bool, tag = "2")]
561    pub amounts_exclude_vat: bool,
562    /// When a list price was last set, changed, took effect or ended: what a
563    /// "prices last updated" line shows. Unset only while nothing is priced.
564    #[prost(message, optional, tag = "3")]
565    pub last_changed: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
566    /// One entry per product family with a price in effect, in the platform's
567    /// catalog order: `compute_instance`, `network_floating_ip`,
568    /// `network_nat_gateway`, `network_vpc_egress`, `network_vpc_ingress`,
569    /// `network_vpc_internal`, `storage_volume`, `storage_snapshot`,
570    /// `observability_custom_metric`, `observability_api_request`,
571    /// `observability_ingested_sample`.
572    #[prost(message, repeated, tag = "4")]
573    pub families: ::prost::alloc::vec::Vec<PriceFamily>,
574}
575/// One product family's prices.
576#[derive(Clone, PartialEq, ::prost::Message)]
577pub struct PriceFamily {
578    /// The family, such as `compute_instance`.
579    #[prost(string, tag = "1")]
580    pub family: ::prost::alloc::string::String,
581    /// The family's prices in effect, by product key, numbers compared as
582    /// numbers: a class's instance types run from smallest to largest.
583    #[prost(message, repeated, tag = "2")]
584    pub prices: ::prost::alloc::vec::Vec<Price>,
585}
586/// The list price of one product.
587#[derive(Clone, PartialEq, ::prost::Message)]
588pub struct Price {
589    /// The product the price bills, as usage and cost reports name it, such
590    /// as `compute.gp1.core.2`, `storage.gp1` or `network.vpc_egress`.
591    #[prost(string, tag = "1")]
592    pub product_key: ::prost::alloc::string::String,
593    /// The parts of the product key, split out: `instance_type` for an instance,
594    /// `storage_class` for a volume. Empty for a product that has none.
595    #[prost(btree_map = "string, string", tag = "2")]
596    pub dimensions: ::prost::alloc::collections::BTreeMap<
597        ::prost::alloc::string::String,
598        ::prost::alloc::string::String,
599    >,
600    /// What is counted: `seconds`, `gib_hours`, `gb` (decimal, 10^9 bytes),
601    /// `metric_months`, `requests` or `samples`.
602    #[prost(string, tag = "3")]
603    pub unit_type: ::prost::alloc::string::String,
604    /// How many of the unit the amount pays for: `3600` seconds is an
605    /// hourly rate, `1000` requests a rate per thousand.
606    #[prost(uint32, tag = "4")]
607    pub unit_count: u32,
608    /// The price of that many units, as a decimal string.
609    #[prost(string, tag = "5")]
610    pub amount: ::prost::alloc::string::String,
611    /// When the price took effect.
612    #[prost(message, optional, tag = "6")]
613    pub valid_from: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
614    /// When the price is to end; unset while no end is scheduled.
615    #[prost(message, optional, tag = "7")]
616    pub valid_until: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
617}
618/// The request for GetPriceList, which takes nothing.
619#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
620pub struct GetPriceListRequest {}
621/// A billing account's spend limit: the most it means to spend in a calendar
622/// month, and when to be told. Each threshold alerts once a month, the first
623/// time the month's spend crosses it.
624#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
625pub struct SpendLimit {
626    /// The spend limit's resource name,
627    /// `organizations/{organization}/billingAccounts/{billing_account}/spendLimit`.
628    #[prost(string, tag = "1")]
629    pub name: ::prost::alloc::string::String,
630    /// The amount per calendar month in EUR, before VAT, as a decimal string
631    /// such as `500.00`; more than zero. Unset means no spend limit.
632    #[prost(string, optional, tag = "2")]
633    pub limit: ::core::option::Option<::prost::alloc::string::String>,
634    /// The percentages of `limit` whose crossing emails an alert, such as `80`
635    /// and `100`; each from 1 to 32767, so a threshold can lie beyond the
636    /// limit. Empty while there is no `limit`.
637    #[prost(int32, repeated, packed = "false", tag = "3")]
638    pub alert_thresholds_percent: ::prost::alloc::vec::Vec<i32>,
639    /// Where alerts are sent. Empty while there is no `limit`, and an alert
640    /// with no recipient is sent to nobody.
641    #[prost(string, repeated, tag = "4")]
642    pub notification_emails: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
643    /// When the spend limit was last set; unset while there is none.
644    #[prost(message, optional, tag = "5")]
645    pub update_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
646}
647/// The request for GetSpendLimit.
648#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
649pub struct GetSpendLimitRequest {
650    /// The spend limit to return.
651    #[prost(string, tag = "1")]
652    pub name: ::prost::alloc::string::String,
653}
654/// The request for UpdateSpendLimit.
655#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
656pub struct UpdateSpendLimitRequest {
657    /// The spend limit, by its name, with the fields to change.
658    #[prost(message, optional, tag = "1")]
659    pub spend_limit: ::core::option::Option<SpendLimit>,
660    /// The fields to change: `limit`, `alert_thresholds_percent` and
661    /// `notification_emails`. `*` is every one of them.
662    #[prost(message, optional, tag = "2")]
663    pub update_mask: ::core::option::Option<::origincloud_core::protobuf::FieldMask>,
664}
665impl serde::Serialize for BillingAccount {
666    #[allow(deprecated)]
667    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
668    where
669        S: serde::Serializer,
670    {
671        use serde::ser::SerializeStruct;
672        let mut len = 0;
673        if !self.name.is_empty() {
674            len += 1;
675        }
676        if !self.urn.is_empty() {
677            len += 1;
678        }
679        if !self.display_name.is_empty() {
680            len += 1;
681        }
682        if self.default_account {
683            len += 1;
684        }
685        if self.billing_address.is_some() {
686            len += 1;
687        }
688        if !self.invoice_email.is_empty() {
689            len += 1;
690        }
691        if !self.vat_id.is_empty() {
692            len += 1;
693        }
694        if !self.contact_person.is_empty() {
695            len += 1;
696        }
697        if self.payment_method.is_some() {
698            len += 1;
699        }
700        if self.create_time.is_some() {
701            len += 1;
702        }
703        if !self.creator.is_empty() {
704            len += 1;
705        }
706        let mut struct_ser = serializer
707            .serialize_struct("origincloud.billing.v1beta1.BillingAccount", len)?;
708        if !self.name.is_empty() {
709            struct_ser.serialize_field("name", &self.name)?;
710        }
711        if !self.urn.is_empty() {
712            struct_ser.serialize_field("urn", &self.urn)?;
713        }
714        if !self.display_name.is_empty() {
715            struct_ser.serialize_field("displayName", &self.display_name)?;
716        }
717        if self.default_account {
718            struct_ser.serialize_field("defaultAccount", &self.default_account)?;
719        }
720        if let Some(v) = self.billing_address.as_ref() {
721            struct_ser.serialize_field("billingAddress", v)?;
722        }
723        if !self.invoice_email.is_empty() {
724            struct_ser.serialize_field("invoiceEmail", &self.invoice_email)?;
725        }
726        if !self.vat_id.is_empty() {
727            struct_ser.serialize_field("vatId", &self.vat_id)?;
728        }
729        if !self.contact_person.is_empty() {
730            struct_ser.serialize_field("contactPerson", &self.contact_person)?;
731        }
732        if let Some(v) = self.payment_method.as_ref() {
733            struct_ser.serialize_field("paymentMethod", v)?;
734        }
735        if let Some(v) = self.create_time.as_ref() {
736            struct_ser.serialize_field("createTime", v)?;
737        }
738        if !self.creator.is_empty() {
739            struct_ser.serialize_field("creator", &self.creator)?;
740        }
741        struct_ser.end()
742    }
743}
744impl<'de> serde::Deserialize<'de> for BillingAccount {
745    #[allow(deprecated)]
746    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
747    where
748        D: serde::Deserializer<'de>,
749    {
750        const FIELDS: &[&str] = &[
751            "name",
752            "urn",
753            "display_name",
754            "displayName",
755            "default_account",
756            "defaultAccount",
757            "billing_address",
758            "billingAddress",
759            "invoice_email",
760            "invoiceEmail",
761            "vat_id",
762            "vatId",
763            "contact_person",
764            "contactPerson",
765            "payment_method",
766            "paymentMethod",
767            "create_time",
768            "createTime",
769            "creator",
770        ];
771        #[allow(clippy::enum_variant_names)]
772        enum GeneratedField {
773            Name,
774            Urn,
775            DisplayName,
776            DefaultAccount,
777            BillingAddress,
778            InvoiceEmail,
779            VatId,
780            ContactPerson,
781            PaymentMethod,
782            CreateTime,
783            Creator,
784            __SkipField__,
785        }
786        impl<'de> serde::Deserialize<'de> for GeneratedField {
787            fn deserialize<D>(
788                deserializer: D,
789            ) -> std::result::Result<GeneratedField, D::Error>
790            where
791                D: serde::Deserializer<'de>,
792            {
793                struct GeneratedVisitor;
794                impl serde::de::Visitor<'_> for GeneratedVisitor {
795                    type Value = GeneratedField;
796                    fn expecting(
797                        &self,
798                        formatter: &mut std::fmt::Formatter<'_>,
799                    ) -> std::fmt::Result {
800                        write!(formatter, "expected one of: {:?}", & FIELDS)
801                    }
802                    #[allow(unused_variables)]
803                    fn visit_str<E>(
804                        self,
805                        value: &str,
806                    ) -> std::result::Result<GeneratedField, E>
807                    where
808                        E: serde::de::Error,
809                    {
810                        match value {
811                            "name" => Ok(GeneratedField::Name),
812                            "urn" => Ok(GeneratedField::Urn),
813                            "displayName" | "display_name" => {
814                                Ok(GeneratedField::DisplayName)
815                            }
816                            "defaultAccount" | "default_account" => {
817                                Ok(GeneratedField::DefaultAccount)
818                            }
819                            "billingAddress" | "billing_address" => {
820                                Ok(GeneratedField::BillingAddress)
821                            }
822                            "invoiceEmail" | "invoice_email" => {
823                                Ok(GeneratedField::InvoiceEmail)
824                            }
825                            "vatId" | "vat_id" => Ok(GeneratedField::VatId),
826                            "contactPerson" | "contact_person" => {
827                                Ok(GeneratedField::ContactPerson)
828                            }
829                            "paymentMethod" | "payment_method" => {
830                                Ok(GeneratedField::PaymentMethod)
831                            }
832                            "createTime" | "create_time" => {
833                                Ok(GeneratedField::CreateTime)
834                            }
835                            "creator" => Ok(GeneratedField::Creator),
836                            _ => Ok(GeneratedField::__SkipField__),
837                        }
838                    }
839                }
840                deserializer.deserialize_identifier(GeneratedVisitor)
841            }
842        }
843        struct GeneratedVisitor;
844        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
845            type Value = BillingAccount;
846            fn expecting(
847                &self,
848                formatter: &mut std::fmt::Formatter<'_>,
849            ) -> std::fmt::Result {
850                formatter.write_str("struct origincloud.billing.v1beta1.BillingAccount")
851            }
852            fn visit_map<V>(
853                self,
854                mut map_: V,
855            ) -> std::result::Result<BillingAccount, V::Error>
856            where
857                V: serde::de::MapAccess<'de>,
858            {
859                let mut name__ = None;
860                let mut urn__ = None;
861                let mut display_name__ = None;
862                let mut default_account__ = None;
863                let mut billing_address__ = None;
864                let mut invoice_email__ = None;
865                let mut vat_id__ = None;
866                let mut contact_person__ = None;
867                let mut payment_method__ = None;
868                let mut create_time__ = None;
869                let mut creator__ = None;
870                while let Some(k) = map_.next_key()? {
871                    match k {
872                        GeneratedField::Name => {
873                            if name__.is_some() {
874                                return Err(serde::de::Error::duplicate_field("name"));
875                            }
876                            name__ = Some(map_.next_value()?);
877                        }
878                        GeneratedField::Urn => {
879                            if urn__.is_some() {
880                                return Err(serde::de::Error::duplicate_field("urn"));
881                            }
882                            urn__ = Some(map_.next_value()?);
883                        }
884                        GeneratedField::DisplayName => {
885                            if display_name__.is_some() {
886                                return Err(
887                                    serde::de::Error::duplicate_field("displayName"),
888                                );
889                            }
890                            display_name__ = Some(map_.next_value()?);
891                        }
892                        GeneratedField::DefaultAccount => {
893                            if default_account__.is_some() {
894                                return Err(
895                                    serde::de::Error::duplicate_field("defaultAccount"),
896                                );
897                            }
898                            default_account__ = Some(map_.next_value()?);
899                        }
900                        GeneratedField::BillingAddress => {
901                            if billing_address__.is_some() {
902                                return Err(
903                                    serde::de::Error::duplicate_field("billingAddress"),
904                                );
905                            }
906                            billing_address__ = map_.next_value()?;
907                        }
908                        GeneratedField::InvoiceEmail => {
909                            if invoice_email__.is_some() {
910                                return Err(
911                                    serde::de::Error::duplicate_field("invoiceEmail"),
912                                );
913                            }
914                            invoice_email__ = Some(map_.next_value()?);
915                        }
916                        GeneratedField::VatId => {
917                            if vat_id__.is_some() {
918                                return Err(serde::de::Error::duplicate_field("vatId"));
919                            }
920                            vat_id__ = Some(map_.next_value()?);
921                        }
922                        GeneratedField::ContactPerson => {
923                            if contact_person__.is_some() {
924                                return Err(
925                                    serde::de::Error::duplicate_field("contactPerson"),
926                                );
927                            }
928                            contact_person__ = Some(map_.next_value()?);
929                        }
930                        GeneratedField::PaymentMethod => {
931                            if payment_method__.is_some() {
932                                return Err(
933                                    serde::de::Error::duplicate_field("paymentMethod"),
934                                );
935                            }
936                            payment_method__ = map_.next_value()?;
937                        }
938                        GeneratedField::CreateTime => {
939                            if create_time__.is_some() {
940                                return Err(serde::de::Error::duplicate_field("createTime"));
941                            }
942                            create_time__ = map_.next_value()?;
943                        }
944                        GeneratedField::Creator => {
945                            if creator__.is_some() {
946                                return Err(serde::de::Error::duplicate_field("creator"));
947                            }
948                            creator__ = Some(map_.next_value()?);
949                        }
950                        GeneratedField::__SkipField__ => {
951                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
952                        }
953                    }
954                }
955                Ok(BillingAccount {
956                    name: name__.unwrap_or_default(),
957                    urn: urn__.unwrap_or_default(),
958                    display_name: display_name__.unwrap_or_default(),
959                    default_account: default_account__.unwrap_or_default(),
960                    billing_address: billing_address__,
961                    invoice_email: invoice_email__.unwrap_or_default(),
962                    vat_id: vat_id__.unwrap_or_default(),
963                    contact_person: contact_person__.unwrap_or_default(),
964                    payment_method: payment_method__,
965                    create_time: create_time__,
966                    creator: creator__.unwrap_or_default(),
967                })
968            }
969        }
970        deserializer
971            .deserialize_struct(
972                "origincloud.billing.v1beta1.BillingAccount",
973                FIELDS,
974                GeneratedVisitor,
975            )
976    }
977}
978impl serde::Serialize for BillingAddress {
979    #[allow(deprecated)]
980    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
981    where
982        S: serde::Serializer,
983    {
984        use serde::ser::SerializeStruct;
985        let mut len = 0;
986        if !self.street.is_empty() {
987            len += 1;
988        }
989        if !self.city.is_empty() {
990            len += 1;
991        }
992        if !self.postal_code.is_empty() {
993            len += 1;
994        }
995        if !self.region_code.is_empty() {
996            len += 1;
997        }
998        let mut struct_ser = serializer
999            .serialize_struct("origincloud.billing.v1beta1.BillingAddress", len)?;
1000        if !self.street.is_empty() {
1001            struct_ser.serialize_field("street", &self.street)?;
1002        }
1003        if !self.city.is_empty() {
1004            struct_ser.serialize_field("city", &self.city)?;
1005        }
1006        if !self.postal_code.is_empty() {
1007            struct_ser.serialize_field("postalCode", &self.postal_code)?;
1008        }
1009        if !self.region_code.is_empty() {
1010            struct_ser.serialize_field("regionCode", &self.region_code)?;
1011        }
1012        struct_ser.end()
1013    }
1014}
1015impl<'de> serde::Deserialize<'de> for BillingAddress {
1016    #[allow(deprecated)]
1017    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1018    where
1019        D: serde::Deserializer<'de>,
1020    {
1021        const FIELDS: &[&str] = &[
1022            "street",
1023            "city",
1024            "postal_code",
1025            "postalCode",
1026            "region_code",
1027            "regionCode",
1028        ];
1029        #[allow(clippy::enum_variant_names)]
1030        enum GeneratedField {
1031            Street,
1032            City,
1033            PostalCode,
1034            RegionCode,
1035            __SkipField__,
1036        }
1037        impl<'de> serde::Deserialize<'de> for GeneratedField {
1038            fn deserialize<D>(
1039                deserializer: D,
1040            ) -> std::result::Result<GeneratedField, D::Error>
1041            where
1042                D: serde::Deserializer<'de>,
1043            {
1044                struct GeneratedVisitor;
1045                impl serde::de::Visitor<'_> for GeneratedVisitor {
1046                    type Value = GeneratedField;
1047                    fn expecting(
1048                        &self,
1049                        formatter: &mut std::fmt::Formatter<'_>,
1050                    ) -> std::fmt::Result {
1051                        write!(formatter, "expected one of: {:?}", & FIELDS)
1052                    }
1053                    #[allow(unused_variables)]
1054                    fn visit_str<E>(
1055                        self,
1056                        value: &str,
1057                    ) -> std::result::Result<GeneratedField, E>
1058                    where
1059                        E: serde::de::Error,
1060                    {
1061                        match value {
1062                            "street" => Ok(GeneratedField::Street),
1063                            "city" => Ok(GeneratedField::City),
1064                            "postalCode" | "postal_code" => {
1065                                Ok(GeneratedField::PostalCode)
1066                            }
1067                            "regionCode" | "region_code" => {
1068                                Ok(GeneratedField::RegionCode)
1069                            }
1070                            _ => Ok(GeneratedField::__SkipField__),
1071                        }
1072                    }
1073                }
1074                deserializer.deserialize_identifier(GeneratedVisitor)
1075            }
1076        }
1077        struct GeneratedVisitor;
1078        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1079            type Value = BillingAddress;
1080            fn expecting(
1081                &self,
1082                formatter: &mut std::fmt::Formatter<'_>,
1083            ) -> std::fmt::Result {
1084                formatter.write_str("struct origincloud.billing.v1beta1.BillingAddress")
1085            }
1086            fn visit_map<V>(
1087                self,
1088                mut map_: V,
1089            ) -> std::result::Result<BillingAddress, V::Error>
1090            where
1091                V: serde::de::MapAccess<'de>,
1092            {
1093                let mut street__ = None;
1094                let mut city__ = None;
1095                let mut postal_code__ = None;
1096                let mut region_code__ = None;
1097                while let Some(k) = map_.next_key()? {
1098                    match k {
1099                        GeneratedField::Street => {
1100                            if street__.is_some() {
1101                                return Err(serde::de::Error::duplicate_field("street"));
1102                            }
1103                            street__ = Some(map_.next_value()?);
1104                        }
1105                        GeneratedField::City => {
1106                            if city__.is_some() {
1107                                return Err(serde::de::Error::duplicate_field("city"));
1108                            }
1109                            city__ = Some(map_.next_value()?);
1110                        }
1111                        GeneratedField::PostalCode => {
1112                            if postal_code__.is_some() {
1113                                return Err(serde::de::Error::duplicate_field("postalCode"));
1114                            }
1115                            postal_code__ = Some(map_.next_value()?);
1116                        }
1117                        GeneratedField::RegionCode => {
1118                            if region_code__.is_some() {
1119                                return Err(serde::de::Error::duplicate_field("regionCode"));
1120                            }
1121                            region_code__ = Some(map_.next_value()?);
1122                        }
1123                        GeneratedField::__SkipField__ => {
1124                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1125                        }
1126                    }
1127                }
1128                Ok(BillingAddress {
1129                    street: street__.unwrap_or_default(),
1130                    city: city__.unwrap_or_default(),
1131                    postal_code: postal_code__.unwrap_or_default(),
1132                    region_code: region_code__.unwrap_or_default(),
1133                })
1134            }
1135        }
1136        deserializer
1137            .deserialize_struct(
1138                "origincloud.billing.v1beta1.BillingAddress",
1139                FIELDS,
1140                GeneratedVisitor,
1141            )
1142    }
1143}
1144impl serde::Serialize for BillingCountry {
1145    #[allow(deprecated)]
1146    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1147    where
1148        S: serde::Serializer,
1149    {
1150        use serde::ser::SerializeStruct;
1151        let mut len = 0;
1152        if !self.name.is_empty() {
1153            len += 1;
1154        }
1155        if !self.region_code.is_empty() {
1156            len += 1;
1157        }
1158        if !self.display_name.is_empty() {
1159            len += 1;
1160        }
1161        if self.vat_id_required {
1162            len += 1;
1163        }
1164        let mut struct_ser = serializer
1165            .serialize_struct("origincloud.billing.v1beta1.BillingCountry", len)?;
1166        if !self.name.is_empty() {
1167            struct_ser.serialize_field("name", &self.name)?;
1168        }
1169        if !self.region_code.is_empty() {
1170            struct_ser.serialize_field("regionCode", &self.region_code)?;
1171        }
1172        if !self.display_name.is_empty() {
1173            struct_ser.serialize_field("displayName", &self.display_name)?;
1174        }
1175        if self.vat_id_required {
1176            struct_ser.serialize_field("vatIdRequired", &self.vat_id_required)?;
1177        }
1178        struct_ser.end()
1179    }
1180}
1181impl<'de> serde::Deserialize<'de> for BillingCountry {
1182    #[allow(deprecated)]
1183    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1184    where
1185        D: serde::Deserializer<'de>,
1186    {
1187        const FIELDS: &[&str] = &[
1188            "name",
1189            "region_code",
1190            "regionCode",
1191            "display_name",
1192            "displayName",
1193            "vat_id_required",
1194            "vatIdRequired",
1195        ];
1196        #[allow(clippy::enum_variant_names)]
1197        enum GeneratedField {
1198            Name,
1199            RegionCode,
1200            DisplayName,
1201            VatIdRequired,
1202            __SkipField__,
1203        }
1204        impl<'de> serde::Deserialize<'de> for GeneratedField {
1205            fn deserialize<D>(
1206                deserializer: D,
1207            ) -> std::result::Result<GeneratedField, D::Error>
1208            where
1209                D: serde::Deserializer<'de>,
1210            {
1211                struct GeneratedVisitor;
1212                impl serde::de::Visitor<'_> for GeneratedVisitor {
1213                    type Value = GeneratedField;
1214                    fn expecting(
1215                        &self,
1216                        formatter: &mut std::fmt::Formatter<'_>,
1217                    ) -> std::fmt::Result {
1218                        write!(formatter, "expected one of: {:?}", & FIELDS)
1219                    }
1220                    #[allow(unused_variables)]
1221                    fn visit_str<E>(
1222                        self,
1223                        value: &str,
1224                    ) -> std::result::Result<GeneratedField, E>
1225                    where
1226                        E: serde::de::Error,
1227                    {
1228                        match value {
1229                            "name" => Ok(GeneratedField::Name),
1230                            "regionCode" | "region_code" => {
1231                                Ok(GeneratedField::RegionCode)
1232                            }
1233                            "displayName" | "display_name" => {
1234                                Ok(GeneratedField::DisplayName)
1235                            }
1236                            "vatIdRequired" | "vat_id_required" => {
1237                                Ok(GeneratedField::VatIdRequired)
1238                            }
1239                            _ => Ok(GeneratedField::__SkipField__),
1240                        }
1241                    }
1242                }
1243                deserializer.deserialize_identifier(GeneratedVisitor)
1244            }
1245        }
1246        struct GeneratedVisitor;
1247        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1248            type Value = BillingCountry;
1249            fn expecting(
1250                &self,
1251                formatter: &mut std::fmt::Formatter<'_>,
1252            ) -> std::fmt::Result {
1253                formatter.write_str("struct origincloud.billing.v1beta1.BillingCountry")
1254            }
1255            fn visit_map<V>(
1256                self,
1257                mut map_: V,
1258            ) -> std::result::Result<BillingCountry, V::Error>
1259            where
1260                V: serde::de::MapAccess<'de>,
1261            {
1262                let mut name__ = None;
1263                let mut region_code__ = None;
1264                let mut display_name__ = None;
1265                let mut vat_id_required__ = None;
1266                while let Some(k) = map_.next_key()? {
1267                    match k {
1268                        GeneratedField::Name => {
1269                            if name__.is_some() {
1270                                return Err(serde::de::Error::duplicate_field("name"));
1271                            }
1272                            name__ = Some(map_.next_value()?);
1273                        }
1274                        GeneratedField::RegionCode => {
1275                            if region_code__.is_some() {
1276                                return Err(serde::de::Error::duplicate_field("regionCode"));
1277                            }
1278                            region_code__ = Some(map_.next_value()?);
1279                        }
1280                        GeneratedField::DisplayName => {
1281                            if display_name__.is_some() {
1282                                return Err(
1283                                    serde::de::Error::duplicate_field("displayName"),
1284                                );
1285                            }
1286                            display_name__ = Some(map_.next_value()?);
1287                        }
1288                        GeneratedField::VatIdRequired => {
1289                            if vat_id_required__.is_some() {
1290                                return Err(
1291                                    serde::de::Error::duplicate_field("vatIdRequired"),
1292                                );
1293                            }
1294                            vat_id_required__ = Some(map_.next_value()?);
1295                        }
1296                        GeneratedField::__SkipField__ => {
1297                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1298                        }
1299                    }
1300                }
1301                Ok(BillingCountry {
1302                    name: name__.unwrap_or_default(),
1303                    region_code: region_code__.unwrap_or_default(),
1304                    display_name: display_name__.unwrap_or_default(),
1305                    vat_id_required: vat_id_required__.unwrap_or_default(),
1306                })
1307            }
1308        }
1309        deserializer
1310            .deserialize_struct(
1311                "origincloud.billing.v1beta1.BillingCountry",
1312                FIELDS,
1313                GeneratedVisitor,
1314            )
1315    }
1316}
1317impl serde::Serialize for ConfirmPaymentMethodSetupRequest {
1318    #[allow(deprecated)]
1319    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1320    where
1321        S: serde::Serializer,
1322    {
1323        use serde::ser::SerializeStruct;
1324        let mut len = 0;
1325        if !self.name.is_empty() {
1326            len += 1;
1327        }
1328        let mut struct_ser = serializer
1329            .serialize_struct(
1330                "origincloud.billing.v1beta1.ConfirmPaymentMethodSetupRequest",
1331                len,
1332            )?;
1333        if !self.name.is_empty() {
1334            struct_ser.serialize_field("name", &self.name)?;
1335        }
1336        struct_ser.end()
1337    }
1338}
1339impl<'de> serde::Deserialize<'de> for ConfirmPaymentMethodSetupRequest {
1340    #[allow(deprecated)]
1341    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1342    where
1343        D: serde::Deserializer<'de>,
1344    {
1345        const FIELDS: &[&str] = &["name"];
1346        #[allow(clippy::enum_variant_names)]
1347        enum GeneratedField {
1348            Name,
1349            __SkipField__,
1350        }
1351        impl<'de> serde::Deserialize<'de> for GeneratedField {
1352            fn deserialize<D>(
1353                deserializer: D,
1354            ) -> std::result::Result<GeneratedField, D::Error>
1355            where
1356                D: serde::Deserializer<'de>,
1357            {
1358                struct GeneratedVisitor;
1359                impl serde::de::Visitor<'_> for GeneratedVisitor {
1360                    type Value = GeneratedField;
1361                    fn expecting(
1362                        &self,
1363                        formatter: &mut std::fmt::Formatter<'_>,
1364                    ) -> std::fmt::Result {
1365                        write!(formatter, "expected one of: {:?}", & FIELDS)
1366                    }
1367                    #[allow(unused_variables)]
1368                    fn visit_str<E>(
1369                        self,
1370                        value: &str,
1371                    ) -> std::result::Result<GeneratedField, E>
1372                    where
1373                        E: serde::de::Error,
1374                    {
1375                        match value {
1376                            "name" => Ok(GeneratedField::Name),
1377                            _ => Ok(GeneratedField::__SkipField__),
1378                        }
1379                    }
1380                }
1381                deserializer.deserialize_identifier(GeneratedVisitor)
1382            }
1383        }
1384        struct GeneratedVisitor;
1385        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1386            type Value = ConfirmPaymentMethodSetupRequest;
1387            fn expecting(
1388                &self,
1389                formatter: &mut std::fmt::Formatter<'_>,
1390            ) -> std::fmt::Result {
1391                formatter
1392                    .write_str(
1393                        "struct origincloud.billing.v1beta1.ConfirmPaymentMethodSetupRequest",
1394                    )
1395            }
1396            fn visit_map<V>(
1397                self,
1398                mut map_: V,
1399            ) -> std::result::Result<ConfirmPaymentMethodSetupRequest, V::Error>
1400            where
1401                V: serde::de::MapAccess<'de>,
1402            {
1403                let mut name__ = None;
1404                while let Some(k) = map_.next_key()? {
1405                    match k {
1406                        GeneratedField::Name => {
1407                            if name__.is_some() {
1408                                return Err(serde::de::Error::duplicate_field("name"));
1409                            }
1410                            name__ = Some(map_.next_value()?);
1411                        }
1412                        GeneratedField::__SkipField__ => {
1413                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1414                        }
1415                    }
1416                }
1417                Ok(ConfirmPaymentMethodSetupRequest {
1418                    name: name__.unwrap_or_default(),
1419                })
1420            }
1421        }
1422        deserializer
1423            .deserialize_struct(
1424                "origincloud.billing.v1beta1.ConfirmPaymentMethodSetupRequest",
1425                FIELDS,
1426                GeneratedVisitor,
1427            )
1428    }
1429}
1430impl serde::Serialize for CostBucket {
1431    #[allow(deprecated)]
1432    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1433    where
1434        S: serde::Serializer,
1435    {
1436        use serde::ser::SerializeStruct;
1437        let mut len = 0;
1438        if self.start_time.is_some() {
1439            len += 1;
1440        }
1441        if !self.amount.is_empty() {
1442            len += 1;
1443        }
1444        let mut struct_ser = serializer
1445            .serialize_struct("origincloud.billing.v1beta1.CostBucket", len)?;
1446        if let Some(v) = self.start_time.as_ref() {
1447            struct_ser.serialize_field("startTime", v)?;
1448        }
1449        if !self.amount.is_empty() {
1450            struct_ser.serialize_field("amount", &self.amount)?;
1451        }
1452        struct_ser.end()
1453    }
1454}
1455impl<'de> serde::Deserialize<'de> for CostBucket {
1456    #[allow(deprecated)]
1457    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1458    where
1459        D: serde::Deserializer<'de>,
1460    {
1461        const FIELDS: &[&str] = &["start_time", "startTime", "amount"];
1462        #[allow(clippy::enum_variant_names)]
1463        enum GeneratedField {
1464            StartTime,
1465            Amount,
1466            __SkipField__,
1467        }
1468        impl<'de> serde::Deserialize<'de> for GeneratedField {
1469            fn deserialize<D>(
1470                deserializer: D,
1471            ) -> std::result::Result<GeneratedField, D::Error>
1472            where
1473                D: serde::Deserializer<'de>,
1474            {
1475                struct GeneratedVisitor;
1476                impl serde::de::Visitor<'_> for GeneratedVisitor {
1477                    type Value = GeneratedField;
1478                    fn expecting(
1479                        &self,
1480                        formatter: &mut std::fmt::Formatter<'_>,
1481                    ) -> std::fmt::Result {
1482                        write!(formatter, "expected one of: {:?}", & FIELDS)
1483                    }
1484                    #[allow(unused_variables)]
1485                    fn visit_str<E>(
1486                        self,
1487                        value: &str,
1488                    ) -> std::result::Result<GeneratedField, E>
1489                    where
1490                        E: serde::de::Error,
1491                    {
1492                        match value {
1493                            "startTime" | "start_time" => Ok(GeneratedField::StartTime),
1494                            "amount" => Ok(GeneratedField::Amount),
1495                            _ => Ok(GeneratedField::__SkipField__),
1496                        }
1497                    }
1498                }
1499                deserializer.deserialize_identifier(GeneratedVisitor)
1500            }
1501        }
1502        struct GeneratedVisitor;
1503        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1504            type Value = CostBucket;
1505            fn expecting(
1506                &self,
1507                formatter: &mut std::fmt::Formatter<'_>,
1508            ) -> std::fmt::Result {
1509                formatter.write_str("struct origincloud.billing.v1beta1.CostBucket")
1510            }
1511            fn visit_map<V>(
1512                self,
1513                mut map_: V,
1514            ) -> std::result::Result<CostBucket, V::Error>
1515            where
1516                V: serde::de::MapAccess<'de>,
1517            {
1518                let mut start_time__ = None;
1519                let mut amount__ = None;
1520                while let Some(k) = map_.next_key()? {
1521                    match k {
1522                        GeneratedField::StartTime => {
1523                            if start_time__.is_some() {
1524                                return Err(serde::de::Error::duplicate_field("startTime"));
1525                            }
1526                            start_time__ = map_.next_value()?;
1527                        }
1528                        GeneratedField::Amount => {
1529                            if amount__.is_some() {
1530                                return Err(serde::de::Error::duplicate_field("amount"));
1531                            }
1532                            amount__ = Some(map_.next_value()?);
1533                        }
1534                        GeneratedField::__SkipField__ => {
1535                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1536                        }
1537                    }
1538                }
1539                Ok(CostBucket {
1540                    start_time: start_time__,
1541                    amount: amount__.unwrap_or_default(),
1542                })
1543            }
1544        }
1545        deserializer
1546            .deserialize_struct(
1547                "origincloud.billing.v1beta1.CostBucket",
1548                FIELDS,
1549                GeneratedVisitor,
1550            )
1551    }
1552}
1553impl serde::Serialize for CostReport {
1554    #[allow(deprecated)]
1555    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1556    where
1557        S: serde::Serializer,
1558    {
1559        use serde::ser::SerializeStruct;
1560        let mut len = 0;
1561        if !self.total.is_empty() {
1562            len += 1;
1563        }
1564        if !self.services.is_empty() {
1565            len += 1;
1566        }
1567        let mut struct_ser = serializer
1568            .serialize_struct("origincloud.billing.v1beta1.CostReport", len)?;
1569        if !self.total.is_empty() {
1570            struct_ser.serialize_field("total", &self.total)?;
1571        }
1572        if !self.services.is_empty() {
1573            struct_ser.serialize_field("services", &self.services)?;
1574        }
1575        struct_ser.end()
1576    }
1577}
1578impl<'de> serde::Deserialize<'de> for CostReport {
1579    #[allow(deprecated)]
1580    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1581    where
1582        D: serde::Deserializer<'de>,
1583    {
1584        const FIELDS: &[&str] = &["total", "services"];
1585        #[allow(clippy::enum_variant_names)]
1586        enum GeneratedField {
1587            Total,
1588            Services,
1589            __SkipField__,
1590        }
1591        impl<'de> serde::Deserialize<'de> for GeneratedField {
1592            fn deserialize<D>(
1593                deserializer: D,
1594            ) -> std::result::Result<GeneratedField, D::Error>
1595            where
1596                D: serde::Deserializer<'de>,
1597            {
1598                struct GeneratedVisitor;
1599                impl serde::de::Visitor<'_> for GeneratedVisitor {
1600                    type Value = GeneratedField;
1601                    fn expecting(
1602                        &self,
1603                        formatter: &mut std::fmt::Formatter<'_>,
1604                    ) -> std::fmt::Result {
1605                        write!(formatter, "expected one of: {:?}", & FIELDS)
1606                    }
1607                    #[allow(unused_variables)]
1608                    fn visit_str<E>(
1609                        self,
1610                        value: &str,
1611                    ) -> std::result::Result<GeneratedField, E>
1612                    where
1613                        E: serde::de::Error,
1614                    {
1615                        match value {
1616                            "total" => Ok(GeneratedField::Total),
1617                            "services" => Ok(GeneratedField::Services),
1618                            _ => Ok(GeneratedField::__SkipField__),
1619                        }
1620                    }
1621                }
1622                deserializer.deserialize_identifier(GeneratedVisitor)
1623            }
1624        }
1625        struct GeneratedVisitor;
1626        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1627            type Value = CostReport;
1628            fn expecting(
1629                &self,
1630                formatter: &mut std::fmt::Formatter<'_>,
1631            ) -> std::fmt::Result {
1632                formatter.write_str("struct origincloud.billing.v1beta1.CostReport")
1633            }
1634            fn visit_map<V>(
1635                self,
1636                mut map_: V,
1637            ) -> std::result::Result<CostReport, V::Error>
1638            where
1639                V: serde::de::MapAccess<'de>,
1640            {
1641                let mut total__ = None;
1642                let mut services__ = None;
1643                while let Some(k) = map_.next_key()? {
1644                    match k {
1645                        GeneratedField::Total => {
1646                            if total__.is_some() {
1647                                return Err(serde::de::Error::duplicate_field("total"));
1648                            }
1649                            total__ = Some(map_.next_value()?);
1650                        }
1651                        GeneratedField::Services => {
1652                            if services__.is_some() {
1653                                return Err(serde::de::Error::duplicate_field("services"));
1654                            }
1655                            services__ = Some(map_.next_value()?);
1656                        }
1657                        GeneratedField::__SkipField__ => {
1658                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1659                        }
1660                    }
1661                }
1662                Ok(CostReport {
1663                    total: total__.unwrap_or_default(),
1664                    services: services__.unwrap_or_default(),
1665                })
1666            }
1667        }
1668        deserializer
1669            .deserialize_struct(
1670                "origincloud.billing.v1beta1.CostReport",
1671                FIELDS,
1672                GeneratedVisitor,
1673            )
1674    }
1675}
1676impl serde::Serialize for CreateBillingAccountRequest {
1677    #[allow(deprecated)]
1678    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1679    where
1680        S: serde::Serializer,
1681    {
1682        use serde::ser::SerializeStruct;
1683        let mut len = 0;
1684        if !self.parent.is_empty() {
1685            len += 1;
1686        }
1687        if self.billing_account.is_some() {
1688            len += 1;
1689        }
1690        if !self.request_id.is_empty() {
1691            len += 1;
1692        }
1693        let mut struct_ser = serializer
1694            .serialize_struct(
1695                "origincloud.billing.v1beta1.CreateBillingAccountRequest",
1696                len,
1697            )?;
1698        if !self.parent.is_empty() {
1699            struct_ser.serialize_field("parent", &self.parent)?;
1700        }
1701        if let Some(v) = self.billing_account.as_ref() {
1702            struct_ser.serialize_field("billingAccount", v)?;
1703        }
1704        if !self.request_id.is_empty() {
1705            struct_ser.serialize_field("requestId", &self.request_id)?;
1706        }
1707        struct_ser.end()
1708    }
1709}
1710impl<'de> serde::Deserialize<'de> for CreateBillingAccountRequest {
1711    #[allow(deprecated)]
1712    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1713    where
1714        D: serde::Deserializer<'de>,
1715    {
1716        const FIELDS: &[&str] = &[
1717            "parent",
1718            "billing_account",
1719            "billingAccount",
1720            "request_id",
1721            "requestId",
1722        ];
1723        #[allow(clippy::enum_variant_names)]
1724        enum GeneratedField {
1725            Parent,
1726            BillingAccount,
1727            RequestId,
1728            __SkipField__,
1729        }
1730        impl<'de> serde::Deserialize<'de> for GeneratedField {
1731            fn deserialize<D>(
1732                deserializer: D,
1733            ) -> std::result::Result<GeneratedField, D::Error>
1734            where
1735                D: serde::Deserializer<'de>,
1736            {
1737                struct GeneratedVisitor;
1738                impl serde::de::Visitor<'_> for GeneratedVisitor {
1739                    type Value = GeneratedField;
1740                    fn expecting(
1741                        &self,
1742                        formatter: &mut std::fmt::Formatter<'_>,
1743                    ) -> std::fmt::Result {
1744                        write!(formatter, "expected one of: {:?}", & FIELDS)
1745                    }
1746                    #[allow(unused_variables)]
1747                    fn visit_str<E>(
1748                        self,
1749                        value: &str,
1750                    ) -> std::result::Result<GeneratedField, E>
1751                    where
1752                        E: serde::de::Error,
1753                    {
1754                        match value {
1755                            "parent" => Ok(GeneratedField::Parent),
1756                            "billingAccount" | "billing_account" => {
1757                                Ok(GeneratedField::BillingAccount)
1758                            }
1759                            "requestId" | "request_id" => Ok(GeneratedField::RequestId),
1760                            _ => Ok(GeneratedField::__SkipField__),
1761                        }
1762                    }
1763                }
1764                deserializer.deserialize_identifier(GeneratedVisitor)
1765            }
1766        }
1767        struct GeneratedVisitor;
1768        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1769            type Value = CreateBillingAccountRequest;
1770            fn expecting(
1771                &self,
1772                formatter: &mut std::fmt::Formatter<'_>,
1773            ) -> std::fmt::Result {
1774                formatter
1775                    .write_str(
1776                        "struct origincloud.billing.v1beta1.CreateBillingAccountRequest",
1777                    )
1778            }
1779            fn visit_map<V>(
1780                self,
1781                mut map_: V,
1782            ) -> std::result::Result<CreateBillingAccountRequest, V::Error>
1783            where
1784                V: serde::de::MapAccess<'de>,
1785            {
1786                let mut parent__ = None;
1787                let mut billing_account__ = None;
1788                let mut request_id__ = None;
1789                while let Some(k) = map_.next_key()? {
1790                    match k {
1791                        GeneratedField::Parent => {
1792                            if parent__.is_some() {
1793                                return Err(serde::de::Error::duplicate_field("parent"));
1794                            }
1795                            parent__ = Some(map_.next_value()?);
1796                        }
1797                        GeneratedField::BillingAccount => {
1798                            if billing_account__.is_some() {
1799                                return Err(
1800                                    serde::de::Error::duplicate_field("billingAccount"),
1801                                );
1802                            }
1803                            billing_account__ = map_.next_value()?;
1804                        }
1805                        GeneratedField::RequestId => {
1806                            if request_id__.is_some() {
1807                                return Err(serde::de::Error::duplicate_field("requestId"));
1808                            }
1809                            request_id__ = Some(map_.next_value()?);
1810                        }
1811                        GeneratedField::__SkipField__ => {
1812                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1813                        }
1814                    }
1815                }
1816                Ok(CreateBillingAccountRequest {
1817                    parent: parent__.unwrap_or_default(),
1818                    billing_account: billing_account__,
1819                    request_id: request_id__.unwrap_or_default(),
1820                })
1821            }
1822        }
1823        deserializer
1824            .deserialize_struct(
1825                "origincloud.billing.v1beta1.CreateBillingAccountRequest",
1826                FIELDS,
1827                GeneratedVisitor,
1828            )
1829    }
1830}
1831impl serde::Serialize for DeleteBillingAccountRequest {
1832    #[allow(deprecated)]
1833    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1834    where
1835        S: serde::Serializer,
1836    {
1837        use serde::ser::SerializeStruct;
1838        let mut len = 0;
1839        if !self.name.is_empty() {
1840            len += 1;
1841        }
1842        let mut struct_ser = serializer
1843            .serialize_struct(
1844                "origincloud.billing.v1beta1.DeleteBillingAccountRequest",
1845                len,
1846            )?;
1847        if !self.name.is_empty() {
1848            struct_ser.serialize_field("name", &self.name)?;
1849        }
1850        struct_ser.end()
1851    }
1852}
1853impl<'de> serde::Deserialize<'de> for DeleteBillingAccountRequest {
1854    #[allow(deprecated)]
1855    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1856    where
1857        D: serde::Deserializer<'de>,
1858    {
1859        const FIELDS: &[&str] = &["name"];
1860        #[allow(clippy::enum_variant_names)]
1861        enum GeneratedField {
1862            Name,
1863            __SkipField__,
1864        }
1865        impl<'de> serde::Deserialize<'de> for GeneratedField {
1866            fn deserialize<D>(
1867                deserializer: D,
1868            ) -> std::result::Result<GeneratedField, D::Error>
1869            where
1870                D: serde::Deserializer<'de>,
1871            {
1872                struct GeneratedVisitor;
1873                impl serde::de::Visitor<'_> for GeneratedVisitor {
1874                    type Value = GeneratedField;
1875                    fn expecting(
1876                        &self,
1877                        formatter: &mut std::fmt::Formatter<'_>,
1878                    ) -> std::fmt::Result {
1879                        write!(formatter, "expected one of: {:?}", & FIELDS)
1880                    }
1881                    #[allow(unused_variables)]
1882                    fn visit_str<E>(
1883                        self,
1884                        value: &str,
1885                    ) -> std::result::Result<GeneratedField, E>
1886                    where
1887                        E: serde::de::Error,
1888                    {
1889                        match value {
1890                            "name" => Ok(GeneratedField::Name),
1891                            _ => Ok(GeneratedField::__SkipField__),
1892                        }
1893                    }
1894                }
1895                deserializer.deserialize_identifier(GeneratedVisitor)
1896            }
1897        }
1898        struct GeneratedVisitor;
1899        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1900            type Value = DeleteBillingAccountRequest;
1901            fn expecting(
1902                &self,
1903                formatter: &mut std::fmt::Formatter<'_>,
1904            ) -> std::fmt::Result {
1905                formatter
1906                    .write_str(
1907                        "struct origincloud.billing.v1beta1.DeleteBillingAccountRequest",
1908                    )
1909            }
1910            fn visit_map<V>(
1911                self,
1912                mut map_: V,
1913            ) -> std::result::Result<DeleteBillingAccountRequest, V::Error>
1914            where
1915                V: serde::de::MapAccess<'de>,
1916            {
1917                let mut name__ = None;
1918                while let Some(k) = map_.next_key()? {
1919                    match k {
1920                        GeneratedField::Name => {
1921                            if name__.is_some() {
1922                                return Err(serde::de::Error::duplicate_field("name"));
1923                            }
1924                            name__ = Some(map_.next_value()?);
1925                        }
1926                        GeneratedField::__SkipField__ => {
1927                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1928                        }
1929                    }
1930                }
1931                Ok(DeleteBillingAccountRequest {
1932                    name: name__.unwrap_or_default(),
1933                })
1934            }
1935        }
1936        deserializer
1937            .deserialize_struct(
1938                "origincloud.billing.v1beta1.DeleteBillingAccountRequest",
1939                FIELDS,
1940                GeneratedVisitor,
1941            )
1942    }
1943}
1944impl serde::Serialize for GetBillingAccountRequest {
1945    #[allow(deprecated)]
1946    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1947    where
1948        S: serde::Serializer,
1949    {
1950        use serde::ser::SerializeStruct;
1951        let mut len = 0;
1952        if !self.name.is_empty() {
1953            len += 1;
1954        }
1955        let mut struct_ser = serializer
1956            .serialize_struct(
1957                "origincloud.billing.v1beta1.GetBillingAccountRequest",
1958                len,
1959            )?;
1960        if !self.name.is_empty() {
1961            struct_ser.serialize_field("name", &self.name)?;
1962        }
1963        struct_ser.end()
1964    }
1965}
1966impl<'de> serde::Deserialize<'de> for GetBillingAccountRequest {
1967    #[allow(deprecated)]
1968    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1969    where
1970        D: serde::Deserializer<'de>,
1971    {
1972        const FIELDS: &[&str] = &["name"];
1973        #[allow(clippy::enum_variant_names)]
1974        enum GeneratedField {
1975            Name,
1976            __SkipField__,
1977        }
1978        impl<'de> serde::Deserialize<'de> for GeneratedField {
1979            fn deserialize<D>(
1980                deserializer: D,
1981            ) -> std::result::Result<GeneratedField, D::Error>
1982            where
1983                D: serde::Deserializer<'de>,
1984            {
1985                struct GeneratedVisitor;
1986                impl serde::de::Visitor<'_> for GeneratedVisitor {
1987                    type Value = GeneratedField;
1988                    fn expecting(
1989                        &self,
1990                        formatter: &mut std::fmt::Formatter<'_>,
1991                    ) -> std::fmt::Result {
1992                        write!(formatter, "expected one of: {:?}", & FIELDS)
1993                    }
1994                    #[allow(unused_variables)]
1995                    fn visit_str<E>(
1996                        self,
1997                        value: &str,
1998                    ) -> std::result::Result<GeneratedField, E>
1999                    where
2000                        E: serde::de::Error,
2001                    {
2002                        match value {
2003                            "name" => Ok(GeneratedField::Name),
2004                            _ => Ok(GeneratedField::__SkipField__),
2005                        }
2006                    }
2007                }
2008                deserializer.deserialize_identifier(GeneratedVisitor)
2009            }
2010        }
2011        struct GeneratedVisitor;
2012        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2013            type Value = GetBillingAccountRequest;
2014            fn expecting(
2015                &self,
2016                formatter: &mut std::fmt::Formatter<'_>,
2017            ) -> std::fmt::Result {
2018                formatter
2019                    .write_str(
2020                        "struct origincloud.billing.v1beta1.GetBillingAccountRequest",
2021                    )
2022            }
2023            fn visit_map<V>(
2024                self,
2025                mut map_: V,
2026            ) -> std::result::Result<GetBillingAccountRequest, V::Error>
2027            where
2028                V: serde::de::MapAccess<'de>,
2029            {
2030                let mut name__ = None;
2031                while let Some(k) = map_.next_key()? {
2032                    match k {
2033                        GeneratedField::Name => {
2034                            if name__.is_some() {
2035                                return Err(serde::de::Error::duplicate_field("name"));
2036                            }
2037                            name__ = Some(map_.next_value()?);
2038                        }
2039                        GeneratedField::__SkipField__ => {
2040                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2041                        }
2042                    }
2043                }
2044                Ok(GetBillingAccountRequest {
2045                    name: name__.unwrap_or_default(),
2046                })
2047            }
2048        }
2049        deserializer
2050            .deserialize_struct(
2051                "origincloud.billing.v1beta1.GetBillingAccountRequest",
2052                FIELDS,
2053                GeneratedVisitor,
2054            )
2055    }
2056}
2057impl serde::Serialize for GetBillingCountryRequest {
2058    #[allow(deprecated)]
2059    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2060    where
2061        S: serde::Serializer,
2062    {
2063        use serde::ser::SerializeStruct;
2064        let mut len = 0;
2065        if !self.name.is_empty() {
2066            len += 1;
2067        }
2068        let mut struct_ser = serializer
2069            .serialize_struct(
2070                "origincloud.billing.v1beta1.GetBillingCountryRequest",
2071                len,
2072            )?;
2073        if !self.name.is_empty() {
2074            struct_ser.serialize_field("name", &self.name)?;
2075        }
2076        struct_ser.end()
2077    }
2078}
2079impl<'de> serde::Deserialize<'de> for GetBillingCountryRequest {
2080    #[allow(deprecated)]
2081    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2082    where
2083        D: serde::Deserializer<'de>,
2084    {
2085        const FIELDS: &[&str] = &["name"];
2086        #[allow(clippy::enum_variant_names)]
2087        enum GeneratedField {
2088            Name,
2089            __SkipField__,
2090        }
2091        impl<'de> serde::Deserialize<'de> for GeneratedField {
2092            fn deserialize<D>(
2093                deserializer: D,
2094            ) -> std::result::Result<GeneratedField, D::Error>
2095            where
2096                D: serde::Deserializer<'de>,
2097            {
2098                struct GeneratedVisitor;
2099                impl serde::de::Visitor<'_> for GeneratedVisitor {
2100                    type Value = GeneratedField;
2101                    fn expecting(
2102                        &self,
2103                        formatter: &mut std::fmt::Formatter<'_>,
2104                    ) -> std::fmt::Result {
2105                        write!(formatter, "expected one of: {:?}", & FIELDS)
2106                    }
2107                    #[allow(unused_variables)]
2108                    fn visit_str<E>(
2109                        self,
2110                        value: &str,
2111                    ) -> std::result::Result<GeneratedField, E>
2112                    where
2113                        E: serde::de::Error,
2114                    {
2115                        match value {
2116                            "name" => Ok(GeneratedField::Name),
2117                            _ => Ok(GeneratedField::__SkipField__),
2118                        }
2119                    }
2120                }
2121                deserializer.deserialize_identifier(GeneratedVisitor)
2122            }
2123        }
2124        struct GeneratedVisitor;
2125        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2126            type Value = GetBillingCountryRequest;
2127            fn expecting(
2128                &self,
2129                formatter: &mut std::fmt::Formatter<'_>,
2130            ) -> std::fmt::Result {
2131                formatter
2132                    .write_str(
2133                        "struct origincloud.billing.v1beta1.GetBillingCountryRequest",
2134                    )
2135            }
2136            fn visit_map<V>(
2137                self,
2138                mut map_: V,
2139            ) -> std::result::Result<GetBillingCountryRequest, V::Error>
2140            where
2141                V: serde::de::MapAccess<'de>,
2142            {
2143                let mut name__ = None;
2144                while let Some(k) = map_.next_key()? {
2145                    match k {
2146                        GeneratedField::Name => {
2147                            if name__.is_some() {
2148                                return Err(serde::de::Error::duplicate_field("name"));
2149                            }
2150                            name__ = Some(map_.next_value()?);
2151                        }
2152                        GeneratedField::__SkipField__ => {
2153                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2154                        }
2155                    }
2156                }
2157                Ok(GetBillingCountryRequest {
2158                    name: name__.unwrap_or_default(),
2159                })
2160            }
2161        }
2162        deserializer
2163            .deserialize_struct(
2164                "origincloud.billing.v1beta1.GetBillingCountryRequest",
2165                FIELDS,
2166                GeneratedVisitor,
2167            )
2168    }
2169}
2170impl serde::Serialize for GetPriceListRequest {
2171    #[allow(deprecated)]
2172    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2173    where
2174        S: serde::Serializer,
2175    {
2176        use serde::ser::SerializeStruct;
2177        let len = 0;
2178        let struct_ser = serializer
2179            .serialize_struct("origincloud.billing.v1beta1.GetPriceListRequest", len)?;
2180        struct_ser.end()
2181    }
2182}
2183impl<'de> serde::Deserialize<'de> for GetPriceListRequest {
2184    #[allow(deprecated)]
2185    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2186    where
2187        D: serde::Deserializer<'de>,
2188    {
2189        const FIELDS: &[&str] = &[];
2190        #[allow(clippy::enum_variant_names)]
2191        enum GeneratedField {
2192            __SkipField__,
2193        }
2194        impl<'de> serde::Deserialize<'de> for GeneratedField {
2195            fn deserialize<D>(
2196                deserializer: D,
2197            ) -> std::result::Result<GeneratedField, D::Error>
2198            where
2199                D: serde::Deserializer<'de>,
2200            {
2201                struct GeneratedVisitor;
2202                impl serde::de::Visitor<'_> for GeneratedVisitor {
2203                    type Value = GeneratedField;
2204                    fn expecting(
2205                        &self,
2206                        formatter: &mut std::fmt::Formatter<'_>,
2207                    ) -> std::fmt::Result {
2208                        write!(formatter, "expected one of: {:?}", & FIELDS)
2209                    }
2210                    #[allow(unused_variables)]
2211                    fn visit_str<E>(
2212                        self,
2213                        value: &str,
2214                    ) -> std::result::Result<GeneratedField, E>
2215                    where
2216                        E: serde::de::Error,
2217                    {
2218                        Ok(GeneratedField::__SkipField__)
2219                    }
2220                }
2221                deserializer.deserialize_identifier(GeneratedVisitor)
2222            }
2223        }
2224        struct GeneratedVisitor;
2225        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2226            type Value = GetPriceListRequest;
2227            fn expecting(
2228                &self,
2229                formatter: &mut std::fmt::Formatter<'_>,
2230            ) -> std::fmt::Result {
2231                formatter
2232                    .write_str("struct origincloud.billing.v1beta1.GetPriceListRequest")
2233            }
2234            fn visit_map<V>(
2235                self,
2236                mut map_: V,
2237            ) -> std::result::Result<GetPriceListRequest, V::Error>
2238            where
2239                V: serde::de::MapAccess<'de>,
2240            {
2241                while map_.next_key::<GeneratedField>()?.is_some() {
2242                    let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2243                }
2244                Ok(GetPriceListRequest {})
2245            }
2246        }
2247        deserializer
2248            .deserialize_struct(
2249                "origincloud.billing.v1beta1.GetPriceListRequest",
2250                FIELDS,
2251                GeneratedVisitor,
2252            )
2253    }
2254}
2255impl serde::Serialize for GetProjectBillingInfoRequest {
2256    #[allow(deprecated)]
2257    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2258    where
2259        S: serde::Serializer,
2260    {
2261        use serde::ser::SerializeStruct;
2262        let mut len = 0;
2263        if !self.name.is_empty() {
2264            len += 1;
2265        }
2266        let mut struct_ser = serializer
2267            .serialize_struct(
2268                "origincloud.billing.v1beta1.GetProjectBillingInfoRequest",
2269                len,
2270            )?;
2271        if !self.name.is_empty() {
2272            struct_ser.serialize_field("name", &self.name)?;
2273        }
2274        struct_ser.end()
2275    }
2276}
2277impl<'de> serde::Deserialize<'de> for GetProjectBillingInfoRequest {
2278    #[allow(deprecated)]
2279    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2280    where
2281        D: serde::Deserializer<'de>,
2282    {
2283        const FIELDS: &[&str] = &["name"];
2284        #[allow(clippy::enum_variant_names)]
2285        enum GeneratedField {
2286            Name,
2287            __SkipField__,
2288        }
2289        impl<'de> serde::Deserialize<'de> for GeneratedField {
2290            fn deserialize<D>(
2291                deserializer: D,
2292            ) -> std::result::Result<GeneratedField, D::Error>
2293            where
2294                D: serde::Deserializer<'de>,
2295            {
2296                struct GeneratedVisitor;
2297                impl serde::de::Visitor<'_> for GeneratedVisitor {
2298                    type Value = GeneratedField;
2299                    fn expecting(
2300                        &self,
2301                        formatter: &mut std::fmt::Formatter<'_>,
2302                    ) -> std::fmt::Result {
2303                        write!(formatter, "expected one of: {:?}", & FIELDS)
2304                    }
2305                    #[allow(unused_variables)]
2306                    fn visit_str<E>(
2307                        self,
2308                        value: &str,
2309                    ) -> std::result::Result<GeneratedField, E>
2310                    where
2311                        E: serde::de::Error,
2312                    {
2313                        match value {
2314                            "name" => Ok(GeneratedField::Name),
2315                            _ => Ok(GeneratedField::__SkipField__),
2316                        }
2317                    }
2318                }
2319                deserializer.deserialize_identifier(GeneratedVisitor)
2320            }
2321        }
2322        struct GeneratedVisitor;
2323        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2324            type Value = GetProjectBillingInfoRequest;
2325            fn expecting(
2326                &self,
2327                formatter: &mut std::fmt::Formatter<'_>,
2328            ) -> std::fmt::Result {
2329                formatter
2330                    .write_str(
2331                        "struct origincloud.billing.v1beta1.GetProjectBillingInfoRequest",
2332                    )
2333            }
2334            fn visit_map<V>(
2335                self,
2336                mut map_: V,
2337            ) -> std::result::Result<GetProjectBillingInfoRequest, V::Error>
2338            where
2339                V: serde::de::MapAccess<'de>,
2340            {
2341                let mut name__ = None;
2342                while let Some(k) = map_.next_key()? {
2343                    match k {
2344                        GeneratedField::Name => {
2345                            if name__.is_some() {
2346                                return Err(serde::de::Error::duplicate_field("name"));
2347                            }
2348                            name__ = Some(map_.next_value()?);
2349                        }
2350                        GeneratedField::__SkipField__ => {
2351                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2352                        }
2353                    }
2354                }
2355                Ok(GetProjectBillingInfoRequest {
2356                    name: name__.unwrap_or_default(),
2357                })
2358            }
2359        }
2360        deserializer
2361            .deserialize_struct(
2362                "origincloud.billing.v1beta1.GetProjectBillingInfoRequest",
2363                FIELDS,
2364                GeneratedVisitor,
2365            )
2366    }
2367}
2368impl serde::Serialize for GetSpendLimitRequest {
2369    #[allow(deprecated)]
2370    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2371    where
2372        S: serde::Serializer,
2373    {
2374        use serde::ser::SerializeStruct;
2375        let mut len = 0;
2376        if !self.name.is_empty() {
2377            len += 1;
2378        }
2379        let mut struct_ser = serializer
2380            .serialize_struct("origincloud.billing.v1beta1.GetSpendLimitRequest", len)?;
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 GetSpendLimitRequest {
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 = GetSpendLimitRequest;
2435            fn expecting(
2436                &self,
2437                formatter: &mut std::fmt::Formatter<'_>,
2438            ) -> std::fmt::Result {
2439                formatter
2440                    .write_str("struct origincloud.billing.v1beta1.GetSpendLimitRequest")
2441            }
2442            fn visit_map<V>(
2443                self,
2444                mut map_: V,
2445            ) -> std::result::Result<GetSpendLimitRequest, V::Error>
2446            where
2447                V: serde::de::MapAccess<'de>,
2448            {
2449                let mut name__ = None;
2450                while let Some(k) = map_.next_key()? {
2451                    match k {
2452                        GeneratedField::Name => {
2453                            if name__.is_some() {
2454                                return Err(serde::de::Error::duplicate_field("name"));
2455                            }
2456                            name__ = Some(map_.next_value()?);
2457                        }
2458                        GeneratedField::__SkipField__ => {
2459                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2460                        }
2461                    }
2462                }
2463                Ok(GetSpendLimitRequest {
2464                    name: name__.unwrap_or_default(),
2465                })
2466            }
2467        }
2468        deserializer
2469            .deserialize_struct(
2470                "origincloud.billing.v1beta1.GetSpendLimitRequest",
2471                FIELDS,
2472                GeneratedVisitor,
2473            )
2474    }
2475}
2476impl serde::Serialize for Granularity {
2477    #[allow(deprecated)]
2478    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2479    where
2480        S: serde::Serializer,
2481    {
2482        let variant = match self {
2483            Self::Unspecified => "GRANULARITY_UNSPECIFIED",
2484            Self::Hourly => "HOURLY",
2485            Self::Daily => "DAILY",
2486        };
2487        serializer.serialize_str(variant)
2488    }
2489}
2490impl<'de> serde::Deserialize<'de> for Granularity {
2491    #[allow(deprecated)]
2492    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2493    where
2494        D: serde::Deserializer<'de>,
2495    {
2496        const FIELDS: &[&str] = &["GRANULARITY_UNSPECIFIED", "HOURLY", "DAILY"];
2497        struct GeneratedVisitor;
2498        impl serde::de::Visitor<'_> for GeneratedVisitor {
2499            type Value = Granularity;
2500            fn expecting(
2501                &self,
2502                formatter: &mut std::fmt::Formatter<'_>,
2503            ) -> std::fmt::Result {
2504                write!(formatter, "expected one of: {:?}", & FIELDS)
2505            }
2506            fn visit_i64<E>(self, v: i64) -> std::result::Result<Self::Value, E>
2507            where
2508                E: serde::de::Error,
2509            {
2510                i32::try_from(v)
2511                    .ok()
2512                    .and_then(|x| {
2513                        x.try_into().ok().or_else(|| Some(Granularity::default()))
2514                    })
2515                    .ok_or_else(|| {
2516                        serde::de::Error::invalid_value(
2517                            serde::de::Unexpected::Signed(v),
2518                            &self,
2519                        )
2520                    })
2521            }
2522            fn visit_u64<E>(self, v: u64) -> std::result::Result<Self::Value, E>
2523            where
2524                E: serde::de::Error,
2525            {
2526                i32::try_from(v)
2527                    .ok()
2528                    .and_then(|x| {
2529                        x.try_into().ok().or_else(|| Some(Granularity::default()))
2530                    })
2531                    .ok_or_else(|| {
2532                        serde::de::Error::invalid_value(
2533                            serde::de::Unexpected::Unsigned(v),
2534                            &self,
2535                        )
2536                    })
2537            }
2538            fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
2539            where
2540                E: serde::de::Error,
2541            {
2542                match value {
2543                    "GRANULARITY_UNSPECIFIED" => Ok(Granularity::Unspecified),
2544                    "HOURLY" => Ok(Granularity::Hourly),
2545                    "DAILY" => Ok(Granularity::Daily),
2546                    _ => Ok(Granularity::default()),
2547                }
2548            }
2549        }
2550        deserializer.deserialize_any(GeneratedVisitor)
2551    }
2552}
2553impl serde::Serialize for ListBillingAccountsRequest {
2554    #[allow(deprecated)]
2555    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2556    where
2557        S: serde::Serializer,
2558    {
2559        use serde::ser::SerializeStruct;
2560        let mut len = 0;
2561        if !self.parent.is_empty() {
2562            len += 1;
2563        }
2564        if self.page_size != 0 {
2565            len += 1;
2566        }
2567        if !self.page_token.is_empty() {
2568            len += 1;
2569        }
2570        let mut struct_ser = serializer
2571            .serialize_struct(
2572                "origincloud.billing.v1beta1.ListBillingAccountsRequest",
2573                len,
2574            )?;
2575        if !self.parent.is_empty() {
2576            struct_ser.serialize_field("parent", &self.parent)?;
2577        }
2578        if self.page_size != 0 {
2579            struct_ser.serialize_field("pageSize", &self.page_size)?;
2580        }
2581        if !self.page_token.is_empty() {
2582            struct_ser.serialize_field("pageToken", &self.page_token)?;
2583        }
2584        struct_ser.end()
2585    }
2586}
2587impl<'de> serde::Deserialize<'de> for ListBillingAccountsRequest {
2588    #[allow(deprecated)]
2589    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2590    where
2591        D: serde::Deserializer<'de>,
2592    {
2593        const FIELDS: &[&str] = &[
2594            "parent",
2595            "page_size",
2596            "pageSize",
2597            "page_token",
2598            "pageToken",
2599        ];
2600        #[allow(clippy::enum_variant_names)]
2601        enum GeneratedField {
2602            Parent,
2603            PageSize,
2604            PageToken,
2605            __SkipField__,
2606        }
2607        impl<'de> serde::Deserialize<'de> for GeneratedField {
2608            fn deserialize<D>(
2609                deserializer: D,
2610            ) -> std::result::Result<GeneratedField, D::Error>
2611            where
2612                D: serde::Deserializer<'de>,
2613            {
2614                struct GeneratedVisitor;
2615                impl serde::de::Visitor<'_> for GeneratedVisitor {
2616                    type Value = GeneratedField;
2617                    fn expecting(
2618                        &self,
2619                        formatter: &mut std::fmt::Formatter<'_>,
2620                    ) -> std::fmt::Result {
2621                        write!(formatter, "expected one of: {:?}", & FIELDS)
2622                    }
2623                    #[allow(unused_variables)]
2624                    fn visit_str<E>(
2625                        self,
2626                        value: &str,
2627                    ) -> std::result::Result<GeneratedField, E>
2628                    where
2629                        E: serde::de::Error,
2630                    {
2631                        match value {
2632                            "parent" => Ok(GeneratedField::Parent),
2633                            "pageSize" | "page_size" => Ok(GeneratedField::PageSize),
2634                            "pageToken" | "page_token" => Ok(GeneratedField::PageToken),
2635                            _ => Ok(GeneratedField::__SkipField__),
2636                        }
2637                    }
2638                }
2639                deserializer.deserialize_identifier(GeneratedVisitor)
2640            }
2641        }
2642        struct GeneratedVisitor;
2643        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2644            type Value = ListBillingAccountsRequest;
2645            fn expecting(
2646                &self,
2647                formatter: &mut std::fmt::Formatter<'_>,
2648            ) -> std::fmt::Result {
2649                formatter
2650                    .write_str(
2651                        "struct origincloud.billing.v1beta1.ListBillingAccountsRequest",
2652                    )
2653            }
2654            fn visit_map<V>(
2655                self,
2656                mut map_: V,
2657            ) -> std::result::Result<ListBillingAccountsRequest, V::Error>
2658            where
2659                V: serde::de::MapAccess<'de>,
2660            {
2661                let mut parent__ = None;
2662                let mut page_size__ = None;
2663                let mut page_token__ = None;
2664                while let Some(k) = map_.next_key()? {
2665                    match k {
2666                        GeneratedField::Parent => {
2667                            if parent__.is_some() {
2668                                return Err(serde::de::Error::duplicate_field("parent"));
2669                            }
2670                            parent__ = Some(map_.next_value()?);
2671                        }
2672                        GeneratedField::PageSize => {
2673                            if page_size__.is_some() {
2674                                return Err(serde::de::Error::duplicate_field("pageSize"));
2675                            }
2676                            page_size__ = Some(
2677                                map_
2678                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
2679                                    .0,
2680                            );
2681                        }
2682                        GeneratedField::PageToken => {
2683                            if page_token__.is_some() {
2684                                return Err(serde::de::Error::duplicate_field("pageToken"));
2685                            }
2686                            page_token__ = Some(map_.next_value()?);
2687                        }
2688                        GeneratedField::__SkipField__ => {
2689                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2690                        }
2691                    }
2692                }
2693                Ok(ListBillingAccountsRequest {
2694                    parent: parent__.unwrap_or_default(),
2695                    page_size: page_size__.unwrap_or_default(),
2696                    page_token: page_token__.unwrap_or_default(),
2697                })
2698            }
2699        }
2700        deserializer
2701            .deserialize_struct(
2702                "origincloud.billing.v1beta1.ListBillingAccountsRequest",
2703                FIELDS,
2704                GeneratedVisitor,
2705            )
2706    }
2707}
2708impl serde::Serialize for ListBillingAccountsResponse {
2709    #[allow(deprecated)]
2710    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2711    where
2712        S: serde::Serializer,
2713    {
2714        use serde::ser::SerializeStruct;
2715        let mut len = 0;
2716        if !self.billing_accounts.is_empty() {
2717            len += 1;
2718        }
2719        if !self.next_page_token.is_empty() {
2720            len += 1;
2721        }
2722        let mut struct_ser = serializer
2723            .serialize_struct(
2724                "origincloud.billing.v1beta1.ListBillingAccountsResponse",
2725                len,
2726            )?;
2727        if !self.billing_accounts.is_empty() {
2728            struct_ser.serialize_field("billingAccounts", &self.billing_accounts)?;
2729        }
2730        if !self.next_page_token.is_empty() {
2731            struct_ser.serialize_field("nextPageToken", &self.next_page_token)?;
2732        }
2733        struct_ser.end()
2734    }
2735}
2736impl<'de> serde::Deserialize<'de> for ListBillingAccountsResponse {
2737    #[allow(deprecated)]
2738    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2739    where
2740        D: serde::Deserializer<'de>,
2741    {
2742        const FIELDS: &[&str] = &[
2743            "billing_accounts",
2744            "billingAccounts",
2745            "next_page_token",
2746            "nextPageToken",
2747        ];
2748        #[allow(clippy::enum_variant_names)]
2749        enum GeneratedField {
2750            BillingAccounts,
2751            NextPageToken,
2752            __SkipField__,
2753        }
2754        impl<'de> serde::Deserialize<'de> for GeneratedField {
2755            fn deserialize<D>(
2756                deserializer: D,
2757            ) -> std::result::Result<GeneratedField, D::Error>
2758            where
2759                D: serde::Deserializer<'de>,
2760            {
2761                struct GeneratedVisitor;
2762                impl serde::de::Visitor<'_> for GeneratedVisitor {
2763                    type Value = GeneratedField;
2764                    fn expecting(
2765                        &self,
2766                        formatter: &mut std::fmt::Formatter<'_>,
2767                    ) -> std::fmt::Result {
2768                        write!(formatter, "expected one of: {:?}", & FIELDS)
2769                    }
2770                    #[allow(unused_variables)]
2771                    fn visit_str<E>(
2772                        self,
2773                        value: &str,
2774                    ) -> std::result::Result<GeneratedField, E>
2775                    where
2776                        E: serde::de::Error,
2777                    {
2778                        match value {
2779                            "billingAccounts" | "billing_accounts" => {
2780                                Ok(GeneratedField::BillingAccounts)
2781                            }
2782                            "nextPageToken" | "next_page_token" => {
2783                                Ok(GeneratedField::NextPageToken)
2784                            }
2785                            _ => Ok(GeneratedField::__SkipField__),
2786                        }
2787                    }
2788                }
2789                deserializer.deserialize_identifier(GeneratedVisitor)
2790            }
2791        }
2792        struct GeneratedVisitor;
2793        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2794            type Value = ListBillingAccountsResponse;
2795            fn expecting(
2796                &self,
2797                formatter: &mut std::fmt::Formatter<'_>,
2798            ) -> std::fmt::Result {
2799                formatter
2800                    .write_str(
2801                        "struct origincloud.billing.v1beta1.ListBillingAccountsResponse",
2802                    )
2803            }
2804            fn visit_map<V>(
2805                self,
2806                mut map_: V,
2807            ) -> std::result::Result<ListBillingAccountsResponse, V::Error>
2808            where
2809                V: serde::de::MapAccess<'de>,
2810            {
2811                let mut billing_accounts__ = None;
2812                let mut next_page_token__ = None;
2813                while let Some(k) = map_.next_key()? {
2814                    match k {
2815                        GeneratedField::BillingAccounts => {
2816                            if billing_accounts__.is_some() {
2817                                return Err(
2818                                    serde::de::Error::duplicate_field("billingAccounts"),
2819                                );
2820                            }
2821                            billing_accounts__ = Some(map_.next_value()?);
2822                        }
2823                        GeneratedField::NextPageToken => {
2824                            if next_page_token__.is_some() {
2825                                return Err(
2826                                    serde::de::Error::duplicate_field("nextPageToken"),
2827                                );
2828                            }
2829                            next_page_token__ = Some(map_.next_value()?);
2830                        }
2831                        GeneratedField::__SkipField__ => {
2832                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2833                        }
2834                    }
2835                }
2836                Ok(ListBillingAccountsResponse {
2837                    billing_accounts: billing_accounts__.unwrap_or_default(),
2838                    next_page_token: next_page_token__.unwrap_or_default(),
2839                })
2840            }
2841        }
2842        deserializer
2843            .deserialize_struct(
2844                "origincloud.billing.v1beta1.ListBillingAccountsResponse",
2845                FIELDS,
2846                GeneratedVisitor,
2847            )
2848    }
2849}
2850impl serde::Serialize for ListBillingCountriesRequest {
2851    #[allow(deprecated)]
2852    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2853    where
2854        S: serde::Serializer,
2855    {
2856        use serde::ser::SerializeStruct;
2857        let mut len = 0;
2858        if self.page_size != 0 {
2859            len += 1;
2860        }
2861        if !self.page_token.is_empty() {
2862            len += 1;
2863        }
2864        let mut struct_ser = serializer
2865            .serialize_struct(
2866                "origincloud.billing.v1beta1.ListBillingCountriesRequest",
2867                len,
2868            )?;
2869        if self.page_size != 0 {
2870            struct_ser.serialize_field("pageSize", &self.page_size)?;
2871        }
2872        if !self.page_token.is_empty() {
2873            struct_ser.serialize_field("pageToken", &self.page_token)?;
2874        }
2875        struct_ser.end()
2876    }
2877}
2878impl<'de> serde::Deserialize<'de> for ListBillingCountriesRequest {
2879    #[allow(deprecated)]
2880    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
2881    where
2882        D: serde::Deserializer<'de>,
2883    {
2884        const FIELDS: &[&str] = &["page_size", "pageSize", "page_token", "pageToken"];
2885        #[allow(clippy::enum_variant_names)]
2886        enum GeneratedField {
2887            PageSize,
2888            PageToken,
2889            __SkipField__,
2890        }
2891        impl<'de> serde::Deserialize<'de> for GeneratedField {
2892            fn deserialize<D>(
2893                deserializer: D,
2894            ) -> std::result::Result<GeneratedField, D::Error>
2895            where
2896                D: serde::Deserializer<'de>,
2897            {
2898                struct GeneratedVisitor;
2899                impl serde::de::Visitor<'_> for GeneratedVisitor {
2900                    type Value = GeneratedField;
2901                    fn expecting(
2902                        &self,
2903                        formatter: &mut std::fmt::Formatter<'_>,
2904                    ) -> std::fmt::Result {
2905                        write!(formatter, "expected one of: {:?}", & FIELDS)
2906                    }
2907                    #[allow(unused_variables)]
2908                    fn visit_str<E>(
2909                        self,
2910                        value: &str,
2911                    ) -> std::result::Result<GeneratedField, E>
2912                    where
2913                        E: serde::de::Error,
2914                    {
2915                        match value {
2916                            "pageSize" | "page_size" => Ok(GeneratedField::PageSize),
2917                            "pageToken" | "page_token" => Ok(GeneratedField::PageToken),
2918                            _ => Ok(GeneratedField::__SkipField__),
2919                        }
2920                    }
2921                }
2922                deserializer.deserialize_identifier(GeneratedVisitor)
2923            }
2924        }
2925        struct GeneratedVisitor;
2926        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2927            type Value = ListBillingCountriesRequest;
2928            fn expecting(
2929                &self,
2930                formatter: &mut std::fmt::Formatter<'_>,
2931            ) -> std::fmt::Result {
2932                formatter
2933                    .write_str(
2934                        "struct origincloud.billing.v1beta1.ListBillingCountriesRequest",
2935                    )
2936            }
2937            fn visit_map<V>(
2938                self,
2939                mut map_: V,
2940            ) -> std::result::Result<ListBillingCountriesRequest, V::Error>
2941            where
2942                V: serde::de::MapAccess<'de>,
2943            {
2944                let mut page_size__ = None;
2945                let mut page_token__ = None;
2946                while let Some(k) = map_.next_key()? {
2947                    match k {
2948                        GeneratedField::PageSize => {
2949                            if page_size__.is_some() {
2950                                return Err(serde::de::Error::duplicate_field("pageSize"));
2951                            }
2952                            page_size__ = Some(
2953                                map_
2954                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
2955                                    .0,
2956                            );
2957                        }
2958                        GeneratedField::PageToken => {
2959                            if page_token__.is_some() {
2960                                return Err(serde::de::Error::duplicate_field("pageToken"));
2961                            }
2962                            page_token__ = Some(map_.next_value()?);
2963                        }
2964                        GeneratedField::__SkipField__ => {
2965                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2966                        }
2967                    }
2968                }
2969                Ok(ListBillingCountriesRequest {
2970                    page_size: page_size__.unwrap_or_default(),
2971                    page_token: page_token__.unwrap_or_default(),
2972                })
2973            }
2974        }
2975        deserializer
2976            .deserialize_struct(
2977                "origincloud.billing.v1beta1.ListBillingCountriesRequest",
2978                FIELDS,
2979                GeneratedVisitor,
2980            )
2981    }
2982}
2983impl serde::Serialize for ListBillingCountriesResponse {
2984    #[allow(deprecated)]
2985    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
2986    where
2987        S: serde::Serializer,
2988    {
2989        use serde::ser::SerializeStruct;
2990        let mut len = 0;
2991        if !self.billing_countries.is_empty() {
2992            len += 1;
2993        }
2994        if !self.next_page_token.is_empty() {
2995            len += 1;
2996        }
2997        let mut struct_ser = serializer
2998            .serialize_struct(
2999                "origincloud.billing.v1beta1.ListBillingCountriesResponse",
3000                len,
3001            )?;
3002        if !self.billing_countries.is_empty() {
3003            struct_ser.serialize_field("billingCountries", &self.billing_countries)?;
3004        }
3005        if !self.next_page_token.is_empty() {
3006            struct_ser.serialize_field("nextPageToken", &self.next_page_token)?;
3007        }
3008        struct_ser.end()
3009    }
3010}
3011impl<'de> serde::Deserialize<'de> for ListBillingCountriesResponse {
3012    #[allow(deprecated)]
3013    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3014    where
3015        D: serde::Deserializer<'de>,
3016    {
3017        const FIELDS: &[&str] = &[
3018            "billing_countries",
3019            "billingCountries",
3020            "next_page_token",
3021            "nextPageToken",
3022        ];
3023        #[allow(clippy::enum_variant_names)]
3024        enum GeneratedField {
3025            BillingCountries,
3026            NextPageToken,
3027            __SkipField__,
3028        }
3029        impl<'de> serde::Deserialize<'de> for GeneratedField {
3030            fn deserialize<D>(
3031                deserializer: D,
3032            ) -> std::result::Result<GeneratedField, D::Error>
3033            where
3034                D: serde::Deserializer<'de>,
3035            {
3036                struct GeneratedVisitor;
3037                impl serde::de::Visitor<'_> for GeneratedVisitor {
3038                    type Value = GeneratedField;
3039                    fn expecting(
3040                        &self,
3041                        formatter: &mut std::fmt::Formatter<'_>,
3042                    ) -> std::fmt::Result {
3043                        write!(formatter, "expected one of: {:?}", & FIELDS)
3044                    }
3045                    #[allow(unused_variables)]
3046                    fn visit_str<E>(
3047                        self,
3048                        value: &str,
3049                    ) -> std::result::Result<GeneratedField, E>
3050                    where
3051                        E: serde::de::Error,
3052                    {
3053                        match value {
3054                            "billingCountries" | "billing_countries" => {
3055                                Ok(GeneratedField::BillingCountries)
3056                            }
3057                            "nextPageToken" | "next_page_token" => {
3058                                Ok(GeneratedField::NextPageToken)
3059                            }
3060                            _ => Ok(GeneratedField::__SkipField__),
3061                        }
3062                    }
3063                }
3064                deserializer.deserialize_identifier(GeneratedVisitor)
3065            }
3066        }
3067        struct GeneratedVisitor;
3068        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3069            type Value = ListBillingCountriesResponse;
3070            fn expecting(
3071                &self,
3072                formatter: &mut std::fmt::Formatter<'_>,
3073            ) -> std::fmt::Result {
3074                formatter
3075                    .write_str(
3076                        "struct origincloud.billing.v1beta1.ListBillingCountriesResponse",
3077                    )
3078            }
3079            fn visit_map<V>(
3080                self,
3081                mut map_: V,
3082            ) -> std::result::Result<ListBillingCountriesResponse, V::Error>
3083            where
3084                V: serde::de::MapAccess<'de>,
3085            {
3086                let mut billing_countries__ = None;
3087                let mut next_page_token__ = None;
3088                while let Some(k) = map_.next_key()? {
3089                    match k {
3090                        GeneratedField::BillingCountries => {
3091                            if billing_countries__.is_some() {
3092                                return Err(
3093                                    serde::de::Error::duplicate_field("billingCountries"),
3094                                );
3095                            }
3096                            billing_countries__ = Some(map_.next_value()?);
3097                        }
3098                        GeneratedField::NextPageToken => {
3099                            if next_page_token__.is_some() {
3100                                return Err(
3101                                    serde::de::Error::duplicate_field("nextPageToken"),
3102                                );
3103                            }
3104                            next_page_token__ = Some(map_.next_value()?);
3105                        }
3106                        GeneratedField::__SkipField__ => {
3107                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
3108                        }
3109                    }
3110                }
3111                Ok(ListBillingCountriesResponse {
3112                    billing_countries: billing_countries__.unwrap_or_default(),
3113                    next_page_token: next_page_token__.unwrap_or_default(),
3114                })
3115            }
3116        }
3117        deserializer
3118            .deserialize_struct(
3119                "origincloud.billing.v1beta1.ListBillingCountriesResponse",
3120                FIELDS,
3121                GeneratedVisitor,
3122            )
3123    }
3124}
3125impl serde::Serialize for ListProjectBillingInfoRequest {
3126    #[allow(deprecated)]
3127    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3128    where
3129        S: serde::Serializer,
3130    {
3131        use serde::ser::SerializeStruct;
3132        let mut len = 0;
3133        if !self.name.is_empty() {
3134            len += 1;
3135        }
3136        if self.page_size != 0 {
3137            len += 1;
3138        }
3139        if !self.page_token.is_empty() {
3140            len += 1;
3141        }
3142        let mut struct_ser = serializer
3143            .serialize_struct(
3144                "origincloud.billing.v1beta1.ListProjectBillingInfoRequest",
3145                len,
3146            )?;
3147        if !self.name.is_empty() {
3148            struct_ser.serialize_field("name", &self.name)?;
3149        }
3150        if self.page_size != 0 {
3151            struct_ser.serialize_field("pageSize", &self.page_size)?;
3152        }
3153        if !self.page_token.is_empty() {
3154            struct_ser.serialize_field("pageToken", &self.page_token)?;
3155        }
3156        struct_ser.end()
3157    }
3158}
3159impl<'de> serde::Deserialize<'de> for ListProjectBillingInfoRequest {
3160    #[allow(deprecated)]
3161    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3162    where
3163        D: serde::Deserializer<'de>,
3164    {
3165        const FIELDS: &[&str] = &[
3166            "name",
3167            "page_size",
3168            "pageSize",
3169            "page_token",
3170            "pageToken",
3171        ];
3172        #[allow(clippy::enum_variant_names)]
3173        enum GeneratedField {
3174            Name,
3175            PageSize,
3176            PageToken,
3177            __SkipField__,
3178        }
3179        impl<'de> serde::Deserialize<'de> for GeneratedField {
3180            fn deserialize<D>(
3181                deserializer: D,
3182            ) -> std::result::Result<GeneratedField, D::Error>
3183            where
3184                D: serde::Deserializer<'de>,
3185            {
3186                struct GeneratedVisitor;
3187                impl serde::de::Visitor<'_> for GeneratedVisitor {
3188                    type Value = GeneratedField;
3189                    fn expecting(
3190                        &self,
3191                        formatter: &mut std::fmt::Formatter<'_>,
3192                    ) -> std::fmt::Result {
3193                        write!(formatter, "expected one of: {:?}", & FIELDS)
3194                    }
3195                    #[allow(unused_variables)]
3196                    fn visit_str<E>(
3197                        self,
3198                        value: &str,
3199                    ) -> std::result::Result<GeneratedField, E>
3200                    where
3201                        E: serde::de::Error,
3202                    {
3203                        match value {
3204                            "name" => Ok(GeneratedField::Name),
3205                            "pageSize" | "page_size" => Ok(GeneratedField::PageSize),
3206                            "pageToken" | "page_token" => Ok(GeneratedField::PageToken),
3207                            _ => Ok(GeneratedField::__SkipField__),
3208                        }
3209                    }
3210                }
3211                deserializer.deserialize_identifier(GeneratedVisitor)
3212            }
3213        }
3214        struct GeneratedVisitor;
3215        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3216            type Value = ListProjectBillingInfoRequest;
3217            fn expecting(
3218                &self,
3219                formatter: &mut std::fmt::Formatter<'_>,
3220            ) -> std::fmt::Result {
3221                formatter
3222                    .write_str(
3223                        "struct origincloud.billing.v1beta1.ListProjectBillingInfoRequest",
3224                    )
3225            }
3226            fn visit_map<V>(
3227                self,
3228                mut map_: V,
3229            ) -> std::result::Result<ListProjectBillingInfoRequest, V::Error>
3230            where
3231                V: serde::de::MapAccess<'de>,
3232            {
3233                let mut name__ = None;
3234                let mut page_size__ = None;
3235                let mut page_token__ = None;
3236                while let Some(k) = map_.next_key()? {
3237                    match k {
3238                        GeneratedField::Name => {
3239                            if name__.is_some() {
3240                                return Err(serde::de::Error::duplicate_field("name"));
3241                            }
3242                            name__ = Some(map_.next_value()?);
3243                        }
3244                        GeneratedField::PageSize => {
3245                            if page_size__.is_some() {
3246                                return Err(serde::de::Error::duplicate_field("pageSize"));
3247                            }
3248                            page_size__ = Some(
3249                                map_
3250                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
3251                                    .0,
3252                            );
3253                        }
3254                        GeneratedField::PageToken => {
3255                            if page_token__.is_some() {
3256                                return Err(serde::de::Error::duplicate_field("pageToken"));
3257                            }
3258                            page_token__ = Some(map_.next_value()?);
3259                        }
3260                        GeneratedField::__SkipField__ => {
3261                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
3262                        }
3263                    }
3264                }
3265                Ok(ListProjectBillingInfoRequest {
3266                    name: name__.unwrap_or_default(),
3267                    page_size: page_size__.unwrap_or_default(),
3268                    page_token: page_token__.unwrap_or_default(),
3269                })
3270            }
3271        }
3272        deserializer
3273            .deserialize_struct(
3274                "origincloud.billing.v1beta1.ListProjectBillingInfoRequest",
3275                FIELDS,
3276                GeneratedVisitor,
3277            )
3278    }
3279}
3280impl serde::Serialize for ListProjectBillingInfoResponse {
3281    #[allow(deprecated)]
3282    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3283    where
3284        S: serde::Serializer,
3285    {
3286        use serde::ser::SerializeStruct;
3287        let mut len = 0;
3288        if !self.project_billing_infos.is_empty() {
3289            len += 1;
3290        }
3291        if !self.next_page_token.is_empty() {
3292            len += 1;
3293        }
3294        let mut struct_ser = serializer
3295            .serialize_struct(
3296                "origincloud.billing.v1beta1.ListProjectBillingInfoResponse",
3297                len,
3298            )?;
3299        if !self.project_billing_infos.is_empty() {
3300            struct_ser
3301                .serialize_field("projectBillingInfos", &self.project_billing_infos)?;
3302        }
3303        if !self.next_page_token.is_empty() {
3304            struct_ser.serialize_field("nextPageToken", &self.next_page_token)?;
3305        }
3306        struct_ser.end()
3307    }
3308}
3309impl<'de> serde::Deserialize<'de> for ListProjectBillingInfoResponse {
3310    #[allow(deprecated)]
3311    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3312    where
3313        D: serde::Deserializer<'de>,
3314    {
3315        const FIELDS: &[&str] = &[
3316            "project_billing_infos",
3317            "projectBillingInfos",
3318            "next_page_token",
3319            "nextPageToken",
3320        ];
3321        #[allow(clippy::enum_variant_names)]
3322        enum GeneratedField {
3323            ProjectBillingInfos,
3324            NextPageToken,
3325            __SkipField__,
3326        }
3327        impl<'de> serde::Deserialize<'de> for GeneratedField {
3328            fn deserialize<D>(
3329                deserializer: D,
3330            ) -> std::result::Result<GeneratedField, D::Error>
3331            where
3332                D: serde::Deserializer<'de>,
3333            {
3334                struct GeneratedVisitor;
3335                impl serde::de::Visitor<'_> for GeneratedVisitor {
3336                    type Value = GeneratedField;
3337                    fn expecting(
3338                        &self,
3339                        formatter: &mut std::fmt::Formatter<'_>,
3340                    ) -> std::fmt::Result {
3341                        write!(formatter, "expected one of: {:?}", & FIELDS)
3342                    }
3343                    #[allow(unused_variables)]
3344                    fn visit_str<E>(
3345                        self,
3346                        value: &str,
3347                    ) -> std::result::Result<GeneratedField, E>
3348                    where
3349                        E: serde::de::Error,
3350                    {
3351                        match value {
3352                            "projectBillingInfos" | "project_billing_infos" => {
3353                                Ok(GeneratedField::ProjectBillingInfos)
3354                            }
3355                            "nextPageToken" | "next_page_token" => {
3356                                Ok(GeneratedField::NextPageToken)
3357                            }
3358                            _ => Ok(GeneratedField::__SkipField__),
3359                        }
3360                    }
3361                }
3362                deserializer.deserialize_identifier(GeneratedVisitor)
3363            }
3364        }
3365        struct GeneratedVisitor;
3366        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3367            type Value = ListProjectBillingInfoResponse;
3368            fn expecting(
3369                &self,
3370                formatter: &mut std::fmt::Formatter<'_>,
3371            ) -> std::fmt::Result {
3372                formatter
3373                    .write_str(
3374                        "struct origincloud.billing.v1beta1.ListProjectBillingInfoResponse",
3375                    )
3376            }
3377            fn visit_map<V>(
3378                self,
3379                mut map_: V,
3380            ) -> std::result::Result<ListProjectBillingInfoResponse, V::Error>
3381            where
3382                V: serde::de::MapAccess<'de>,
3383            {
3384                let mut project_billing_infos__ = None;
3385                let mut next_page_token__ = None;
3386                while let Some(k) = map_.next_key()? {
3387                    match k {
3388                        GeneratedField::ProjectBillingInfos => {
3389                            if project_billing_infos__.is_some() {
3390                                return Err(
3391                                    serde::de::Error::duplicate_field("projectBillingInfos"),
3392                                );
3393                            }
3394                            project_billing_infos__ = Some(map_.next_value()?);
3395                        }
3396                        GeneratedField::NextPageToken => {
3397                            if next_page_token__.is_some() {
3398                                return Err(
3399                                    serde::de::Error::duplicate_field("nextPageToken"),
3400                                );
3401                            }
3402                            next_page_token__ = Some(map_.next_value()?);
3403                        }
3404                        GeneratedField::__SkipField__ => {
3405                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
3406                        }
3407                    }
3408                }
3409                Ok(ListProjectBillingInfoResponse {
3410                    project_billing_infos: project_billing_infos__.unwrap_or_default(),
3411                    next_page_token: next_page_token__.unwrap_or_default(),
3412                })
3413            }
3414        }
3415        deserializer
3416            .deserialize_struct(
3417                "origincloud.billing.v1beta1.ListProjectBillingInfoResponse",
3418                FIELDS,
3419                GeneratedVisitor,
3420            )
3421    }
3422}
3423impl serde::Serialize for OrganizationCostReport {
3424    #[allow(deprecated)]
3425    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3426    where
3427        S: serde::Serializer,
3428    {
3429        use serde::ser::SerializeStruct;
3430        let mut len = 0;
3431        if !self.total.is_empty() {
3432            len += 1;
3433        }
3434        if !self.services.is_empty() {
3435            len += 1;
3436        }
3437        if !self.projects.is_empty() {
3438            len += 1;
3439        }
3440        let mut struct_ser = serializer
3441            .serialize_struct(
3442                "origincloud.billing.v1beta1.OrganizationCostReport",
3443                len,
3444            )?;
3445        if !self.total.is_empty() {
3446            struct_ser.serialize_field("total", &self.total)?;
3447        }
3448        if !self.services.is_empty() {
3449            struct_ser.serialize_field("services", &self.services)?;
3450        }
3451        if !self.projects.is_empty() {
3452            struct_ser.serialize_field("projects", &self.projects)?;
3453        }
3454        struct_ser.end()
3455    }
3456}
3457impl<'de> serde::Deserialize<'de> for OrganizationCostReport {
3458    #[allow(deprecated)]
3459    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3460    where
3461        D: serde::Deserializer<'de>,
3462    {
3463        const FIELDS: &[&str] = &["total", "services", "projects"];
3464        #[allow(clippy::enum_variant_names)]
3465        enum GeneratedField {
3466            Total,
3467            Services,
3468            Projects,
3469            __SkipField__,
3470        }
3471        impl<'de> serde::Deserialize<'de> for GeneratedField {
3472            fn deserialize<D>(
3473                deserializer: D,
3474            ) -> std::result::Result<GeneratedField, D::Error>
3475            where
3476                D: serde::Deserializer<'de>,
3477            {
3478                struct GeneratedVisitor;
3479                impl serde::de::Visitor<'_> for GeneratedVisitor {
3480                    type Value = GeneratedField;
3481                    fn expecting(
3482                        &self,
3483                        formatter: &mut std::fmt::Formatter<'_>,
3484                    ) -> std::fmt::Result {
3485                        write!(formatter, "expected one of: {:?}", & FIELDS)
3486                    }
3487                    #[allow(unused_variables)]
3488                    fn visit_str<E>(
3489                        self,
3490                        value: &str,
3491                    ) -> std::result::Result<GeneratedField, E>
3492                    where
3493                        E: serde::de::Error,
3494                    {
3495                        match value {
3496                            "total" => Ok(GeneratedField::Total),
3497                            "services" => Ok(GeneratedField::Services),
3498                            "projects" => Ok(GeneratedField::Projects),
3499                            _ => Ok(GeneratedField::__SkipField__),
3500                        }
3501                    }
3502                }
3503                deserializer.deserialize_identifier(GeneratedVisitor)
3504            }
3505        }
3506        struct GeneratedVisitor;
3507        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3508            type Value = OrganizationCostReport;
3509            fn expecting(
3510                &self,
3511                formatter: &mut std::fmt::Formatter<'_>,
3512            ) -> std::fmt::Result {
3513                formatter
3514                    .write_str(
3515                        "struct origincloud.billing.v1beta1.OrganizationCostReport",
3516                    )
3517            }
3518            fn visit_map<V>(
3519                self,
3520                mut map_: V,
3521            ) -> std::result::Result<OrganizationCostReport, V::Error>
3522            where
3523                V: serde::de::MapAccess<'de>,
3524            {
3525                let mut total__ = None;
3526                let mut services__ = None;
3527                let mut projects__ = None;
3528                while let Some(k) = map_.next_key()? {
3529                    match k {
3530                        GeneratedField::Total => {
3531                            if total__.is_some() {
3532                                return Err(serde::de::Error::duplicate_field("total"));
3533                            }
3534                            total__ = Some(map_.next_value()?);
3535                        }
3536                        GeneratedField::Services => {
3537                            if services__.is_some() {
3538                                return Err(serde::de::Error::duplicate_field("services"));
3539                            }
3540                            services__ = Some(map_.next_value()?);
3541                        }
3542                        GeneratedField::Projects => {
3543                            if projects__.is_some() {
3544                                return Err(serde::de::Error::duplicate_field("projects"));
3545                            }
3546                            projects__ = Some(map_.next_value()?);
3547                        }
3548                        GeneratedField::__SkipField__ => {
3549                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
3550                        }
3551                    }
3552                }
3553                Ok(OrganizationCostReport {
3554                    total: total__.unwrap_or_default(),
3555                    services: services__.unwrap_or_default(),
3556                    projects: projects__.unwrap_or_default(),
3557                })
3558            }
3559        }
3560        deserializer
3561            .deserialize_struct(
3562                "origincloud.billing.v1beta1.OrganizationCostReport",
3563                FIELDS,
3564                GeneratedVisitor,
3565            )
3566    }
3567}
3568impl serde::Serialize for PaymentMethod {
3569    #[allow(deprecated)]
3570    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3571    where
3572        S: serde::Serializer,
3573    {
3574        use serde::ser::SerializeStruct;
3575        let mut len = 0;
3576        if self.state != 0 {
3577            len += 1;
3578        }
3579        if !self.card_brand.is_empty() {
3580            len += 1;
3581        }
3582        if !self.card_last4.is_empty() {
3583            len += 1;
3584        }
3585        let mut struct_ser = serializer
3586            .serialize_struct("origincloud.billing.v1beta1.PaymentMethod", len)?;
3587        if self.state != 0 {
3588            let v = payment_method::State::try_from(self.state)
3589                .map_err(|_| serde::ser::Error::custom(
3590                    format!("Invalid variant {}", self.state),
3591                ))?;
3592            struct_ser.serialize_field("state", &v)?;
3593        }
3594        if !self.card_brand.is_empty() {
3595            struct_ser.serialize_field("cardBrand", &self.card_brand)?;
3596        }
3597        if !self.card_last4.is_empty() {
3598            struct_ser.serialize_field("cardLast4", &self.card_last4)?;
3599        }
3600        struct_ser.end()
3601    }
3602}
3603impl<'de> serde::Deserialize<'de> for PaymentMethod {
3604    #[allow(deprecated)]
3605    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3606    where
3607        D: serde::Deserializer<'de>,
3608    {
3609        const FIELDS: &[&str] = &[
3610            "state",
3611            "card_brand",
3612            "cardBrand",
3613            "card_last4",
3614            "cardLast4",
3615        ];
3616        #[allow(clippy::enum_variant_names)]
3617        enum GeneratedField {
3618            State,
3619            CardBrand,
3620            CardLast4,
3621            __SkipField__,
3622        }
3623        impl<'de> serde::Deserialize<'de> for GeneratedField {
3624            fn deserialize<D>(
3625                deserializer: D,
3626            ) -> std::result::Result<GeneratedField, D::Error>
3627            where
3628                D: serde::Deserializer<'de>,
3629            {
3630                struct GeneratedVisitor;
3631                impl serde::de::Visitor<'_> for GeneratedVisitor {
3632                    type Value = GeneratedField;
3633                    fn expecting(
3634                        &self,
3635                        formatter: &mut std::fmt::Formatter<'_>,
3636                    ) -> std::fmt::Result {
3637                        write!(formatter, "expected one of: {:?}", & FIELDS)
3638                    }
3639                    #[allow(unused_variables)]
3640                    fn visit_str<E>(
3641                        self,
3642                        value: &str,
3643                    ) -> std::result::Result<GeneratedField, E>
3644                    where
3645                        E: serde::de::Error,
3646                    {
3647                        match value {
3648                            "state" => Ok(GeneratedField::State),
3649                            "cardBrand" | "card_brand" => Ok(GeneratedField::CardBrand),
3650                            "cardLast4" | "card_last4" => Ok(GeneratedField::CardLast4),
3651                            _ => Ok(GeneratedField::__SkipField__),
3652                        }
3653                    }
3654                }
3655                deserializer.deserialize_identifier(GeneratedVisitor)
3656            }
3657        }
3658        struct GeneratedVisitor;
3659        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3660            type Value = PaymentMethod;
3661            fn expecting(
3662                &self,
3663                formatter: &mut std::fmt::Formatter<'_>,
3664            ) -> std::fmt::Result {
3665                formatter.write_str("struct origincloud.billing.v1beta1.PaymentMethod")
3666            }
3667            fn visit_map<V>(
3668                self,
3669                mut map_: V,
3670            ) -> std::result::Result<PaymentMethod, V::Error>
3671            where
3672                V: serde::de::MapAccess<'de>,
3673            {
3674                let mut state__ = None;
3675                let mut card_brand__ = None;
3676                let mut card_last4__ = None;
3677                while let Some(k) = map_.next_key()? {
3678                    match k {
3679                        GeneratedField::State => {
3680                            if state__.is_some() {
3681                                return Err(serde::de::Error::duplicate_field("state"));
3682                            }
3683                            state__ = Some(
3684                                map_.next_value::<payment_method::State>()? as i32,
3685                            );
3686                        }
3687                        GeneratedField::CardBrand => {
3688                            if card_brand__.is_some() {
3689                                return Err(serde::de::Error::duplicate_field("cardBrand"));
3690                            }
3691                            card_brand__ = Some(map_.next_value()?);
3692                        }
3693                        GeneratedField::CardLast4 => {
3694                            if card_last4__.is_some() {
3695                                return Err(serde::de::Error::duplicate_field("cardLast4"));
3696                            }
3697                            card_last4__ = Some(map_.next_value()?);
3698                        }
3699                        GeneratedField::__SkipField__ => {
3700                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
3701                        }
3702                    }
3703                }
3704                Ok(PaymentMethod {
3705                    state: state__.unwrap_or_default(),
3706                    card_brand: card_brand__.unwrap_or_default(),
3707                    card_last4: card_last4__.unwrap_or_default(),
3708                })
3709            }
3710        }
3711        deserializer
3712            .deserialize_struct(
3713                "origincloud.billing.v1beta1.PaymentMethod",
3714                FIELDS,
3715                GeneratedVisitor,
3716            )
3717    }
3718}
3719impl serde::Serialize for payment_method::State {
3720    #[allow(deprecated)]
3721    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3722    where
3723        S: serde::Serializer,
3724    {
3725        let variant = match self {
3726            Self::Unspecified => "STATE_UNSPECIFIED",
3727            Self::Missing => "MISSING",
3728            Self::Verified => "VERIFIED",
3729            Self::NotRequired => "NOT_REQUIRED",
3730        };
3731        serializer.serialize_str(variant)
3732    }
3733}
3734impl<'de> serde::Deserialize<'de> for payment_method::State {
3735    #[allow(deprecated)]
3736    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3737    where
3738        D: serde::Deserializer<'de>,
3739    {
3740        const FIELDS: &[&str] = &[
3741            "STATE_UNSPECIFIED",
3742            "MISSING",
3743            "VERIFIED",
3744            "NOT_REQUIRED",
3745        ];
3746        struct GeneratedVisitor;
3747        impl serde::de::Visitor<'_> for GeneratedVisitor {
3748            type Value = payment_method::State;
3749            fn expecting(
3750                &self,
3751                formatter: &mut std::fmt::Formatter<'_>,
3752            ) -> std::fmt::Result {
3753                write!(formatter, "expected one of: {:?}", & FIELDS)
3754            }
3755            fn visit_i64<E>(self, v: i64) -> std::result::Result<Self::Value, E>
3756            where
3757                E: serde::de::Error,
3758            {
3759                i32::try_from(v)
3760                    .ok()
3761                    .and_then(|x| {
3762                        x
3763                            .try_into()
3764                            .ok()
3765                            .or_else(|| Some(payment_method::State::default()))
3766                    })
3767                    .ok_or_else(|| {
3768                        serde::de::Error::invalid_value(
3769                            serde::de::Unexpected::Signed(v),
3770                            &self,
3771                        )
3772                    })
3773            }
3774            fn visit_u64<E>(self, v: u64) -> std::result::Result<Self::Value, E>
3775            where
3776                E: serde::de::Error,
3777            {
3778                i32::try_from(v)
3779                    .ok()
3780                    .and_then(|x| {
3781                        x
3782                            .try_into()
3783                            .ok()
3784                            .or_else(|| Some(payment_method::State::default()))
3785                    })
3786                    .ok_or_else(|| {
3787                        serde::de::Error::invalid_value(
3788                            serde::de::Unexpected::Unsigned(v),
3789                            &self,
3790                        )
3791                    })
3792            }
3793            fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
3794            where
3795                E: serde::de::Error,
3796            {
3797                match value {
3798                    "STATE_UNSPECIFIED" => Ok(payment_method::State::Unspecified),
3799                    "MISSING" => Ok(payment_method::State::Missing),
3800                    "VERIFIED" => Ok(payment_method::State::Verified),
3801                    "NOT_REQUIRED" => Ok(payment_method::State::NotRequired),
3802                    _ => Ok(payment_method::State::default()),
3803                }
3804            }
3805        }
3806        deserializer.deserialize_any(GeneratedVisitor)
3807    }
3808}
3809impl serde::Serialize for Price {
3810    #[allow(deprecated)]
3811    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
3812    where
3813        S: serde::Serializer,
3814    {
3815        use serde::ser::SerializeStruct;
3816        let mut len = 0;
3817        if !self.product_key.is_empty() {
3818            len += 1;
3819        }
3820        if !self.dimensions.is_empty() {
3821            len += 1;
3822        }
3823        if !self.unit_type.is_empty() {
3824            len += 1;
3825        }
3826        if self.unit_count != 0 {
3827            len += 1;
3828        }
3829        if !self.amount.is_empty() {
3830            len += 1;
3831        }
3832        if self.valid_from.is_some() {
3833            len += 1;
3834        }
3835        if self.valid_until.is_some() {
3836            len += 1;
3837        }
3838        let mut struct_ser = serializer
3839            .serialize_struct("origincloud.billing.v1beta1.Price", len)?;
3840        if !self.product_key.is_empty() {
3841            struct_ser.serialize_field("product_key", &self.product_key)?;
3842        }
3843        if !self.dimensions.is_empty() {
3844            struct_ser.serialize_field("dimensions", &self.dimensions)?;
3845        }
3846        if !self.unit_type.is_empty() {
3847            struct_ser.serialize_field("unit_type", &self.unit_type)?;
3848        }
3849        if self.unit_count != 0 {
3850            struct_ser.serialize_field("unit_count", &self.unit_count)?;
3851        }
3852        if !self.amount.is_empty() {
3853            struct_ser.serialize_field("amount", &self.amount)?;
3854        }
3855        if let Some(v) = self.valid_from.as_ref() {
3856            struct_ser.serialize_field("valid_from", v)?;
3857        }
3858        if let Some(v) = self.valid_until.as_ref() {
3859            struct_ser.serialize_field("valid_until", v)?;
3860        }
3861        struct_ser.end()
3862    }
3863}
3864impl<'de> serde::Deserialize<'de> for Price {
3865    #[allow(deprecated)]
3866    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
3867    where
3868        D: serde::Deserializer<'de>,
3869    {
3870        const FIELDS: &[&str] = &[
3871            "product_key",
3872            "dimensions",
3873            "unit_type",
3874            "unit_count",
3875            "amount",
3876            "valid_from",
3877            "valid_until",
3878        ];
3879        #[allow(clippy::enum_variant_names)]
3880        enum GeneratedField {
3881            ProductKey,
3882            Dimensions,
3883            UnitType,
3884            UnitCount,
3885            Amount,
3886            ValidFrom,
3887            ValidUntil,
3888            __SkipField__,
3889        }
3890        impl<'de> serde::Deserialize<'de> for GeneratedField {
3891            fn deserialize<D>(
3892                deserializer: D,
3893            ) -> std::result::Result<GeneratedField, D::Error>
3894            where
3895                D: serde::Deserializer<'de>,
3896            {
3897                struct GeneratedVisitor;
3898                impl serde::de::Visitor<'_> for GeneratedVisitor {
3899                    type Value = GeneratedField;
3900                    fn expecting(
3901                        &self,
3902                        formatter: &mut std::fmt::Formatter<'_>,
3903                    ) -> std::fmt::Result {
3904                        write!(formatter, "expected one of: {:?}", & FIELDS)
3905                    }
3906                    #[allow(unused_variables)]
3907                    fn visit_str<E>(
3908                        self,
3909                        value: &str,
3910                    ) -> std::result::Result<GeneratedField, E>
3911                    where
3912                        E: serde::de::Error,
3913                    {
3914                        match value {
3915                            "product_key" => Ok(GeneratedField::ProductKey),
3916                            "dimensions" => Ok(GeneratedField::Dimensions),
3917                            "unit_type" => Ok(GeneratedField::UnitType),
3918                            "unit_count" => Ok(GeneratedField::UnitCount),
3919                            "amount" => Ok(GeneratedField::Amount),
3920                            "valid_from" => Ok(GeneratedField::ValidFrom),
3921                            "valid_until" => Ok(GeneratedField::ValidUntil),
3922                            _ => Ok(GeneratedField::__SkipField__),
3923                        }
3924                    }
3925                }
3926                deserializer.deserialize_identifier(GeneratedVisitor)
3927            }
3928        }
3929        struct GeneratedVisitor;
3930        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
3931            type Value = Price;
3932            fn expecting(
3933                &self,
3934                formatter: &mut std::fmt::Formatter<'_>,
3935            ) -> std::fmt::Result {
3936                formatter.write_str("struct origincloud.billing.v1beta1.Price")
3937            }
3938            fn visit_map<V>(self, mut map_: V) -> std::result::Result<Price, V::Error>
3939            where
3940                V: serde::de::MapAccess<'de>,
3941            {
3942                let mut product_key__ = None;
3943                let mut dimensions__ = None;
3944                let mut unit_type__ = None;
3945                let mut unit_count__ = None;
3946                let mut amount__ = None;
3947                let mut valid_from__ = None;
3948                let mut valid_until__ = None;
3949                while let Some(k) = map_.next_key()? {
3950                    match k {
3951                        GeneratedField::ProductKey => {
3952                            if product_key__.is_some() {
3953                                return Err(
3954                                    serde::de::Error::duplicate_field("product_key"),
3955                                );
3956                            }
3957                            product_key__ = Some(map_.next_value()?);
3958                        }
3959                        GeneratedField::Dimensions => {
3960                            if dimensions__.is_some() {
3961                                return Err(serde::de::Error::duplicate_field("dimensions"));
3962                            }
3963                            dimensions__ = Some(
3964                                map_.next_value::<std::collections::BTreeMap<_, _>>()?,
3965                            );
3966                        }
3967                        GeneratedField::UnitType => {
3968                            if unit_type__.is_some() {
3969                                return Err(serde::de::Error::duplicate_field("unit_type"));
3970                            }
3971                            unit_type__ = Some(map_.next_value()?);
3972                        }
3973                        GeneratedField::UnitCount => {
3974                            if unit_count__.is_some() {
3975                                return Err(serde::de::Error::duplicate_field("unit_count"));
3976                            }
3977                            unit_count__ = Some(
3978                                map_
3979                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
3980                                    .0,
3981                            );
3982                        }
3983                        GeneratedField::Amount => {
3984                            if amount__.is_some() {
3985                                return Err(serde::de::Error::duplicate_field("amount"));
3986                            }
3987                            amount__ = Some(map_.next_value()?);
3988                        }
3989                        GeneratedField::ValidFrom => {
3990                            if valid_from__.is_some() {
3991                                return Err(serde::de::Error::duplicate_field("valid_from"));
3992                            }
3993                            valid_from__ = map_.next_value()?;
3994                        }
3995                        GeneratedField::ValidUntil => {
3996                            if valid_until__.is_some() {
3997                                return Err(
3998                                    serde::de::Error::duplicate_field("valid_until"),
3999                                );
4000                            }
4001                            valid_until__ = map_.next_value()?;
4002                        }
4003                        GeneratedField::__SkipField__ => {
4004                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
4005                        }
4006                    }
4007                }
4008                Ok(Price {
4009                    product_key: product_key__.unwrap_or_default(),
4010                    dimensions: dimensions__.unwrap_or_default(),
4011                    unit_type: unit_type__.unwrap_or_default(),
4012                    unit_count: unit_count__.unwrap_or_default(),
4013                    amount: amount__.unwrap_or_default(),
4014                    valid_from: valid_from__,
4015                    valid_until: valid_until__,
4016                })
4017            }
4018        }
4019        deserializer
4020            .deserialize_struct(
4021                "origincloud.billing.v1beta1.Price",
4022                FIELDS,
4023                GeneratedVisitor,
4024            )
4025    }
4026}
4027impl serde::Serialize for PriceFamily {
4028    #[allow(deprecated)]
4029    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4030    where
4031        S: serde::Serializer,
4032    {
4033        use serde::ser::SerializeStruct;
4034        let mut len = 0;
4035        if !self.family.is_empty() {
4036            len += 1;
4037        }
4038        if !self.prices.is_empty() {
4039            len += 1;
4040        }
4041        let mut struct_ser = serializer
4042            .serialize_struct("origincloud.billing.v1beta1.PriceFamily", len)?;
4043        if !self.family.is_empty() {
4044            struct_ser.serialize_field("family", &self.family)?;
4045        }
4046        if !self.prices.is_empty() {
4047            struct_ser.serialize_field("prices", &self.prices)?;
4048        }
4049        struct_ser.end()
4050    }
4051}
4052impl<'de> serde::Deserialize<'de> for PriceFamily {
4053    #[allow(deprecated)]
4054    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4055    where
4056        D: serde::Deserializer<'de>,
4057    {
4058        const FIELDS: &[&str] = &["family", "prices"];
4059        #[allow(clippy::enum_variant_names)]
4060        enum GeneratedField {
4061            Family,
4062            Prices,
4063            __SkipField__,
4064        }
4065        impl<'de> serde::Deserialize<'de> for GeneratedField {
4066            fn deserialize<D>(
4067                deserializer: D,
4068            ) -> std::result::Result<GeneratedField, D::Error>
4069            where
4070                D: serde::Deserializer<'de>,
4071            {
4072                struct GeneratedVisitor;
4073                impl serde::de::Visitor<'_> for GeneratedVisitor {
4074                    type Value = GeneratedField;
4075                    fn expecting(
4076                        &self,
4077                        formatter: &mut std::fmt::Formatter<'_>,
4078                    ) -> std::fmt::Result {
4079                        write!(formatter, "expected one of: {:?}", & FIELDS)
4080                    }
4081                    #[allow(unused_variables)]
4082                    fn visit_str<E>(
4083                        self,
4084                        value: &str,
4085                    ) -> std::result::Result<GeneratedField, E>
4086                    where
4087                        E: serde::de::Error,
4088                    {
4089                        match value {
4090                            "family" => Ok(GeneratedField::Family),
4091                            "prices" => Ok(GeneratedField::Prices),
4092                            _ => Ok(GeneratedField::__SkipField__),
4093                        }
4094                    }
4095                }
4096                deserializer.deserialize_identifier(GeneratedVisitor)
4097            }
4098        }
4099        struct GeneratedVisitor;
4100        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
4101            type Value = PriceFamily;
4102            fn expecting(
4103                &self,
4104                formatter: &mut std::fmt::Formatter<'_>,
4105            ) -> std::fmt::Result {
4106                formatter.write_str("struct origincloud.billing.v1beta1.PriceFamily")
4107            }
4108            fn visit_map<V>(
4109                self,
4110                mut map_: V,
4111            ) -> std::result::Result<PriceFamily, V::Error>
4112            where
4113                V: serde::de::MapAccess<'de>,
4114            {
4115                let mut family__ = None;
4116                let mut prices__ = None;
4117                while let Some(k) = map_.next_key()? {
4118                    match k {
4119                        GeneratedField::Family => {
4120                            if family__.is_some() {
4121                                return Err(serde::de::Error::duplicate_field("family"));
4122                            }
4123                            family__ = Some(map_.next_value()?);
4124                        }
4125                        GeneratedField::Prices => {
4126                            if prices__.is_some() {
4127                                return Err(serde::de::Error::duplicate_field("prices"));
4128                            }
4129                            prices__ = Some(map_.next_value()?);
4130                        }
4131                        GeneratedField::__SkipField__ => {
4132                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
4133                        }
4134                    }
4135                }
4136                Ok(PriceFamily {
4137                    family: family__.unwrap_or_default(),
4138                    prices: prices__.unwrap_or_default(),
4139                })
4140            }
4141        }
4142        deserializer
4143            .deserialize_struct(
4144                "origincloud.billing.v1beta1.PriceFamily",
4145                FIELDS,
4146                GeneratedVisitor,
4147            )
4148    }
4149}
4150impl serde::Serialize for PriceList {
4151    #[allow(deprecated)]
4152    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4153    where
4154        S: serde::Serializer,
4155    {
4156        use serde::ser::SerializeStruct;
4157        let mut len = 0;
4158        if !self.currency.is_empty() {
4159            len += 1;
4160        }
4161        if self.amounts_exclude_vat {
4162            len += 1;
4163        }
4164        if self.last_changed.is_some() {
4165            len += 1;
4166        }
4167        if !self.families.is_empty() {
4168            len += 1;
4169        }
4170        let mut struct_ser = serializer
4171            .serialize_struct("origincloud.billing.v1beta1.PriceList", len)?;
4172        if !self.currency.is_empty() {
4173            struct_ser.serialize_field("currency", &self.currency)?;
4174        }
4175        if self.amounts_exclude_vat {
4176            struct_ser
4177                .serialize_field("amounts_exclude_vat", &self.amounts_exclude_vat)?;
4178        }
4179        if let Some(v) = self.last_changed.as_ref() {
4180            struct_ser.serialize_field("last_changed", v)?;
4181        }
4182        if !self.families.is_empty() {
4183            struct_ser.serialize_field("families", &self.families)?;
4184        }
4185        struct_ser.end()
4186    }
4187}
4188impl<'de> serde::Deserialize<'de> for PriceList {
4189    #[allow(deprecated)]
4190    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4191    where
4192        D: serde::Deserializer<'de>,
4193    {
4194        const FIELDS: &[&str] = &[
4195            "currency",
4196            "amounts_exclude_vat",
4197            "last_changed",
4198            "families",
4199        ];
4200        #[allow(clippy::enum_variant_names)]
4201        enum GeneratedField {
4202            Currency,
4203            AmountsExcludeVat,
4204            LastChanged,
4205            Families,
4206            __SkipField__,
4207        }
4208        impl<'de> serde::Deserialize<'de> for GeneratedField {
4209            fn deserialize<D>(
4210                deserializer: D,
4211            ) -> std::result::Result<GeneratedField, D::Error>
4212            where
4213                D: serde::Deserializer<'de>,
4214            {
4215                struct GeneratedVisitor;
4216                impl serde::de::Visitor<'_> for GeneratedVisitor {
4217                    type Value = GeneratedField;
4218                    fn expecting(
4219                        &self,
4220                        formatter: &mut std::fmt::Formatter<'_>,
4221                    ) -> std::fmt::Result {
4222                        write!(formatter, "expected one of: {:?}", & FIELDS)
4223                    }
4224                    #[allow(unused_variables)]
4225                    fn visit_str<E>(
4226                        self,
4227                        value: &str,
4228                    ) -> std::result::Result<GeneratedField, E>
4229                    where
4230                        E: serde::de::Error,
4231                    {
4232                        match value {
4233                            "currency" => Ok(GeneratedField::Currency),
4234                            "amounts_exclude_vat" => {
4235                                Ok(GeneratedField::AmountsExcludeVat)
4236                            }
4237                            "last_changed" => Ok(GeneratedField::LastChanged),
4238                            "families" => Ok(GeneratedField::Families),
4239                            _ => Ok(GeneratedField::__SkipField__),
4240                        }
4241                    }
4242                }
4243                deserializer.deserialize_identifier(GeneratedVisitor)
4244            }
4245        }
4246        struct GeneratedVisitor;
4247        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
4248            type Value = PriceList;
4249            fn expecting(
4250                &self,
4251                formatter: &mut std::fmt::Formatter<'_>,
4252            ) -> std::fmt::Result {
4253                formatter.write_str("struct origincloud.billing.v1beta1.PriceList")
4254            }
4255            fn visit_map<V>(
4256                self,
4257                mut map_: V,
4258            ) -> std::result::Result<PriceList, V::Error>
4259            where
4260                V: serde::de::MapAccess<'de>,
4261            {
4262                let mut currency__ = None;
4263                let mut amounts_exclude_vat__ = None;
4264                let mut last_changed__ = None;
4265                let mut families__ = None;
4266                while let Some(k) = map_.next_key()? {
4267                    match k {
4268                        GeneratedField::Currency => {
4269                            if currency__.is_some() {
4270                                return Err(serde::de::Error::duplicate_field("currency"));
4271                            }
4272                            currency__ = Some(map_.next_value()?);
4273                        }
4274                        GeneratedField::AmountsExcludeVat => {
4275                            if amounts_exclude_vat__.is_some() {
4276                                return Err(
4277                                    serde::de::Error::duplicate_field("amounts_exclude_vat"),
4278                                );
4279                            }
4280                            amounts_exclude_vat__ = Some(map_.next_value()?);
4281                        }
4282                        GeneratedField::LastChanged => {
4283                            if last_changed__.is_some() {
4284                                return Err(
4285                                    serde::de::Error::duplicate_field("last_changed"),
4286                                );
4287                            }
4288                            last_changed__ = map_.next_value()?;
4289                        }
4290                        GeneratedField::Families => {
4291                            if families__.is_some() {
4292                                return Err(serde::de::Error::duplicate_field("families"));
4293                            }
4294                            families__ = Some(map_.next_value()?);
4295                        }
4296                        GeneratedField::__SkipField__ => {
4297                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
4298                        }
4299                    }
4300                }
4301                Ok(PriceList {
4302                    currency: currency__.unwrap_or_default(),
4303                    amounts_exclude_vat: amounts_exclude_vat__.unwrap_or_default(),
4304                    last_changed: last_changed__,
4305                    families: families__.unwrap_or_default(),
4306                })
4307            }
4308        }
4309        deserializer
4310            .deserialize_struct(
4311                "origincloud.billing.v1beta1.PriceList",
4312                FIELDS,
4313                GeneratedVisitor,
4314            )
4315    }
4316}
4317impl serde::Serialize for ProductCost {
4318    #[allow(deprecated)]
4319    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4320    where
4321        S: serde::Serializer,
4322    {
4323        use serde::ser::SerializeStruct;
4324        let mut len = 0;
4325        if !self.product_key.is_empty() {
4326            len += 1;
4327        }
4328        if !self.total.is_empty() {
4329            len += 1;
4330        }
4331        if !self.buckets.is_empty() {
4332            len += 1;
4333        }
4334        let mut struct_ser = serializer
4335            .serialize_struct("origincloud.billing.v1beta1.ProductCost", len)?;
4336        if !self.product_key.is_empty() {
4337            struct_ser.serialize_field("productKey", &self.product_key)?;
4338        }
4339        if !self.total.is_empty() {
4340            struct_ser.serialize_field("total", &self.total)?;
4341        }
4342        if !self.buckets.is_empty() {
4343            struct_ser.serialize_field("buckets", &self.buckets)?;
4344        }
4345        struct_ser.end()
4346    }
4347}
4348impl<'de> serde::Deserialize<'de> for ProductCost {
4349    #[allow(deprecated)]
4350    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4351    where
4352        D: serde::Deserializer<'de>,
4353    {
4354        const FIELDS: &[&str] = &["product_key", "productKey", "total", "buckets"];
4355        #[allow(clippy::enum_variant_names)]
4356        enum GeneratedField {
4357            ProductKey,
4358            Total,
4359            Buckets,
4360            __SkipField__,
4361        }
4362        impl<'de> serde::Deserialize<'de> for GeneratedField {
4363            fn deserialize<D>(
4364                deserializer: D,
4365            ) -> std::result::Result<GeneratedField, D::Error>
4366            where
4367                D: serde::Deserializer<'de>,
4368            {
4369                struct GeneratedVisitor;
4370                impl serde::de::Visitor<'_> for GeneratedVisitor {
4371                    type Value = GeneratedField;
4372                    fn expecting(
4373                        &self,
4374                        formatter: &mut std::fmt::Formatter<'_>,
4375                    ) -> std::fmt::Result {
4376                        write!(formatter, "expected one of: {:?}", & FIELDS)
4377                    }
4378                    #[allow(unused_variables)]
4379                    fn visit_str<E>(
4380                        self,
4381                        value: &str,
4382                    ) -> std::result::Result<GeneratedField, E>
4383                    where
4384                        E: serde::de::Error,
4385                    {
4386                        match value {
4387                            "productKey" | "product_key" => {
4388                                Ok(GeneratedField::ProductKey)
4389                            }
4390                            "total" => Ok(GeneratedField::Total),
4391                            "buckets" => Ok(GeneratedField::Buckets),
4392                            _ => Ok(GeneratedField::__SkipField__),
4393                        }
4394                    }
4395                }
4396                deserializer.deserialize_identifier(GeneratedVisitor)
4397            }
4398        }
4399        struct GeneratedVisitor;
4400        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
4401            type Value = ProductCost;
4402            fn expecting(
4403                &self,
4404                formatter: &mut std::fmt::Formatter<'_>,
4405            ) -> std::fmt::Result {
4406                formatter.write_str("struct origincloud.billing.v1beta1.ProductCost")
4407            }
4408            fn visit_map<V>(
4409                self,
4410                mut map_: V,
4411            ) -> std::result::Result<ProductCost, V::Error>
4412            where
4413                V: serde::de::MapAccess<'de>,
4414            {
4415                let mut product_key__ = None;
4416                let mut total__ = None;
4417                let mut buckets__ = None;
4418                while let Some(k) = map_.next_key()? {
4419                    match k {
4420                        GeneratedField::ProductKey => {
4421                            if product_key__.is_some() {
4422                                return Err(serde::de::Error::duplicate_field("productKey"));
4423                            }
4424                            product_key__ = Some(map_.next_value()?);
4425                        }
4426                        GeneratedField::Total => {
4427                            if total__.is_some() {
4428                                return Err(serde::de::Error::duplicate_field("total"));
4429                            }
4430                            total__ = Some(map_.next_value()?);
4431                        }
4432                        GeneratedField::Buckets => {
4433                            if buckets__.is_some() {
4434                                return Err(serde::de::Error::duplicate_field("buckets"));
4435                            }
4436                            buckets__ = Some(map_.next_value()?);
4437                        }
4438                        GeneratedField::__SkipField__ => {
4439                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
4440                        }
4441                    }
4442                }
4443                Ok(ProductCost {
4444                    product_key: product_key__.unwrap_or_default(),
4445                    total: total__.unwrap_or_default(),
4446                    buckets: buckets__.unwrap_or_default(),
4447                })
4448            }
4449        }
4450        deserializer
4451            .deserialize_struct(
4452                "origincloud.billing.v1beta1.ProductCost",
4453                FIELDS,
4454                GeneratedVisitor,
4455            )
4456    }
4457}
4458impl serde::Serialize for ProjectBillingInfo {
4459    #[allow(deprecated)]
4460    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4461    where
4462        S: serde::Serializer,
4463    {
4464        use serde::ser::SerializeStruct;
4465        let mut len = 0;
4466        if !self.name.is_empty() {
4467            len += 1;
4468        }
4469        if !self.billing_account.is_empty() {
4470            len += 1;
4471        }
4472        let mut struct_ser = serializer
4473            .serialize_struct("origincloud.billing.v1beta1.ProjectBillingInfo", len)?;
4474        if !self.name.is_empty() {
4475            struct_ser.serialize_field("name", &self.name)?;
4476        }
4477        if !self.billing_account.is_empty() {
4478            struct_ser.serialize_field("billingAccount", &self.billing_account)?;
4479        }
4480        struct_ser.end()
4481    }
4482}
4483impl<'de> serde::Deserialize<'de> for ProjectBillingInfo {
4484    #[allow(deprecated)]
4485    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4486    where
4487        D: serde::Deserializer<'de>,
4488    {
4489        const FIELDS: &[&str] = &["name", "billing_account", "billingAccount"];
4490        #[allow(clippy::enum_variant_names)]
4491        enum GeneratedField {
4492            Name,
4493            BillingAccount,
4494            __SkipField__,
4495        }
4496        impl<'de> serde::Deserialize<'de> for GeneratedField {
4497            fn deserialize<D>(
4498                deserializer: D,
4499            ) -> std::result::Result<GeneratedField, D::Error>
4500            where
4501                D: serde::Deserializer<'de>,
4502            {
4503                struct GeneratedVisitor;
4504                impl serde::de::Visitor<'_> for GeneratedVisitor {
4505                    type Value = GeneratedField;
4506                    fn expecting(
4507                        &self,
4508                        formatter: &mut std::fmt::Formatter<'_>,
4509                    ) -> std::fmt::Result {
4510                        write!(formatter, "expected one of: {:?}", & FIELDS)
4511                    }
4512                    #[allow(unused_variables)]
4513                    fn visit_str<E>(
4514                        self,
4515                        value: &str,
4516                    ) -> std::result::Result<GeneratedField, E>
4517                    where
4518                        E: serde::de::Error,
4519                    {
4520                        match value {
4521                            "name" => Ok(GeneratedField::Name),
4522                            "billingAccount" | "billing_account" => {
4523                                Ok(GeneratedField::BillingAccount)
4524                            }
4525                            _ => Ok(GeneratedField::__SkipField__),
4526                        }
4527                    }
4528                }
4529                deserializer.deserialize_identifier(GeneratedVisitor)
4530            }
4531        }
4532        struct GeneratedVisitor;
4533        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
4534            type Value = ProjectBillingInfo;
4535            fn expecting(
4536                &self,
4537                formatter: &mut std::fmt::Formatter<'_>,
4538            ) -> std::fmt::Result {
4539                formatter
4540                    .write_str("struct origincloud.billing.v1beta1.ProjectBillingInfo")
4541            }
4542            fn visit_map<V>(
4543                self,
4544                mut map_: V,
4545            ) -> std::result::Result<ProjectBillingInfo, V::Error>
4546            where
4547                V: serde::de::MapAccess<'de>,
4548            {
4549                let mut name__ = None;
4550                let mut billing_account__ = None;
4551                while let Some(k) = map_.next_key()? {
4552                    match k {
4553                        GeneratedField::Name => {
4554                            if name__.is_some() {
4555                                return Err(serde::de::Error::duplicate_field("name"));
4556                            }
4557                            name__ = Some(map_.next_value()?);
4558                        }
4559                        GeneratedField::BillingAccount => {
4560                            if billing_account__.is_some() {
4561                                return Err(
4562                                    serde::de::Error::duplicate_field("billingAccount"),
4563                                );
4564                            }
4565                            billing_account__ = Some(map_.next_value()?);
4566                        }
4567                        GeneratedField::__SkipField__ => {
4568                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
4569                        }
4570                    }
4571                }
4572                Ok(ProjectBillingInfo {
4573                    name: name__.unwrap_or_default(),
4574                    billing_account: billing_account__.unwrap_or_default(),
4575                })
4576            }
4577        }
4578        deserializer
4579            .deserialize_struct(
4580                "origincloud.billing.v1beta1.ProjectBillingInfo",
4581                FIELDS,
4582                GeneratedVisitor,
4583            )
4584    }
4585}
4586impl serde::Serialize for ProjectCost {
4587    #[allow(deprecated)]
4588    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4589    where
4590        S: serde::Serializer,
4591    {
4592        use serde::ser::SerializeStruct;
4593        let mut len = 0;
4594        if !self.project.is_empty() {
4595            len += 1;
4596        }
4597        if !self.total.is_empty() {
4598            len += 1;
4599        }
4600        if !self.buckets.is_empty() {
4601            len += 1;
4602        }
4603        let mut struct_ser = serializer
4604            .serialize_struct("origincloud.billing.v1beta1.ProjectCost", len)?;
4605        if !self.project.is_empty() {
4606            struct_ser.serialize_field("project", &self.project)?;
4607        }
4608        if !self.total.is_empty() {
4609            struct_ser.serialize_field("total", &self.total)?;
4610        }
4611        if !self.buckets.is_empty() {
4612            struct_ser.serialize_field("buckets", &self.buckets)?;
4613        }
4614        struct_ser.end()
4615    }
4616}
4617impl<'de> serde::Deserialize<'de> for ProjectCost {
4618    #[allow(deprecated)]
4619    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4620    where
4621        D: serde::Deserializer<'de>,
4622    {
4623        const FIELDS: &[&str] = &["project", "total", "buckets"];
4624        #[allow(clippy::enum_variant_names)]
4625        enum GeneratedField {
4626            Project,
4627            Total,
4628            Buckets,
4629            __SkipField__,
4630        }
4631        impl<'de> serde::Deserialize<'de> for GeneratedField {
4632            fn deserialize<D>(
4633                deserializer: D,
4634            ) -> std::result::Result<GeneratedField, D::Error>
4635            where
4636                D: serde::Deserializer<'de>,
4637            {
4638                struct GeneratedVisitor;
4639                impl serde::de::Visitor<'_> for GeneratedVisitor {
4640                    type Value = GeneratedField;
4641                    fn expecting(
4642                        &self,
4643                        formatter: &mut std::fmt::Formatter<'_>,
4644                    ) -> std::fmt::Result {
4645                        write!(formatter, "expected one of: {:?}", & FIELDS)
4646                    }
4647                    #[allow(unused_variables)]
4648                    fn visit_str<E>(
4649                        self,
4650                        value: &str,
4651                    ) -> std::result::Result<GeneratedField, E>
4652                    where
4653                        E: serde::de::Error,
4654                    {
4655                        match value {
4656                            "project" => Ok(GeneratedField::Project),
4657                            "total" => Ok(GeneratedField::Total),
4658                            "buckets" => Ok(GeneratedField::Buckets),
4659                            _ => Ok(GeneratedField::__SkipField__),
4660                        }
4661                    }
4662                }
4663                deserializer.deserialize_identifier(GeneratedVisitor)
4664            }
4665        }
4666        struct GeneratedVisitor;
4667        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
4668            type Value = ProjectCost;
4669            fn expecting(
4670                &self,
4671                formatter: &mut std::fmt::Formatter<'_>,
4672            ) -> std::fmt::Result {
4673                formatter.write_str("struct origincloud.billing.v1beta1.ProjectCost")
4674            }
4675            fn visit_map<V>(
4676                self,
4677                mut map_: V,
4678            ) -> std::result::Result<ProjectCost, V::Error>
4679            where
4680                V: serde::de::MapAccess<'de>,
4681            {
4682                let mut project__ = None;
4683                let mut total__ = None;
4684                let mut buckets__ = None;
4685                while let Some(k) = map_.next_key()? {
4686                    match k {
4687                        GeneratedField::Project => {
4688                            if project__.is_some() {
4689                                return Err(serde::de::Error::duplicate_field("project"));
4690                            }
4691                            project__ = Some(map_.next_value()?);
4692                        }
4693                        GeneratedField::Total => {
4694                            if total__.is_some() {
4695                                return Err(serde::de::Error::duplicate_field("total"));
4696                            }
4697                            total__ = Some(map_.next_value()?);
4698                        }
4699                        GeneratedField::Buckets => {
4700                            if buckets__.is_some() {
4701                                return Err(serde::de::Error::duplicate_field("buckets"));
4702                            }
4703                            buckets__ = Some(map_.next_value()?);
4704                        }
4705                        GeneratedField::__SkipField__ => {
4706                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
4707                        }
4708                    }
4709                }
4710                Ok(ProjectCost {
4711                    project: project__.unwrap_or_default(),
4712                    total: total__.unwrap_or_default(),
4713                    buckets: buckets__.unwrap_or_default(),
4714                })
4715            }
4716        }
4717        deserializer
4718            .deserialize_struct(
4719                "origincloud.billing.v1beta1.ProjectCost",
4720                FIELDS,
4721                GeneratedVisitor,
4722            )
4723    }
4724}
4725impl serde::Serialize for QueryBillingAccountCostRequest {
4726    #[allow(deprecated)]
4727    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4728    where
4729        S: serde::Serializer,
4730    {
4731        use serde::ser::SerializeStruct;
4732        let mut len = 0;
4733        if !self.billing_account.is_empty() {
4734            len += 1;
4735        }
4736        if self.start_time.is_some() {
4737            len += 1;
4738        }
4739        if self.end_time.is_some() {
4740            len += 1;
4741        }
4742        if self.granularity != 0 {
4743            len += 1;
4744        }
4745        let mut struct_ser = serializer
4746            .serialize_struct(
4747                "origincloud.billing.v1beta1.QueryBillingAccountCostRequest",
4748                len,
4749            )?;
4750        if !self.billing_account.is_empty() {
4751            struct_ser.serialize_field("billingAccount", &self.billing_account)?;
4752        }
4753        if let Some(v) = self.start_time.as_ref() {
4754            struct_ser.serialize_field("startTime", v)?;
4755        }
4756        if let Some(v) = self.end_time.as_ref() {
4757            struct_ser.serialize_field("endTime", v)?;
4758        }
4759        if self.granularity != 0 {
4760            let v = Granularity::try_from(self.granularity)
4761                .map_err(|_| serde::ser::Error::custom(
4762                    format!("Invalid variant {}", self.granularity),
4763                ))?;
4764            struct_ser.serialize_field("granularity", &v)?;
4765        }
4766        struct_ser.end()
4767    }
4768}
4769impl<'de> serde::Deserialize<'de> for QueryBillingAccountCostRequest {
4770    #[allow(deprecated)]
4771    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4772    where
4773        D: serde::Deserializer<'de>,
4774    {
4775        const FIELDS: &[&str] = &[
4776            "billing_account",
4777            "billingAccount",
4778            "start_time",
4779            "startTime",
4780            "end_time",
4781            "endTime",
4782            "granularity",
4783        ];
4784        #[allow(clippy::enum_variant_names)]
4785        enum GeneratedField {
4786            BillingAccount,
4787            StartTime,
4788            EndTime,
4789            Granularity,
4790            __SkipField__,
4791        }
4792        impl<'de> serde::Deserialize<'de> for GeneratedField {
4793            fn deserialize<D>(
4794                deserializer: D,
4795            ) -> std::result::Result<GeneratedField, D::Error>
4796            where
4797                D: serde::Deserializer<'de>,
4798            {
4799                struct GeneratedVisitor;
4800                impl serde::de::Visitor<'_> for GeneratedVisitor {
4801                    type Value = GeneratedField;
4802                    fn expecting(
4803                        &self,
4804                        formatter: &mut std::fmt::Formatter<'_>,
4805                    ) -> std::fmt::Result {
4806                        write!(formatter, "expected one of: {:?}", & FIELDS)
4807                    }
4808                    #[allow(unused_variables)]
4809                    fn visit_str<E>(
4810                        self,
4811                        value: &str,
4812                    ) -> std::result::Result<GeneratedField, E>
4813                    where
4814                        E: serde::de::Error,
4815                    {
4816                        match value {
4817                            "billingAccount" | "billing_account" => {
4818                                Ok(GeneratedField::BillingAccount)
4819                            }
4820                            "startTime" | "start_time" => Ok(GeneratedField::StartTime),
4821                            "endTime" | "end_time" => Ok(GeneratedField::EndTime),
4822                            "granularity" => Ok(GeneratedField::Granularity),
4823                            _ => Ok(GeneratedField::__SkipField__),
4824                        }
4825                    }
4826                }
4827                deserializer.deserialize_identifier(GeneratedVisitor)
4828            }
4829        }
4830        struct GeneratedVisitor;
4831        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
4832            type Value = QueryBillingAccountCostRequest;
4833            fn expecting(
4834                &self,
4835                formatter: &mut std::fmt::Formatter<'_>,
4836            ) -> std::fmt::Result {
4837                formatter
4838                    .write_str(
4839                        "struct origincloud.billing.v1beta1.QueryBillingAccountCostRequest",
4840                    )
4841            }
4842            fn visit_map<V>(
4843                self,
4844                mut map_: V,
4845            ) -> std::result::Result<QueryBillingAccountCostRequest, V::Error>
4846            where
4847                V: serde::de::MapAccess<'de>,
4848            {
4849                let mut billing_account__ = None;
4850                let mut start_time__ = None;
4851                let mut end_time__ = None;
4852                let mut granularity__ = None;
4853                while let Some(k) = map_.next_key()? {
4854                    match k {
4855                        GeneratedField::BillingAccount => {
4856                            if billing_account__.is_some() {
4857                                return Err(
4858                                    serde::de::Error::duplicate_field("billingAccount"),
4859                                );
4860                            }
4861                            billing_account__ = Some(map_.next_value()?);
4862                        }
4863                        GeneratedField::StartTime => {
4864                            if start_time__.is_some() {
4865                                return Err(serde::de::Error::duplicate_field("startTime"));
4866                            }
4867                            start_time__ = map_.next_value()?;
4868                        }
4869                        GeneratedField::EndTime => {
4870                            if end_time__.is_some() {
4871                                return Err(serde::de::Error::duplicate_field("endTime"));
4872                            }
4873                            end_time__ = map_.next_value()?;
4874                        }
4875                        GeneratedField::Granularity => {
4876                            if granularity__.is_some() {
4877                                return Err(
4878                                    serde::de::Error::duplicate_field("granularity"),
4879                                );
4880                            }
4881                            granularity__ = Some(
4882                                map_.next_value::<Granularity>()? as i32,
4883                            );
4884                        }
4885                        GeneratedField::__SkipField__ => {
4886                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
4887                        }
4888                    }
4889                }
4890                Ok(QueryBillingAccountCostRequest {
4891                    billing_account: billing_account__.unwrap_or_default(),
4892                    start_time: start_time__,
4893                    end_time: end_time__,
4894                    granularity: granularity__.unwrap_or_default(),
4895                })
4896            }
4897        }
4898        deserializer
4899            .deserialize_struct(
4900                "origincloud.billing.v1beta1.QueryBillingAccountCostRequest",
4901                FIELDS,
4902                GeneratedVisitor,
4903            )
4904    }
4905}
4906impl serde::Serialize for QueryOrganizationCostRequest {
4907    #[allow(deprecated)]
4908    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
4909    where
4910        S: serde::Serializer,
4911    {
4912        use serde::ser::SerializeStruct;
4913        let mut len = 0;
4914        if !self.organization.is_empty() {
4915            len += 1;
4916        }
4917        if self.start_time.is_some() {
4918            len += 1;
4919        }
4920        if self.end_time.is_some() {
4921            len += 1;
4922        }
4923        if self.granularity != 0 {
4924            len += 1;
4925        }
4926        let mut struct_ser = serializer
4927            .serialize_struct(
4928                "origincloud.billing.v1beta1.QueryOrganizationCostRequest",
4929                len,
4930            )?;
4931        if !self.organization.is_empty() {
4932            struct_ser.serialize_field("organization", &self.organization)?;
4933        }
4934        if let Some(v) = self.start_time.as_ref() {
4935            struct_ser.serialize_field("startTime", v)?;
4936        }
4937        if let Some(v) = self.end_time.as_ref() {
4938            struct_ser.serialize_field("endTime", v)?;
4939        }
4940        if self.granularity != 0 {
4941            let v = Granularity::try_from(self.granularity)
4942                .map_err(|_| serde::ser::Error::custom(
4943                    format!("Invalid variant {}", self.granularity),
4944                ))?;
4945            struct_ser.serialize_field("granularity", &v)?;
4946        }
4947        struct_ser.end()
4948    }
4949}
4950impl<'de> serde::Deserialize<'de> for QueryOrganizationCostRequest {
4951    #[allow(deprecated)]
4952    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
4953    where
4954        D: serde::Deserializer<'de>,
4955    {
4956        const FIELDS: &[&str] = &[
4957            "organization",
4958            "start_time",
4959            "startTime",
4960            "end_time",
4961            "endTime",
4962            "granularity",
4963        ];
4964        #[allow(clippy::enum_variant_names)]
4965        enum GeneratedField {
4966            Organization,
4967            StartTime,
4968            EndTime,
4969            Granularity,
4970            __SkipField__,
4971        }
4972        impl<'de> serde::Deserialize<'de> for GeneratedField {
4973            fn deserialize<D>(
4974                deserializer: D,
4975            ) -> std::result::Result<GeneratedField, D::Error>
4976            where
4977                D: serde::Deserializer<'de>,
4978            {
4979                struct GeneratedVisitor;
4980                impl serde::de::Visitor<'_> for GeneratedVisitor {
4981                    type Value = GeneratedField;
4982                    fn expecting(
4983                        &self,
4984                        formatter: &mut std::fmt::Formatter<'_>,
4985                    ) -> std::fmt::Result {
4986                        write!(formatter, "expected one of: {:?}", & FIELDS)
4987                    }
4988                    #[allow(unused_variables)]
4989                    fn visit_str<E>(
4990                        self,
4991                        value: &str,
4992                    ) -> std::result::Result<GeneratedField, E>
4993                    where
4994                        E: serde::de::Error,
4995                    {
4996                        match value {
4997                            "organization" => Ok(GeneratedField::Organization),
4998                            "startTime" | "start_time" => Ok(GeneratedField::StartTime),
4999                            "endTime" | "end_time" => Ok(GeneratedField::EndTime),
5000                            "granularity" => Ok(GeneratedField::Granularity),
5001                            _ => Ok(GeneratedField::__SkipField__),
5002                        }
5003                    }
5004                }
5005                deserializer.deserialize_identifier(GeneratedVisitor)
5006            }
5007        }
5008        struct GeneratedVisitor;
5009        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
5010            type Value = QueryOrganizationCostRequest;
5011            fn expecting(
5012                &self,
5013                formatter: &mut std::fmt::Formatter<'_>,
5014            ) -> std::fmt::Result {
5015                formatter
5016                    .write_str(
5017                        "struct origincloud.billing.v1beta1.QueryOrganizationCostRequest",
5018                    )
5019            }
5020            fn visit_map<V>(
5021                self,
5022                mut map_: V,
5023            ) -> std::result::Result<QueryOrganizationCostRequest, V::Error>
5024            where
5025                V: serde::de::MapAccess<'de>,
5026            {
5027                let mut organization__ = None;
5028                let mut start_time__ = None;
5029                let mut end_time__ = None;
5030                let mut granularity__ = None;
5031                while let Some(k) = map_.next_key()? {
5032                    match k {
5033                        GeneratedField::Organization => {
5034                            if organization__.is_some() {
5035                                return Err(
5036                                    serde::de::Error::duplicate_field("organization"),
5037                                );
5038                            }
5039                            organization__ = Some(map_.next_value()?);
5040                        }
5041                        GeneratedField::StartTime => {
5042                            if start_time__.is_some() {
5043                                return Err(serde::de::Error::duplicate_field("startTime"));
5044                            }
5045                            start_time__ = map_.next_value()?;
5046                        }
5047                        GeneratedField::EndTime => {
5048                            if end_time__.is_some() {
5049                                return Err(serde::de::Error::duplicate_field("endTime"));
5050                            }
5051                            end_time__ = map_.next_value()?;
5052                        }
5053                        GeneratedField::Granularity => {
5054                            if granularity__.is_some() {
5055                                return Err(
5056                                    serde::de::Error::duplicate_field("granularity"),
5057                                );
5058                            }
5059                            granularity__ = Some(
5060                                map_.next_value::<Granularity>()? as i32,
5061                            );
5062                        }
5063                        GeneratedField::__SkipField__ => {
5064                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
5065                        }
5066                    }
5067                }
5068                Ok(QueryOrganizationCostRequest {
5069                    organization: organization__.unwrap_or_default(),
5070                    start_time: start_time__,
5071                    end_time: end_time__,
5072                    granularity: granularity__.unwrap_or_default(),
5073                })
5074            }
5075        }
5076        deserializer
5077            .deserialize_struct(
5078                "origincloud.billing.v1beta1.QueryOrganizationCostRequest",
5079                FIELDS,
5080                GeneratedVisitor,
5081            )
5082    }
5083}
5084impl serde::Serialize for QueryProjectCostRequest {
5085    #[allow(deprecated)]
5086    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5087    where
5088        S: serde::Serializer,
5089    {
5090        use serde::ser::SerializeStruct;
5091        let mut len = 0;
5092        if !self.project.is_empty() {
5093            len += 1;
5094        }
5095        if self.start_time.is_some() {
5096            len += 1;
5097        }
5098        if self.end_time.is_some() {
5099            len += 1;
5100        }
5101        if self.granularity != 0 {
5102            len += 1;
5103        }
5104        let mut struct_ser = serializer
5105            .serialize_struct(
5106                "origincloud.billing.v1beta1.QueryProjectCostRequest",
5107                len,
5108            )?;
5109        if !self.project.is_empty() {
5110            struct_ser.serialize_field("project", &self.project)?;
5111        }
5112        if let Some(v) = self.start_time.as_ref() {
5113            struct_ser.serialize_field("startTime", v)?;
5114        }
5115        if let Some(v) = self.end_time.as_ref() {
5116            struct_ser.serialize_field("endTime", v)?;
5117        }
5118        if self.granularity != 0 {
5119            let v = Granularity::try_from(self.granularity)
5120                .map_err(|_| serde::ser::Error::custom(
5121                    format!("Invalid variant {}", self.granularity),
5122                ))?;
5123            struct_ser.serialize_field("granularity", &v)?;
5124        }
5125        struct_ser.end()
5126    }
5127}
5128impl<'de> serde::Deserialize<'de> for QueryProjectCostRequest {
5129    #[allow(deprecated)]
5130    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5131    where
5132        D: serde::Deserializer<'de>,
5133    {
5134        const FIELDS: &[&str] = &[
5135            "project",
5136            "start_time",
5137            "startTime",
5138            "end_time",
5139            "endTime",
5140            "granularity",
5141        ];
5142        #[allow(clippy::enum_variant_names)]
5143        enum GeneratedField {
5144            Project,
5145            StartTime,
5146            EndTime,
5147            Granularity,
5148            __SkipField__,
5149        }
5150        impl<'de> serde::Deserialize<'de> for GeneratedField {
5151            fn deserialize<D>(
5152                deserializer: D,
5153            ) -> std::result::Result<GeneratedField, D::Error>
5154            where
5155                D: serde::Deserializer<'de>,
5156            {
5157                struct GeneratedVisitor;
5158                impl serde::de::Visitor<'_> for GeneratedVisitor {
5159                    type Value = GeneratedField;
5160                    fn expecting(
5161                        &self,
5162                        formatter: &mut std::fmt::Formatter<'_>,
5163                    ) -> std::fmt::Result {
5164                        write!(formatter, "expected one of: {:?}", & FIELDS)
5165                    }
5166                    #[allow(unused_variables)]
5167                    fn visit_str<E>(
5168                        self,
5169                        value: &str,
5170                    ) -> std::result::Result<GeneratedField, E>
5171                    where
5172                        E: serde::de::Error,
5173                    {
5174                        match value {
5175                            "project" => Ok(GeneratedField::Project),
5176                            "startTime" | "start_time" => Ok(GeneratedField::StartTime),
5177                            "endTime" | "end_time" => Ok(GeneratedField::EndTime),
5178                            "granularity" => Ok(GeneratedField::Granularity),
5179                            _ => Ok(GeneratedField::__SkipField__),
5180                        }
5181                    }
5182                }
5183                deserializer.deserialize_identifier(GeneratedVisitor)
5184            }
5185        }
5186        struct GeneratedVisitor;
5187        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
5188            type Value = QueryProjectCostRequest;
5189            fn expecting(
5190                &self,
5191                formatter: &mut std::fmt::Formatter<'_>,
5192            ) -> std::fmt::Result {
5193                formatter
5194                    .write_str(
5195                        "struct origincloud.billing.v1beta1.QueryProjectCostRequest",
5196                    )
5197            }
5198            fn visit_map<V>(
5199                self,
5200                mut map_: V,
5201            ) -> std::result::Result<QueryProjectCostRequest, V::Error>
5202            where
5203                V: serde::de::MapAccess<'de>,
5204            {
5205                let mut project__ = None;
5206                let mut start_time__ = None;
5207                let mut end_time__ = None;
5208                let mut granularity__ = None;
5209                while let Some(k) = map_.next_key()? {
5210                    match k {
5211                        GeneratedField::Project => {
5212                            if project__.is_some() {
5213                                return Err(serde::de::Error::duplicate_field("project"));
5214                            }
5215                            project__ = Some(map_.next_value()?);
5216                        }
5217                        GeneratedField::StartTime => {
5218                            if start_time__.is_some() {
5219                                return Err(serde::de::Error::duplicate_field("startTime"));
5220                            }
5221                            start_time__ = map_.next_value()?;
5222                        }
5223                        GeneratedField::EndTime => {
5224                            if end_time__.is_some() {
5225                                return Err(serde::de::Error::duplicate_field("endTime"));
5226                            }
5227                            end_time__ = map_.next_value()?;
5228                        }
5229                        GeneratedField::Granularity => {
5230                            if granularity__.is_some() {
5231                                return Err(
5232                                    serde::de::Error::duplicate_field("granularity"),
5233                                );
5234                            }
5235                            granularity__ = Some(
5236                                map_.next_value::<Granularity>()? as i32,
5237                            );
5238                        }
5239                        GeneratedField::__SkipField__ => {
5240                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
5241                        }
5242                    }
5243                }
5244                Ok(QueryProjectCostRequest {
5245                    project: project__.unwrap_or_default(),
5246                    start_time: start_time__,
5247                    end_time: end_time__,
5248                    granularity: granularity__.unwrap_or_default(),
5249                })
5250            }
5251        }
5252        deserializer
5253            .deserialize_struct(
5254                "origincloud.billing.v1beta1.QueryProjectCostRequest",
5255                FIELDS,
5256                GeneratedVisitor,
5257            )
5258    }
5259}
5260impl serde::Serialize for QueryProjectUsageRequest {
5261    #[allow(deprecated)]
5262    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5263    where
5264        S: serde::Serializer,
5265    {
5266        use serde::ser::SerializeStruct;
5267        let mut len = 0;
5268        if !self.project.is_empty() {
5269            len += 1;
5270        }
5271        if self.start_time.is_some() {
5272            len += 1;
5273        }
5274        if self.end_time.is_some() {
5275            len += 1;
5276        }
5277        if self.page_size != 0 {
5278            len += 1;
5279        }
5280        if !self.page_token.is_empty() {
5281            len += 1;
5282        }
5283        let mut struct_ser = serializer
5284            .serialize_struct(
5285                "origincloud.billing.v1beta1.QueryProjectUsageRequest",
5286                len,
5287            )?;
5288        if !self.project.is_empty() {
5289            struct_ser.serialize_field("project", &self.project)?;
5290        }
5291        if let Some(v) = self.start_time.as_ref() {
5292            struct_ser.serialize_field("startTime", v)?;
5293        }
5294        if let Some(v) = self.end_time.as_ref() {
5295            struct_ser.serialize_field("endTime", v)?;
5296        }
5297        if self.page_size != 0 {
5298            struct_ser.serialize_field("pageSize", &self.page_size)?;
5299        }
5300        if !self.page_token.is_empty() {
5301            struct_ser.serialize_field("pageToken", &self.page_token)?;
5302        }
5303        struct_ser.end()
5304    }
5305}
5306impl<'de> serde::Deserialize<'de> for QueryProjectUsageRequest {
5307    #[allow(deprecated)]
5308    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5309    where
5310        D: serde::Deserializer<'de>,
5311    {
5312        const FIELDS: &[&str] = &[
5313            "project",
5314            "start_time",
5315            "startTime",
5316            "end_time",
5317            "endTime",
5318            "page_size",
5319            "pageSize",
5320            "page_token",
5321            "pageToken",
5322        ];
5323        #[allow(clippy::enum_variant_names)]
5324        enum GeneratedField {
5325            Project,
5326            StartTime,
5327            EndTime,
5328            PageSize,
5329            PageToken,
5330            __SkipField__,
5331        }
5332        impl<'de> serde::Deserialize<'de> for GeneratedField {
5333            fn deserialize<D>(
5334                deserializer: D,
5335            ) -> std::result::Result<GeneratedField, D::Error>
5336            where
5337                D: serde::Deserializer<'de>,
5338            {
5339                struct GeneratedVisitor;
5340                impl serde::de::Visitor<'_> for GeneratedVisitor {
5341                    type Value = GeneratedField;
5342                    fn expecting(
5343                        &self,
5344                        formatter: &mut std::fmt::Formatter<'_>,
5345                    ) -> std::fmt::Result {
5346                        write!(formatter, "expected one of: {:?}", & FIELDS)
5347                    }
5348                    #[allow(unused_variables)]
5349                    fn visit_str<E>(
5350                        self,
5351                        value: &str,
5352                    ) -> std::result::Result<GeneratedField, E>
5353                    where
5354                        E: serde::de::Error,
5355                    {
5356                        match value {
5357                            "project" => Ok(GeneratedField::Project),
5358                            "startTime" | "start_time" => Ok(GeneratedField::StartTime),
5359                            "endTime" | "end_time" => Ok(GeneratedField::EndTime),
5360                            "pageSize" | "page_size" => Ok(GeneratedField::PageSize),
5361                            "pageToken" | "page_token" => Ok(GeneratedField::PageToken),
5362                            _ => Ok(GeneratedField::__SkipField__),
5363                        }
5364                    }
5365                }
5366                deserializer.deserialize_identifier(GeneratedVisitor)
5367            }
5368        }
5369        struct GeneratedVisitor;
5370        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
5371            type Value = QueryProjectUsageRequest;
5372            fn expecting(
5373                &self,
5374                formatter: &mut std::fmt::Formatter<'_>,
5375            ) -> std::fmt::Result {
5376                formatter
5377                    .write_str(
5378                        "struct origincloud.billing.v1beta1.QueryProjectUsageRequest",
5379                    )
5380            }
5381            fn visit_map<V>(
5382                self,
5383                mut map_: V,
5384            ) -> std::result::Result<QueryProjectUsageRequest, V::Error>
5385            where
5386                V: serde::de::MapAccess<'de>,
5387            {
5388                let mut project__ = None;
5389                let mut start_time__ = None;
5390                let mut end_time__ = None;
5391                let mut page_size__ = None;
5392                let mut page_token__ = None;
5393                while let Some(k) = map_.next_key()? {
5394                    match k {
5395                        GeneratedField::Project => {
5396                            if project__.is_some() {
5397                                return Err(serde::de::Error::duplicate_field("project"));
5398                            }
5399                            project__ = Some(map_.next_value()?);
5400                        }
5401                        GeneratedField::StartTime => {
5402                            if start_time__.is_some() {
5403                                return Err(serde::de::Error::duplicate_field("startTime"));
5404                            }
5405                            start_time__ = map_.next_value()?;
5406                        }
5407                        GeneratedField::EndTime => {
5408                            if end_time__.is_some() {
5409                                return Err(serde::de::Error::duplicate_field("endTime"));
5410                            }
5411                            end_time__ = map_.next_value()?;
5412                        }
5413                        GeneratedField::PageSize => {
5414                            if page_size__.is_some() {
5415                                return Err(serde::de::Error::duplicate_field("pageSize"));
5416                            }
5417                            page_size__ = Some(
5418                                map_
5419                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
5420                                    .0,
5421                            );
5422                        }
5423                        GeneratedField::PageToken => {
5424                            if page_token__.is_some() {
5425                                return Err(serde::de::Error::duplicate_field("pageToken"));
5426                            }
5427                            page_token__ = Some(map_.next_value()?);
5428                        }
5429                        GeneratedField::__SkipField__ => {
5430                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
5431                        }
5432                    }
5433                }
5434                Ok(QueryProjectUsageRequest {
5435                    project: project__.unwrap_or_default(),
5436                    start_time: start_time__,
5437                    end_time: end_time__,
5438                    page_size: page_size__.unwrap_or_default(),
5439                    page_token: page_token__.unwrap_or_default(),
5440                })
5441            }
5442        }
5443        deserializer
5444            .deserialize_struct(
5445                "origincloud.billing.v1beta1.QueryProjectUsageRequest",
5446                FIELDS,
5447                GeneratedVisitor,
5448            )
5449    }
5450}
5451impl serde::Serialize for QueryProjectUsageResponse {
5452    #[allow(deprecated)]
5453    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5454    where
5455        S: serde::Serializer,
5456    {
5457        use serde::ser::SerializeStruct;
5458        let mut len = 0;
5459        if !self.usage_records.is_empty() {
5460            len += 1;
5461        }
5462        if !self.next_page_token.is_empty() {
5463            len += 1;
5464        }
5465        let mut struct_ser = serializer
5466            .serialize_struct(
5467                "origincloud.billing.v1beta1.QueryProjectUsageResponse",
5468                len,
5469            )?;
5470        if !self.usage_records.is_empty() {
5471            struct_ser.serialize_field("usageRecords", &self.usage_records)?;
5472        }
5473        if !self.next_page_token.is_empty() {
5474            struct_ser.serialize_field("nextPageToken", &self.next_page_token)?;
5475        }
5476        struct_ser.end()
5477    }
5478}
5479impl<'de> serde::Deserialize<'de> for QueryProjectUsageResponse {
5480    #[allow(deprecated)]
5481    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5482    where
5483        D: serde::Deserializer<'de>,
5484    {
5485        const FIELDS: &[&str] = &[
5486            "usage_records",
5487            "usageRecords",
5488            "next_page_token",
5489            "nextPageToken",
5490        ];
5491        #[allow(clippy::enum_variant_names)]
5492        enum GeneratedField {
5493            UsageRecords,
5494            NextPageToken,
5495            __SkipField__,
5496        }
5497        impl<'de> serde::Deserialize<'de> for GeneratedField {
5498            fn deserialize<D>(
5499                deserializer: D,
5500            ) -> std::result::Result<GeneratedField, D::Error>
5501            where
5502                D: serde::Deserializer<'de>,
5503            {
5504                struct GeneratedVisitor;
5505                impl serde::de::Visitor<'_> for GeneratedVisitor {
5506                    type Value = GeneratedField;
5507                    fn expecting(
5508                        &self,
5509                        formatter: &mut std::fmt::Formatter<'_>,
5510                    ) -> std::fmt::Result {
5511                        write!(formatter, "expected one of: {:?}", & FIELDS)
5512                    }
5513                    #[allow(unused_variables)]
5514                    fn visit_str<E>(
5515                        self,
5516                        value: &str,
5517                    ) -> std::result::Result<GeneratedField, E>
5518                    where
5519                        E: serde::de::Error,
5520                    {
5521                        match value {
5522                            "usageRecords" | "usage_records" => {
5523                                Ok(GeneratedField::UsageRecords)
5524                            }
5525                            "nextPageToken" | "next_page_token" => {
5526                                Ok(GeneratedField::NextPageToken)
5527                            }
5528                            _ => Ok(GeneratedField::__SkipField__),
5529                        }
5530                    }
5531                }
5532                deserializer.deserialize_identifier(GeneratedVisitor)
5533            }
5534        }
5535        struct GeneratedVisitor;
5536        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
5537            type Value = QueryProjectUsageResponse;
5538            fn expecting(
5539                &self,
5540                formatter: &mut std::fmt::Formatter<'_>,
5541            ) -> std::fmt::Result {
5542                formatter
5543                    .write_str(
5544                        "struct origincloud.billing.v1beta1.QueryProjectUsageResponse",
5545                    )
5546            }
5547            fn visit_map<V>(
5548                self,
5549                mut map_: V,
5550            ) -> std::result::Result<QueryProjectUsageResponse, V::Error>
5551            where
5552                V: serde::de::MapAccess<'de>,
5553            {
5554                let mut usage_records__ = None;
5555                let mut next_page_token__ = None;
5556                while let Some(k) = map_.next_key()? {
5557                    match k {
5558                        GeneratedField::UsageRecords => {
5559                            if usage_records__.is_some() {
5560                                return Err(
5561                                    serde::de::Error::duplicate_field("usageRecords"),
5562                                );
5563                            }
5564                            usage_records__ = Some(map_.next_value()?);
5565                        }
5566                        GeneratedField::NextPageToken => {
5567                            if next_page_token__.is_some() {
5568                                return Err(
5569                                    serde::de::Error::duplicate_field("nextPageToken"),
5570                                );
5571                            }
5572                            next_page_token__ = Some(map_.next_value()?);
5573                        }
5574                        GeneratedField::__SkipField__ => {
5575                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
5576                        }
5577                    }
5578                }
5579                Ok(QueryProjectUsageResponse {
5580                    usage_records: usage_records__.unwrap_or_default(),
5581                    next_page_token: next_page_token__.unwrap_or_default(),
5582                })
5583            }
5584        }
5585        deserializer
5586            .deserialize_struct(
5587                "origincloud.billing.v1beta1.QueryProjectUsageResponse",
5588                FIELDS,
5589                GeneratedVisitor,
5590            )
5591    }
5592}
5593impl serde::Serialize for ServiceCost {
5594    #[allow(deprecated)]
5595    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5596    where
5597        S: serde::Serializer,
5598    {
5599        use serde::ser::SerializeStruct;
5600        let mut len = 0;
5601        if !self.service.is_empty() {
5602            len += 1;
5603        }
5604        if !self.total.is_empty() {
5605            len += 1;
5606        }
5607        if !self.products.is_empty() {
5608            len += 1;
5609        }
5610        let mut struct_ser = serializer
5611            .serialize_struct("origincloud.billing.v1beta1.ServiceCost", len)?;
5612        if !self.service.is_empty() {
5613            struct_ser.serialize_field("service", &self.service)?;
5614        }
5615        if !self.total.is_empty() {
5616            struct_ser.serialize_field("total", &self.total)?;
5617        }
5618        if !self.products.is_empty() {
5619            struct_ser.serialize_field("products", &self.products)?;
5620        }
5621        struct_ser.end()
5622    }
5623}
5624impl<'de> serde::Deserialize<'de> for ServiceCost {
5625    #[allow(deprecated)]
5626    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5627    where
5628        D: serde::Deserializer<'de>,
5629    {
5630        const FIELDS: &[&str] = &["service", "total", "products"];
5631        #[allow(clippy::enum_variant_names)]
5632        enum GeneratedField {
5633            Service,
5634            Total,
5635            Products,
5636            __SkipField__,
5637        }
5638        impl<'de> serde::Deserialize<'de> for GeneratedField {
5639            fn deserialize<D>(
5640                deserializer: D,
5641            ) -> std::result::Result<GeneratedField, D::Error>
5642            where
5643                D: serde::Deserializer<'de>,
5644            {
5645                struct GeneratedVisitor;
5646                impl serde::de::Visitor<'_> for GeneratedVisitor {
5647                    type Value = GeneratedField;
5648                    fn expecting(
5649                        &self,
5650                        formatter: &mut std::fmt::Formatter<'_>,
5651                    ) -> std::fmt::Result {
5652                        write!(formatter, "expected one of: {:?}", & FIELDS)
5653                    }
5654                    #[allow(unused_variables)]
5655                    fn visit_str<E>(
5656                        self,
5657                        value: &str,
5658                    ) -> std::result::Result<GeneratedField, E>
5659                    where
5660                        E: serde::de::Error,
5661                    {
5662                        match value {
5663                            "service" => Ok(GeneratedField::Service),
5664                            "total" => Ok(GeneratedField::Total),
5665                            "products" => Ok(GeneratedField::Products),
5666                            _ => Ok(GeneratedField::__SkipField__),
5667                        }
5668                    }
5669                }
5670                deserializer.deserialize_identifier(GeneratedVisitor)
5671            }
5672        }
5673        struct GeneratedVisitor;
5674        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
5675            type Value = ServiceCost;
5676            fn expecting(
5677                &self,
5678                formatter: &mut std::fmt::Formatter<'_>,
5679            ) -> std::fmt::Result {
5680                formatter.write_str("struct origincloud.billing.v1beta1.ServiceCost")
5681            }
5682            fn visit_map<V>(
5683                self,
5684                mut map_: V,
5685            ) -> std::result::Result<ServiceCost, V::Error>
5686            where
5687                V: serde::de::MapAccess<'de>,
5688            {
5689                let mut service__ = None;
5690                let mut total__ = None;
5691                let mut products__ = None;
5692                while let Some(k) = map_.next_key()? {
5693                    match k {
5694                        GeneratedField::Service => {
5695                            if service__.is_some() {
5696                                return Err(serde::de::Error::duplicate_field("service"));
5697                            }
5698                            service__ = Some(map_.next_value()?);
5699                        }
5700                        GeneratedField::Total => {
5701                            if total__.is_some() {
5702                                return Err(serde::de::Error::duplicate_field("total"));
5703                            }
5704                            total__ = Some(map_.next_value()?);
5705                        }
5706                        GeneratedField::Products => {
5707                            if products__.is_some() {
5708                                return Err(serde::de::Error::duplicate_field("products"));
5709                            }
5710                            products__ = Some(map_.next_value()?);
5711                        }
5712                        GeneratedField::__SkipField__ => {
5713                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
5714                        }
5715                    }
5716                }
5717                Ok(ServiceCost {
5718                    service: service__.unwrap_or_default(),
5719                    total: total__.unwrap_or_default(),
5720                    products: products__.unwrap_or_default(),
5721                })
5722            }
5723        }
5724        deserializer
5725            .deserialize_struct(
5726                "origincloud.billing.v1beta1.ServiceCost",
5727                FIELDS,
5728                GeneratedVisitor,
5729            )
5730    }
5731}
5732impl serde::Serialize for SpendLimit {
5733    #[allow(deprecated)]
5734    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5735    where
5736        S: serde::Serializer,
5737    {
5738        use serde::ser::SerializeStruct;
5739        let mut len = 0;
5740        if !self.name.is_empty() {
5741            len += 1;
5742        }
5743        if self.limit.is_some() {
5744            len += 1;
5745        }
5746        if !self.alert_thresholds_percent.is_empty() {
5747            len += 1;
5748        }
5749        if !self.notification_emails.is_empty() {
5750            len += 1;
5751        }
5752        if self.update_time.is_some() {
5753            len += 1;
5754        }
5755        let mut struct_ser = serializer
5756            .serialize_struct("origincloud.billing.v1beta1.SpendLimit", len)?;
5757        if !self.name.is_empty() {
5758            struct_ser.serialize_field("name", &self.name)?;
5759        }
5760        if let Some(v) = self.limit.as_ref() {
5761            struct_ser.serialize_field("limit", v)?;
5762        }
5763        if !self.alert_thresholds_percent.is_empty() {
5764            struct_ser
5765                .serialize_field(
5766                    "alertThresholdsPercent",
5767                    &self.alert_thresholds_percent,
5768                )?;
5769        }
5770        if !self.notification_emails.is_empty() {
5771            struct_ser.serialize_field("notificationEmails", &self.notification_emails)?;
5772        }
5773        if let Some(v) = self.update_time.as_ref() {
5774            struct_ser.serialize_field("updateTime", v)?;
5775        }
5776        struct_ser.end()
5777    }
5778}
5779impl<'de> serde::Deserialize<'de> for SpendLimit {
5780    #[allow(deprecated)]
5781    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5782    where
5783        D: serde::Deserializer<'de>,
5784    {
5785        const FIELDS: &[&str] = &[
5786            "name",
5787            "limit",
5788            "alert_thresholds_percent",
5789            "alertThresholdsPercent",
5790            "notification_emails",
5791            "notificationEmails",
5792            "update_time",
5793            "updateTime",
5794        ];
5795        #[allow(clippy::enum_variant_names)]
5796        enum GeneratedField {
5797            Name,
5798            Limit,
5799            AlertThresholdsPercent,
5800            NotificationEmails,
5801            UpdateTime,
5802            __SkipField__,
5803        }
5804        impl<'de> serde::Deserialize<'de> for GeneratedField {
5805            fn deserialize<D>(
5806                deserializer: D,
5807            ) -> std::result::Result<GeneratedField, D::Error>
5808            where
5809                D: serde::Deserializer<'de>,
5810            {
5811                struct GeneratedVisitor;
5812                impl serde::de::Visitor<'_> for GeneratedVisitor {
5813                    type Value = GeneratedField;
5814                    fn expecting(
5815                        &self,
5816                        formatter: &mut std::fmt::Formatter<'_>,
5817                    ) -> std::fmt::Result {
5818                        write!(formatter, "expected one of: {:?}", & FIELDS)
5819                    }
5820                    #[allow(unused_variables)]
5821                    fn visit_str<E>(
5822                        self,
5823                        value: &str,
5824                    ) -> std::result::Result<GeneratedField, E>
5825                    where
5826                        E: serde::de::Error,
5827                    {
5828                        match value {
5829                            "name" => Ok(GeneratedField::Name),
5830                            "limit" => Ok(GeneratedField::Limit),
5831                            "alertThresholdsPercent" | "alert_thresholds_percent" => {
5832                                Ok(GeneratedField::AlertThresholdsPercent)
5833                            }
5834                            "notificationEmails" | "notification_emails" => {
5835                                Ok(GeneratedField::NotificationEmails)
5836                            }
5837                            "updateTime" | "update_time" => {
5838                                Ok(GeneratedField::UpdateTime)
5839                            }
5840                            _ => Ok(GeneratedField::__SkipField__),
5841                        }
5842                    }
5843                }
5844                deserializer.deserialize_identifier(GeneratedVisitor)
5845            }
5846        }
5847        struct GeneratedVisitor;
5848        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
5849            type Value = SpendLimit;
5850            fn expecting(
5851                &self,
5852                formatter: &mut std::fmt::Formatter<'_>,
5853            ) -> std::fmt::Result {
5854                formatter.write_str("struct origincloud.billing.v1beta1.SpendLimit")
5855            }
5856            fn visit_map<V>(
5857                self,
5858                mut map_: V,
5859            ) -> std::result::Result<SpendLimit, V::Error>
5860            where
5861                V: serde::de::MapAccess<'de>,
5862            {
5863                let mut name__ = None;
5864                let mut limit__ = None;
5865                let mut alert_thresholds_percent__ = None;
5866                let mut notification_emails__ = None;
5867                let mut update_time__ = None;
5868                while let Some(k) = map_.next_key()? {
5869                    match k {
5870                        GeneratedField::Name => {
5871                            if name__.is_some() {
5872                                return Err(serde::de::Error::duplicate_field("name"));
5873                            }
5874                            name__ = Some(map_.next_value()?);
5875                        }
5876                        GeneratedField::Limit => {
5877                            if limit__.is_some() {
5878                                return Err(serde::de::Error::duplicate_field("limit"));
5879                            }
5880                            limit__ = map_.next_value()?;
5881                        }
5882                        GeneratedField::AlertThresholdsPercent => {
5883                            if alert_thresholds_percent__.is_some() {
5884                                return Err(
5885                                    serde::de::Error::duplicate_field("alertThresholdsPercent"),
5886                                );
5887                            }
5888                            alert_thresholds_percent__ = Some(
5889                                map_
5890                                    .next_value::<
5891                                        Vec<::pbjson::private::NumberDeserialize<_>>,
5892                                    >()?
5893                                    .into_iter()
5894                                    .map(|x| x.0)
5895                                    .collect(),
5896                            );
5897                        }
5898                        GeneratedField::NotificationEmails => {
5899                            if notification_emails__.is_some() {
5900                                return Err(
5901                                    serde::de::Error::duplicate_field("notificationEmails"),
5902                                );
5903                            }
5904                            notification_emails__ = Some(map_.next_value()?);
5905                        }
5906                        GeneratedField::UpdateTime => {
5907                            if update_time__.is_some() {
5908                                return Err(serde::de::Error::duplicate_field("updateTime"));
5909                            }
5910                            update_time__ = map_.next_value()?;
5911                        }
5912                        GeneratedField::__SkipField__ => {
5913                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
5914                        }
5915                    }
5916                }
5917                Ok(SpendLimit {
5918                    name: name__.unwrap_or_default(),
5919                    limit: limit__,
5920                    alert_thresholds_percent: alert_thresholds_percent__
5921                        .unwrap_or_default(),
5922                    notification_emails: notification_emails__.unwrap_or_default(),
5923                    update_time: update_time__,
5924                })
5925            }
5926        }
5927        deserializer
5928            .deserialize_struct(
5929                "origincloud.billing.v1beta1.SpendLimit",
5930                FIELDS,
5931                GeneratedVisitor,
5932            )
5933    }
5934}
5935impl serde::Serialize for StartPaymentMethodSetupRequest {
5936    #[allow(deprecated)]
5937    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5938    where
5939        S: serde::Serializer,
5940    {
5941        use serde::ser::SerializeStruct;
5942        let mut len = 0;
5943        if !self.name.is_empty() {
5944            len += 1;
5945        }
5946        let mut struct_ser = serializer
5947            .serialize_struct(
5948                "origincloud.billing.v1beta1.StartPaymentMethodSetupRequest",
5949                len,
5950            )?;
5951        if !self.name.is_empty() {
5952            struct_ser.serialize_field("name", &self.name)?;
5953        }
5954        struct_ser.end()
5955    }
5956}
5957impl<'de> serde::Deserialize<'de> for StartPaymentMethodSetupRequest {
5958    #[allow(deprecated)]
5959    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
5960    where
5961        D: serde::Deserializer<'de>,
5962    {
5963        const FIELDS: &[&str] = &["name"];
5964        #[allow(clippy::enum_variant_names)]
5965        enum GeneratedField {
5966            Name,
5967            __SkipField__,
5968        }
5969        impl<'de> serde::Deserialize<'de> for GeneratedField {
5970            fn deserialize<D>(
5971                deserializer: D,
5972            ) -> std::result::Result<GeneratedField, D::Error>
5973            where
5974                D: serde::Deserializer<'de>,
5975            {
5976                struct GeneratedVisitor;
5977                impl serde::de::Visitor<'_> for GeneratedVisitor {
5978                    type Value = GeneratedField;
5979                    fn expecting(
5980                        &self,
5981                        formatter: &mut std::fmt::Formatter<'_>,
5982                    ) -> std::fmt::Result {
5983                        write!(formatter, "expected one of: {:?}", & FIELDS)
5984                    }
5985                    #[allow(unused_variables)]
5986                    fn visit_str<E>(
5987                        self,
5988                        value: &str,
5989                    ) -> std::result::Result<GeneratedField, E>
5990                    where
5991                        E: serde::de::Error,
5992                    {
5993                        match value {
5994                            "name" => Ok(GeneratedField::Name),
5995                            _ => Ok(GeneratedField::__SkipField__),
5996                        }
5997                    }
5998                }
5999                deserializer.deserialize_identifier(GeneratedVisitor)
6000            }
6001        }
6002        struct GeneratedVisitor;
6003        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
6004            type Value = StartPaymentMethodSetupRequest;
6005            fn expecting(
6006                &self,
6007                formatter: &mut std::fmt::Formatter<'_>,
6008            ) -> std::fmt::Result {
6009                formatter
6010                    .write_str(
6011                        "struct origincloud.billing.v1beta1.StartPaymentMethodSetupRequest",
6012                    )
6013            }
6014            fn visit_map<V>(
6015                self,
6016                mut map_: V,
6017            ) -> std::result::Result<StartPaymentMethodSetupRequest, V::Error>
6018            where
6019                V: serde::de::MapAccess<'de>,
6020            {
6021                let mut name__ = None;
6022                while let Some(k) = map_.next_key()? {
6023                    match k {
6024                        GeneratedField::Name => {
6025                            if name__.is_some() {
6026                                return Err(serde::de::Error::duplicate_field("name"));
6027                            }
6028                            name__ = Some(map_.next_value()?);
6029                        }
6030                        GeneratedField::__SkipField__ => {
6031                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
6032                        }
6033                    }
6034                }
6035                Ok(StartPaymentMethodSetupRequest {
6036                    name: name__.unwrap_or_default(),
6037                })
6038            }
6039        }
6040        deserializer
6041            .deserialize_struct(
6042                "origincloud.billing.v1beta1.StartPaymentMethodSetupRequest",
6043                FIELDS,
6044                GeneratedVisitor,
6045            )
6046    }
6047}
6048impl serde::Serialize for StartPaymentMethodSetupResponse {
6049    #[allow(deprecated)]
6050    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
6051    where
6052        S: serde::Serializer,
6053    {
6054        use serde::ser::SerializeStruct;
6055        let mut len = 0;
6056        if !self.redirect_uri.is_empty() {
6057            len += 1;
6058        }
6059        let mut struct_ser = serializer
6060            .serialize_struct(
6061                "origincloud.billing.v1beta1.StartPaymentMethodSetupResponse",
6062                len,
6063            )?;
6064        if !self.redirect_uri.is_empty() {
6065            struct_ser.serialize_field("redirectUri", &self.redirect_uri)?;
6066        }
6067        struct_ser.end()
6068    }
6069}
6070impl<'de> serde::Deserialize<'de> for StartPaymentMethodSetupResponse {
6071    #[allow(deprecated)]
6072    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6073    where
6074        D: serde::Deserializer<'de>,
6075    {
6076        const FIELDS: &[&str] = &["redirect_uri", "redirectUri"];
6077        #[allow(clippy::enum_variant_names)]
6078        enum GeneratedField {
6079            RedirectUri,
6080            __SkipField__,
6081        }
6082        impl<'de> serde::Deserialize<'de> for GeneratedField {
6083            fn deserialize<D>(
6084                deserializer: D,
6085            ) -> std::result::Result<GeneratedField, D::Error>
6086            where
6087                D: serde::Deserializer<'de>,
6088            {
6089                struct GeneratedVisitor;
6090                impl serde::de::Visitor<'_> for GeneratedVisitor {
6091                    type Value = GeneratedField;
6092                    fn expecting(
6093                        &self,
6094                        formatter: &mut std::fmt::Formatter<'_>,
6095                    ) -> std::fmt::Result {
6096                        write!(formatter, "expected one of: {:?}", & FIELDS)
6097                    }
6098                    #[allow(unused_variables)]
6099                    fn visit_str<E>(
6100                        self,
6101                        value: &str,
6102                    ) -> std::result::Result<GeneratedField, E>
6103                    where
6104                        E: serde::de::Error,
6105                    {
6106                        match value {
6107                            "redirectUri" | "redirect_uri" => {
6108                                Ok(GeneratedField::RedirectUri)
6109                            }
6110                            _ => Ok(GeneratedField::__SkipField__),
6111                        }
6112                    }
6113                }
6114                deserializer.deserialize_identifier(GeneratedVisitor)
6115            }
6116        }
6117        struct GeneratedVisitor;
6118        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
6119            type Value = StartPaymentMethodSetupResponse;
6120            fn expecting(
6121                &self,
6122                formatter: &mut std::fmt::Formatter<'_>,
6123            ) -> std::fmt::Result {
6124                formatter
6125                    .write_str(
6126                        "struct origincloud.billing.v1beta1.StartPaymentMethodSetupResponse",
6127                    )
6128            }
6129            fn visit_map<V>(
6130                self,
6131                mut map_: V,
6132            ) -> std::result::Result<StartPaymentMethodSetupResponse, V::Error>
6133            where
6134                V: serde::de::MapAccess<'de>,
6135            {
6136                let mut redirect_uri__ = None;
6137                while let Some(k) = map_.next_key()? {
6138                    match k {
6139                        GeneratedField::RedirectUri => {
6140                            if redirect_uri__.is_some() {
6141                                return Err(
6142                                    serde::de::Error::duplicate_field("redirectUri"),
6143                                );
6144                            }
6145                            redirect_uri__ = Some(map_.next_value()?);
6146                        }
6147                        GeneratedField::__SkipField__ => {
6148                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
6149                        }
6150                    }
6151                }
6152                Ok(StartPaymentMethodSetupResponse {
6153                    redirect_uri: redirect_uri__.unwrap_or_default(),
6154                })
6155            }
6156        }
6157        deserializer
6158            .deserialize_struct(
6159                "origincloud.billing.v1beta1.StartPaymentMethodSetupResponse",
6160                FIELDS,
6161                GeneratedVisitor,
6162            )
6163    }
6164}
6165impl serde::Serialize for UpdateBillingAccountRequest {
6166    #[allow(deprecated)]
6167    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
6168    where
6169        S: serde::Serializer,
6170    {
6171        use serde::ser::SerializeStruct;
6172        let mut len = 0;
6173        if self.billing_account.is_some() {
6174            len += 1;
6175        }
6176        if self.update_mask.is_some() {
6177            len += 1;
6178        }
6179        let mut struct_ser = serializer
6180            .serialize_struct(
6181                "origincloud.billing.v1beta1.UpdateBillingAccountRequest",
6182                len,
6183            )?;
6184        if let Some(v) = self.billing_account.as_ref() {
6185            struct_ser.serialize_field("billingAccount", v)?;
6186        }
6187        if let Some(v) = self.update_mask.as_ref() {
6188            struct_ser.serialize_field("updateMask", v)?;
6189        }
6190        struct_ser.end()
6191    }
6192}
6193impl<'de> serde::Deserialize<'de> for UpdateBillingAccountRequest {
6194    #[allow(deprecated)]
6195    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6196    where
6197        D: serde::Deserializer<'de>,
6198    {
6199        const FIELDS: &[&str] = &[
6200            "billing_account",
6201            "billingAccount",
6202            "update_mask",
6203            "updateMask",
6204        ];
6205        #[allow(clippy::enum_variant_names)]
6206        enum GeneratedField {
6207            BillingAccount,
6208            UpdateMask,
6209            __SkipField__,
6210        }
6211        impl<'de> serde::Deserialize<'de> for GeneratedField {
6212            fn deserialize<D>(
6213                deserializer: D,
6214            ) -> std::result::Result<GeneratedField, D::Error>
6215            where
6216                D: serde::Deserializer<'de>,
6217            {
6218                struct GeneratedVisitor;
6219                impl serde::de::Visitor<'_> for GeneratedVisitor {
6220                    type Value = GeneratedField;
6221                    fn expecting(
6222                        &self,
6223                        formatter: &mut std::fmt::Formatter<'_>,
6224                    ) -> std::fmt::Result {
6225                        write!(formatter, "expected one of: {:?}", & FIELDS)
6226                    }
6227                    #[allow(unused_variables)]
6228                    fn visit_str<E>(
6229                        self,
6230                        value: &str,
6231                    ) -> std::result::Result<GeneratedField, E>
6232                    where
6233                        E: serde::de::Error,
6234                    {
6235                        match value {
6236                            "billingAccount" | "billing_account" => {
6237                                Ok(GeneratedField::BillingAccount)
6238                            }
6239                            "updateMask" | "update_mask" => {
6240                                Ok(GeneratedField::UpdateMask)
6241                            }
6242                            _ => Ok(GeneratedField::__SkipField__),
6243                        }
6244                    }
6245                }
6246                deserializer.deserialize_identifier(GeneratedVisitor)
6247            }
6248        }
6249        struct GeneratedVisitor;
6250        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
6251            type Value = UpdateBillingAccountRequest;
6252            fn expecting(
6253                &self,
6254                formatter: &mut std::fmt::Formatter<'_>,
6255            ) -> std::fmt::Result {
6256                formatter
6257                    .write_str(
6258                        "struct origincloud.billing.v1beta1.UpdateBillingAccountRequest",
6259                    )
6260            }
6261            fn visit_map<V>(
6262                self,
6263                mut map_: V,
6264            ) -> std::result::Result<UpdateBillingAccountRequest, V::Error>
6265            where
6266                V: serde::de::MapAccess<'de>,
6267            {
6268                let mut billing_account__ = None;
6269                let mut update_mask__ = None;
6270                while let Some(k) = map_.next_key()? {
6271                    match k {
6272                        GeneratedField::BillingAccount => {
6273                            if billing_account__.is_some() {
6274                                return Err(
6275                                    serde::de::Error::duplicate_field("billingAccount"),
6276                                );
6277                            }
6278                            billing_account__ = map_.next_value()?;
6279                        }
6280                        GeneratedField::UpdateMask => {
6281                            if update_mask__.is_some() {
6282                                return Err(serde::de::Error::duplicate_field("updateMask"));
6283                            }
6284                            update_mask__ = map_.next_value()?;
6285                        }
6286                        GeneratedField::__SkipField__ => {
6287                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
6288                        }
6289                    }
6290                }
6291                Ok(UpdateBillingAccountRequest {
6292                    billing_account: billing_account__,
6293                    update_mask: update_mask__,
6294                })
6295            }
6296        }
6297        deserializer
6298            .deserialize_struct(
6299                "origincloud.billing.v1beta1.UpdateBillingAccountRequest",
6300                FIELDS,
6301                GeneratedVisitor,
6302            )
6303    }
6304}
6305impl serde::Serialize for UpdateProjectBillingInfoRequest {
6306    #[allow(deprecated)]
6307    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
6308    where
6309        S: serde::Serializer,
6310    {
6311        use serde::ser::SerializeStruct;
6312        let mut len = 0;
6313        if self.project_billing_info.is_some() {
6314            len += 1;
6315        }
6316        if self.update_mask.is_some() {
6317            len += 1;
6318        }
6319        let mut struct_ser = serializer
6320            .serialize_struct(
6321                "origincloud.billing.v1beta1.UpdateProjectBillingInfoRequest",
6322                len,
6323            )?;
6324        if let Some(v) = self.project_billing_info.as_ref() {
6325            struct_ser.serialize_field("projectBillingInfo", v)?;
6326        }
6327        if let Some(v) = self.update_mask.as_ref() {
6328            struct_ser.serialize_field("updateMask", v)?;
6329        }
6330        struct_ser.end()
6331    }
6332}
6333impl<'de> serde::Deserialize<'de> for UpdateProjectBillingInfoRequest {
6334    #[allow(deprecated)]
6335    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6336    where
6337        D: serde::Deserializer<'de>,
6338    {
6339        const FIELDS: &[&str] = &[
6340            "project_billing_info",
6341            "projectBillingInfo",
6342            "update_mask",
6343            "updateMask",
6344        ];
6345        #[allow(clippy::enum_variant_names)]
6346        enum GeneratedField {
6347            ProjectBillingInfo,
6348            UpdateMask,
6349            __SkipField__,
6350        }
6351        impl<'de> serde::Deserialize<'de> for GeneratedField {
6352            fn deserialize<D>(
6353                deserializer: D,
6354            ) -> std::result::Result<GeneratedField, D::Error>
6355            where
6356                D: serde::Deserializer<'de>,
6357            {
6358                struct GeneratedVisitor;
6359                impl serde::de::Visitor<'_> for GeneratedVisitor {
6360                    type Value = GeneratedField;
6361                    fn expecting(
6362                        &self,
6363                        formatter: &mut std::fmt::Formatter<'_>,
6364                    ) -> std::fmt::Result {
6365                        write!(formatter, "expected one of: {:?}", & FIELDS)
6366                    }
6367                    #[allow(unused_variables)]
6368                    fn visit_str<E>(
6369                        self,
6370                        value: &str,
6371                    ) -> std::result::Result<GeneratedField, E>
6372                    where
6373                        E: serde::de::Error,
6374                    {
6375                        match value {
6376                            "projectBillingInfo" | "project_billing_info" => {
6377                                Ok(GeneratedField::ProjectBillingInfo)
6378                            }
6379                            "updateMask" | "update_mask" => {
6380                                Ok(GeneratedField::UpdateMask)
6381                            }
6382                            _ => Ok(GeneratedField::__SkipField__),
6383                        }
6384                    }
6385                }
6386                deserializer.deserialize_identifier(GeneratedVisitor)
6387            }
6388        }
6389        struct GeneratedVisitor;
6390        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
6391            type Value = UpdateProjectBillingInfoRequest;
6392            fn expecting(
6393                &self,
6394                formatter: &mut std::fmt::Formatter<'_>,
6395            ) -> std::fmt::Result {
6396                formatter
6397                    .write_str(
6398                        "struct origincloud.billing.v1beta1.UpdateProjectBillingInfoRequest",
6399                    )
6400            }
6401            fn visit_map<V>(
6402                self,
6403                mut map_: V,
6404            ) -> std::result::Result<UpdateProjectBillingInfoRequest, V::Error>
6405            where
6406                V: serde::de::MapAccess<'de>,
6407            {
6408                let mut project_billing_info__ = None;
6409                let mut update_mask__ = None;
6410                while let Some(k) = map_.next_key()? {
6411                    match k {
6412                        GeneratedField::ProjectBillingInfo => {
6413                            if project_billing_info__.is_some() {
6414                                return Err(
6415                                    serde::de::Error::duplicate_field("projectBillingInfo"),
6416                                );
6417                            }
6418                            project_billing_info__ = map_.next_value()?;
6419                        }
6420                        GeneratedField::UpdateMask => {
6421                            if update_mask__.is_some() {
6422                                return Err(serde::de::Error::duplicate_field("updateMask"));
6423                            }
6424                            update_mask__ = map_.next_value()?;
6425                        }
6426                        GeneratedField::__SkipField__ => {
6427                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
6428                        }
6429                    }
6430                }
6431                Ok(UpdateProjectBillingInfoRequest {
6432                    project_billing_info: project_billing_info__,
6433                    update_mask: update_mask__,
6434                })
6435            }
6436        }
6437        deserializer
6438            .deserialize_struct(
6439                "origincloud.billing.v1beta1.UpdateProjectBillingInfoRequest",
6440                FIELDS,
6441                GeneratedVisitor,
6442            )
6443    }
6444}
6445impl serde::Serialize for UpdateSpendLimitRequest {
6446    #[allow(deprecated)]
6447    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
6448    where
6449        S: serde::Serializer,
6450    {
6451        use serde::ser::SerializeStruct;
6452        let mut len = 0;
6453        if self.spend_limit.is_some() {
6454            len += 1;
6455        }
6456        if self.update_mask.is_some() {
6457            len += 1;
6458        }
6459        let mut struct_ser = serializer
6460            .serialize_struct(
6461                "origincloud.billing.v1beta1.UpdateSpendLimitRequest",
6462                len,
6463            )?;
6464        if let Some(v) = self.spend_limit.as_ref() {
6465            struct_ser.serialize_field("spendLimit", v)?;
6466        }
6467        if let Some(v) = self.update_mask.as_ref() {
6468            struct_ser.serialize_field("updateMask", v)?;
6469        }
6470        struct_ser.end()
6471    }
6472}
6473impl<'de> serde::Deserialize<'de> for UpdateSpendLimitRequest {
6474    #[allow(deprecated)]
6475    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6476    where
6477        D: serde::Deserializer<'de>,
6478    {
6479        const FIELDS: &[&str] = &[
6480            "spend_limit",
6481            "spendLimit",
6482            "update_mask",
6483            "updateMask",
6484        ];
6485        #[allow(clippy::enum_variant_names)]
6486        enum GeneratedField {
6487            SpendLimit,
6488            UpdateMask,
6489            __SkipField__,
6490        }
6491        impl<'de> serde::Deserialize<'de> for GeneratedField {
6492            fn deserialize<D>(
6493                deserializer: D,
6494            ) -> std::result::Result<GeneratedField, D::Error>
6495            where
6496                D: serde::Deserializer<'de>,
6497            {
6498                struct GeneratedVisitor;
6499                impl serde::de::Visitor<'_> for GeneratedVisitor {
6500                    type Value = GeneratedField;
6501                    fn expecting(
6502                        &self,
6503                        formatter: &mut std::fmt::Formatter<'_>,
6504                    ) -> std::fmt::Result {
6505                        write!(formatter, "expected one of: {:?}", & FIELDS)
6506                    }
6507                    #[allow(unused_variables)]
6508                    fn visit_str<E>(
6509                        self,
6510                        value: &str,
6511                    ) -> std::result::Result<GeneratedField, E>
6512                    where
6513                        E: serde::de::Error,
6514                    {
6515                        match value {
6516                            "spendLimit" | "spend_limit" => {
6517                                Ok(GeneratedField::SpendLimit)
6518                            }
6519                            "updateMask" | "update_mask" => {
6520                                Ok(GeneratedField::UpdateMask)
6521                            }
6522                            _ => Ok(GeneratedField::__SkipField__),
6523                        }
6524                    }
6525                }
6526                deserializer.deserialize_identifier(GeneratedVisitor)
6527            }
6528        }
6529        struct GeneratedVisitor;
6530        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
6531            type Value = UpdateSpendLimitRequest;
6532            fn expecting(
6533                &self,
6534                formatter: &mut std::fmt::Formatter<'_>,
6535            ) -> std::fmt::Result {
6536                formatter
6537                    .write_str(
6538                        "struct origincloud.billing.v1beta1.UpdateSpendLimitRequest",
6539                    )
6540            }
6541            fn visit_map<V>(
6542                self,
6543                mut map_: V,
6544            ) -> std::result::Result<UpdateSpendLimitRequest, V::Error>
6545            where
6546                V: serde::de::MapAccess<'de>,
6547            {
6548                let mut spend_limit__ = None;
6549                let mut update_mask__ = None;
6550                while let Some(k) = map_.next_key()? {
6551                    match k {
6552                        GeneratedField::SpendLimit => {
6553                            if spend_limit__.is_some() {
6554                                return Err(serde::de::Error::duplicate_field("spendLimit"));
6555                            }
6556                            spend_limit__ = map_.next_value()?;
6557                        }
6558                        GeneratedField::UpdateMask => {
6559                            if update_mask__.is_some() {
6560                                return Err(serde::de::Error::duplicate_field("updateMask"));
6561                            }
6562                            update_mask__ = map_.next_value()?;
6563                        }
6564                        GeneratedField::__SkipField__ => {
6565                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
6566                        }
6567                    }
6568                }
6569                Ok(UpdateSpendLimitRequest {
6570                    spend_limit: spend_limit__,
6571                    update_mask: update_mask__,
6572                })
6573            }
6574        }
6575        deserializer
6576            .deserialize_struct(
6577                "origincloud.billing.v1beta1.UpdateSpendLimitRequest",
6578                FIELDS,
6579                GeneratedVisitor,
6580            )
6581    }
6582}
6583impl serde::Serialize for UsageRecord {
6584    #[allow(deprecated)]
6585    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
6586    where
6587        S: serde::Serializer,
6588    {
6589        use serde::ser::SerializeStruct;
6590        let mut len = 0;
6591        if !self.resource_kind.is_empty() {
6592            len += 1;
6593        }
6594        if !self.resource_id.is_empty() {
6595            len += 1;
6596        }
6597        if !self.metric.is_empty() {
6598            len += 1;
6599        }
6600        if !self.product_key.is_empty() {
6601            len += 1;
6602        }
6603        if !self.quantity.is_empty() {
6604            len += 1;
6605        }
6606        if self.start_time.is_some() {
6607            len += 1;
6608        }
6609        if self.end_time.is_some() {
6610            len += 1;
6611        }
6612        if !self.billing_account.is_empty() {
6613            len += 1;
6614        }
6615        let mut struct_ser = serializer
6616            .serialize_struct("origincloud.billing.v1beta1.UsageRecord", len)?;
6617        if !self.resource_kind.is_empty() {
6618            struct_ser.serialize_field("resourceKind", &self.resource_kind)?;
6619        }
6620        if !self.resource_id.is_empty() {
6621            struct_ser.serialize_field("resourceId", &self.resource_id)?;
6622        }
6623        if !self.metric.is_empty() {
6624            struct_ser.serialize_field("metric", &self.metric)?;
6625        }
6626        if !self.product_key.is_empty() {
6627            struct_ser.serialize_field("productKey", &self.product_key)?;
6628        }
6629        if !self.quantity.is_empty() {
6630            struct_ser.serialize_field("quantity", &self.quantity)?;
6631        }
6632        if let Some(v) = self.start_time.as_ref() {
6633            struct_ser.serialize_field("startTime", v)?;
6634        }
6635        if let Some(v) = self.end_time.as_ref() {
6636            struct_ser.serialize_field("endTime", v)?;
6637        }
6638        if !self.billing_account.is_empty() {
6639            struct_ser.serialize_field("billingAccount", &self.billing_account)?;
6640        }
6641        struct_ser.end()
6642    }
6643}
6644impl<'de> serde::Deserialize<'de> for UsageRecord {
6645    #[allow(deprecated)]
6646    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
6647    where
6648        D: serde::Deserializer<'de>,
6649    {
6650        const FIELDS: &[&str] = &[
6651            "resource_kind",
6652            "resourceKind",
6653            "resource_id",
6654            "resourceId",
6655            "metric",
6656            "product_key",
6657            "productKey",
6658            "quantity",
6659            "start_time",
6660            "startTime",
6661            "end_time",
6662            "endTime",
6663            "billing_account",
6664            "billingAccount",
6665        ];
6666        #[allow(clippy::enum_variant_names)]
6667        enum GeneratedField {
6668            ResourceKind,
6669            ResourceId,
6670            Metric,
6671            ProductKey,
6672            Quantity,
6673            StartTime,
6674            EndTime,
6675            BillingAccount,
6676            __SkipField__,
6677        }
6678        impl<'de> serde::Deserialize<'de> for GeneratedField {
6679            fn deserialize<D>(
6680                deserializer: D,
6681            ) -> std::result::Result<GeneratedField, D::Error>
6682            where
6683                D: serde::Deserializer<'de>,
6684            {
6685                struct GeneratedVisitor;
6686                impl serde::de::Visitor<'_> for GeneratedVisitor {
6687                    type Value = GeneratedField;
6688                    fn expecting(
6689                        &self,
6690                        formatter: &mut std::fmt::Formatter<'_>,
6691                    ) -> std::fmt::Result {
6692                        write!(formatter, "expected one of: {:?}", & FIELDS)
6693                    }
6694                    #[allow(unused_variables)]
6695                    fn visit_str<E>(
6696                        self,
6697                        value: &str,
6698                    ) -> std::result::Result<GeneratedField, E>
6699                    where
6700                        E: serde::de::Error,
6701                    {
6702                        match value {
6703                            "resourceKind" | "resource_kind" => {
6704                                Ok(GeneratedField::ResourceKind)
6705                            }
6706                            "resourceId" | "resource_id" => {
6707                                Ok(GeneratedField::ResourceId)
6708                            }
6709                            "metric" => Ok(GeneratedField::Metric),
6710                            "productKey" | "product_key" => {
6711                                Ok(GeneratedField::ProductKey)
6712                            }
6713                            "quantity" => Ok(GeneratedField::Quantity),
6714                            "startTime" | "start_time" => Ok(GeneratedField::StartTime),
6715                            "endTime" | "end_time" => Ok(GeneratedField::EndTime),
6716                            "billingAccount" | "billing_account" => {
6717                                Ok(GeneratedField::BillingAccount)
6718                            }
6719                            _ => Ok(GeneratedField::__SkipField__),
6720                        }
6721                    }
6722                }
6723                deserializer.deserialize_identifier(GeneratedVisitor)
6724            }
6725        }
6726        struct GeneratedVisitor;
6727        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
6728            type Value = UsageRecord;
6729            fn expecting(
6730                &self,
6731                formatter: &mut std::fmt::Formatter<'_>,
6732            ) -> std::fmt::Result {
6733                formatter.write_str("struct origincloud.billing.v1beta1.UsageRecord")
6734            }
6735            fn visit_map<V>(
6736                self,
6737                mut map_: V,
6738            ) -> std::result::Result<UsageRecord, V::Error>
6739            where
6740                V: serde::de::MapAccess<'de>,
6741            {
6742                let mut resource_kind__ = None;
6743                let mut resource_id__ = None;
6744                let mut metric__ = None;
6745                let mut product_key__ = None;
6746                let mut quantity__ = None;
6747                let mut start_time__ = None;
6748                let mut end_time__ = None;
6749                let mut billing_account__ = None;
6750                while let Some(k) = map_.next_key()? {
6751                    match k {
6752                        GeneratedField::ResourceKind => {
6753                            if resource_kind__.is_some() {
6754                                return Err(
6755                                    serde::de::Error::duplicate_field("resourceKind"),
6756                                );
6757                            }
6758                            resource_kind__ = Some(map_.next_value()?);
6759                        }
6760                        GeneratedField::ResourceId => {
6761                            if resource_id__.is_some() {
6762                                return Err(serde::de::Error::duplicate_field("resourceId"));
6763                            }
6764                            resource_id__ = Some(map_.next_value()?);
6765                        }
6766                        GeneratedField::Metric => {
6767                            if metric__.is_some() {
6768                                return Err(serde::de::Error::duplicate_field("metric"));
6769                            }
6770                            metric__ = Some(map_.next_value()?);
6771                        }
6772                        GeneratedField::ProductKey => {
6773                            if product_key__.is_some() {
6774                                return Err(serde::de::Error::duplicate_field("productKey"));
6775                            }
6776                            product_key__ = Some(map_.next_value()?);
6777                        }
6778                        GeneratedField::Quantity => {
6779                            if quantity__.is_some() {
6780                                return Err(serde::de::Error::duplicate_field("quantity"));
6781                            }
6782                            quantity__ = Some(map_.next_value()?);
6783                        }
6784                        GeneratedField::StartTime => {
6785                            if start_time__.is_some() {
6786                                return Err(serde::de::Error::duplicate_field("startTime"));
6787                            }
6788                            start_time__ = map_.next_value()?;
6789                        }
6790                        GeneratedField::EndTime => {
6791                            if end_time__.is_some() {
6792                                return Err(serde::de::Error::duplicate_field("endTime"));
6793                            }
6794                            end_time__ = map_.next_value()?;
6795                        }
6796                        GeneratedField::BillingAccount => {
6797                            if billing_account__.is_some() {
6798                                return Err(
6799                                    serde::de::Error::duplicate_field("billingAccount"),
6800                                );
6801                            }
6802                            billing_account__ = Some(map_.next_value()?);
6803                        }
6804                        GeneratedField::__SkipField__ => {
6805                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
6806                        }
6807                    }
6808                }
6809                Ok(UsageRecord {
6810                    resource_kind: resource_kind__.unwrap_or_default(),
6811                    resource_id: resource_id__.unwrap_or_default(),
6812                    metric: metric__.unwrap_or_default(),
6813                    product_key: product_key__.unwrap_or_default(),
6814                    quantity: quantity__.unwrap_or_default(),
6815                    start_time: start_time__,
6816                    end_time: end_time__,
6817                    billing_account: billing_account__.unwrap_or_default(),
6818                })
6819            }
6820        }
6821        deserializer
6822            .deserialize_struct(
6823                "origincloud.billing.v1beta1.UsageRecord",
6824                FIELDS,
6825                GeneratedVisitor,
6826            )
6827    }
6828}
6829/// Calls `BillingAccountService`.
6830///
6831/// Billing accounts, which project each one pays for, and how they are paid.
6832#[derive(Clone, Debug)]
6833pub struct BillingAccountClient {
6834    service: ::origincloud_core::Service,
6835}
6836impl BillingAccountClient {
6837    /// Returns a client of `BillingAccountService` that sends its calls through `client`.
6838    pub fn new(client: &::origincloud_core::Client) -> Self {
6839        Self {
6840            service: client.service("billing", false),
6841        }
6842    }
6843    /// The endpoint the client sends its calls to, which also serves the operations its methods answer with.
6844    pub fn service(&self) -> &::origincloud_core::Service {
6845        &self.service
6846    }
6847    /// Returns a billing account. Needs `admin.billing_account.get` on the
6848    /// organization.
6849    pub async fn get_billing_account(
6850        &self,
6851        request: GetBillingAccountRequest,
6852    ) -> ::core::result::Result<BillingAccount, ::origincloud_core::Error> {
6853        let p0 = ::origincloud_core::path_value(
6854            "name",
6855            &request.name,
6856            "organizations/*/billingAccounts/*",
6857        )?;
6858        let query = ::origincloud_core::query(&request, &["name"])?;
6859        let call = ::origincloud_core::Request::new(
6860                ::origincloud_core::Method::GET,
6861                format!("/v1beta1/{p0}"),
6862            )
6863            .with_query(query)
6864            .idempotent();
6865        self.service.call(call).await
6866    }
6867    /// Lists an organization's billing accounts, oldest first. Needs
6868    /// `admin.billing_account.list` on the organization.
6869    pub async fn list_billing_accounts(
6870        &self,
6871        request: ListBillingAccountsRequest,
6872    ) -> ::core::result::Result<ListBillingAccountsResponse, ::origincloud_core::Error> {
6873        let p0 = ::origincloud_core::path_value(
6874            "parent",
6875            &request.parent,
6876            "organizations/*",
6877        )?;
6878        let query = ::origincloud_core::query(&request, &["parent"])?;
6879        let call = ::origincloud_core::Request::new(
6880                ::origincloud_core::Method::GET,
6881                format!("/v1beta1/{p0}/billingAccounts"),
6882            )
6883            .with_query(query)
6884            .idempotent();
6885        self.service.call(call).await
6886    }
6887    /// 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.
6888    pub fn all_billing_accounts(
6889        &self,
6890        request: ListBillingAccountsRequest,
6891    ) -> ::origincloud_core::Pages<BillingAccount> {
6892        let client = self.clone();
6893        ::origincloud_core::Pages::new(
6894            request,
6895            move |request: ListBillingAccountsRequest| {
6896                let client = client.clone();
6897                async move {
6898                    let page = client.list_billing_accounts(request).await?;
6899                    Ok((page.billing_accounts, page.next_page_token))
6900                }
6901            },
6902            |request: &mut ListBillingAccountsRequest, token: ::std::string::String| {
6903                request.page_token = token;
6904            },
6905        )
6906    }
6907    /// Creates a billing account with its profile: `display_name`,
6908    /// `billing_address`, `invoice_email` and `contact_person` are required,
6909    /// and `vat_id` too for a billing address outside Germany. The account
6910    /// has no payment method yet: until one is verified, the projects linked
6911    /// to it can't create billable resources. Creating it grants nobody a
6912    /// role: whoever can create billing accounts can use it. Needs
6913    /// `admin.billing_account.create` on the organization.
6914    pub async fn create_billing_account(
6915        &self,
6916        mut request: CreateBillingAccountRequest,
6917    ) -> ::core::result::Result<BillingAccount, ::origincloud_core::Error> {
6918        if request.request_id.is_empty() {
6919            request.request_id = ::origincloud_core::new_request_id();
6920        }
6921        let p0 = ::origincloud_core::path_value(
6922            "parent",
6923            &request.parent,
6924            "organizations/*",
6925        )?;
6926        let body = ::origincloud_core::json_body(
6927            request
6928                .billing_account
6929                .as_ref()
6930                .unwrap_or(&::core::default::Default::default()),
6931        )?;
6932        let query = ::origincloud_core::query(&request, &["parent", "billingAccount"])?;
6933        let call = ::origincloud_core::Request::new(
6934                ::origincloud_core::Method::POST,
6935                format!("/v1beta1/{p0}/billingAccounts"),
6936            )
6937            .with_body(body)
6938            .with_query(query)
6939            .idempotent();
6940        self.service.call(call).await
6941    }
6942    /// Changes a billing account's `display_name` or its profile. The profile
6943    /// fields named in `update_mask` are replaced and the others kept; once
6944    /// the update is applied, the account must have a whole profile
6945    /// (`billing_address`, `invoice_email`, `contact_person`, and `vat_id`
6946    /// for a billing address outside Germany), or the update is refused. Needs
6947    /// `admin.billing_account.update` on the organization.
6948    pub async fn update_billing_account(
6949        &self,
6950        request: UpdateBillingAccountRequest,
6951    ) -> ::core::result::Result<BillingAccount, ::origincloud_core::Error> {
6952        let p0 = ::origincloud_core::path_value(
6953            "billingAccount.name",
6954            request.billing_account.as_ref().map_or("", |m| m.name.as_str()),
6955            "organizations/*/billingAccounts/*",
6956        )?;
6957        let body = ::origincloud_core::json_body(
6958            request
6959                .billing_account
6960                .as_ref()
6961                .unwrap_or(&::core::default::Default::default()),
6962        )?;
6963        let query = ::origincloud_core::query(
6964            &request,
6965            &["billingAccount.name", "billingAccount"],
6966        )?;
6967        let call = ::origincloud_core::Request::new(
6968                ::origincloud_core::Method::PATCH,
6969                format!("/v1beta1/{p0}"),
6970            )
6971            .with_body(body)
6972            .with_query(query);
6973        self.service.call(call).await
6974    }
6975    /// Deletes a billing account. Refused as a `CONFLICT` for the
6976    /// organization's default billing account, while a project is linked to
6977    /// the account (link it to another account first), and while the account
6978    /// has a spend limit (remove it first). Needs
6979    /// `admin.billing_account.delete` on the organization.
6980    pub async fn delete_billing_account(
6981        &self,
6982        request: DeleteBillingAccountRequest,
6983    ) -> ::core::result::Result<
6984        ::origincloud_core::protobuf::Empty,
6985        ::origincloud_core::Error,
6986    > {
6987        let p0 = ::origincloud_core::path_value(
6988            "name",
6989            &request.name,
6990            "organizations/*/billingAccounts/*",
6991        )?;
6992        let query = ::origincloud_core::query(&request, &["name"])?;
6993        let call = ::origincloud_core::Request::new(
6994                ::origincloud_core::Method::DELETE,
6995                format!("/v1beta1/{p0}"),
6996            )
6997            .with_query(query);
6998        self.service.call(call).await
6999    }
7000    /// Starts adding a payment method to a billing account, and returns the
7001    /// payment provider's page to open in a browser: the payment details are
7002    /// entered there and never pass through this API. Once that page is done,
7003    /// call ConfirmPaymentMethodSetup. Starting again replaces a setup that
7004    /// wasn't confirmed. Refused as `INVALID_ARGUMENT` for an account whose
7005    /// `payment_method.state` is `payment_method::State::NotRequired`. Needs
7006    /// `admin.billing_account.update` on the organization.
7007    pub async fn start_payment_method_setup(
7008        &self,
7009        request: StartPaymentMethodSetupRequest,
7010    ) -> ::core::result::Result<
7011        StartPaymentMethodSetupResponse,
7012        ::origincloud_core::Error,
7013    > {
7014        let p0 = ::origincloud_core::path_value(
7015            "name",
7016            &request.name,
7017            "organizations/*/billingAccounts/*",
7018        )?;
7019        let body = ::origincloud_core::json_body(&request)?;
7020        let call = ::origincloud_core::Request::new(
7021                ::origincloud_core::Method::POST,
7022                format!("/v1beta1/{p0}:startPaymentMethodSetup"),
7023            )
7024            .with_body(body);
7025        self.service.call(call).await
7026    }
7027    /// Completes the setup StartPaymentMethodSetup started, once its page is
7028    /// done: the payment provider is asked whether it finished, and only a
7029    /// finished setup is recorded. The account's `payment_method` is then
7030    /// `payment_method::State::Verified`, replacing any earlier one, and its projects can create
7031    /// billable resources. An unfinished or abandoned setup is refused as
7032    /// `INVALID_ARGUMENT` and changes nothing: finish the page, or start
7033    /// again. So is an account with no setup started, which includes a
7034    /// repeat of a confirmation that succeeded: read the account to see
7035    /// whether it did. Needs `admin.billing_account.update` on the
7036    /// organization.
7037    pub async fn confirm_payment_method_setup(
7038        &self,
7039        request: ConfirmPaymentMethodSetupRequest,
7040    ) -> ::core::result::Result<BillingAccount, ::origincloud_core::Error> {
7041        let p0 = ::origincloud_core::path_value(
7042            "name",
7043            &request.name,
7044            "organizations/*/billingAccounts/*",
7045        )?;
7046        let body = ::origincloud_core::json_body(&request)?;
7047        let call = ::origincloud_core::Request::new(
7048                ::origincloud_core::Method::POST,
7049                format!("/v1beta1/{p0}:confirmPaymentMethodSetup"),
7050            )
7051            .with_body(body);
7052        self.service.call(call).await
7053    }
7054    /// Returns which billing account pays for a project. Needs
7055    /// `admin.project.get` on the project.
7056    pub async fn get_project_billing_info(
7057        &self,
7058        request: GetProjectBillingInfoRequest,
7059    ) -> ::core::result::Result<ProjectBillingInfo, ::origincloud_core::Error> {
7060        let p0 = ::origincloud_core::path_value(
7061            "name",
7062            &request.name,
7063            "projects/*/billingInfo",
7064        )?;
7065        let query = ::origincloud_core::query(&request, &["name"])?;
7066        let call = ::origincloud_core::Request::new(
7067                ::origincloud_core::Method::GET,
7068                format!("/v1beta1/{p0}"),
7069            )
7070            .with_query(query)
7071            .idempotent();
7072        self.service.call(call).await
7073    }
7074    /// Links a project to another billing account of its organization, which
7075    /// pays for its usage from then on; what it used before stays charged to
7076    /// the account it was linked to then. A project is always linked to one
7077    /// account, so there is nothing to unlink. Needs `admin.project.attach`
7078    /// on the project, which is separate from access to billing accounts.
7079    pub async fn update_project_billing_info(
7080        &self,
7081        request: UpdateProjectBillingInfoRequest,
7082    ) -> ::core::result::Result<ProjectBillingInfo, ::origincloud_core::Error> {
7083        let p0 = ::origincloud_core::path_value(
7084            "projectBillingInfo.name",
7085            request.project_billing_info.as_ref().map_or("", |m| m.name.as_str()),
7086            "projects/*/billingInfo",
7087        )?;
7088        let body = ::origincloud_core::json_body(
7089            request
7090                .project_billing_info
7091                .as_ref()
7092                .unwrap_or(&::core::default::Default::default()),
7093        )?;
7094        let query = ::origincloud_core::query(
7095            &request,
7096            &["projectBillingInfo.name", "projectBillingInfo"],
7097        )?;
7098        let call = ::origincloud_core::Request::new(
7099                ::origincloud_core::Method::PATCH,
7100                format!("/v1beta1/{p0}"),
7101            )
7102            .with_body(body)
7103            .with_query(query);
7104        self.service.call(call).await
7105    }
7106    /// Lists the projects a billing account pays for, oldest first. Needs
7107    /// `admin.billing_account.get` on the organization.
7108    pub async fn list_project_billing_info(
7109        &self,
7110        request: ListProjectBillingInfoRequest,
7111    ) -> ::core::result::Result<
7112        ListProjectBillingInfoResponse,
7113        ::origincloud_core::Error,
7114    > {
7115        let p0 = ::origincloud_core::path_value(
7116            "name",
7117            &request.name,
7118            "organizations/*/billingAccounts/*",
7119        )?;
7120        let query = ::origincloud_core::query(&request, &["name"])?;
7121        let call = ::origincloud_core::Request::new(
7122                ::origincloud_core::Method::GET,
7123                format!("/v1beta1/{p0}/projects"),
7124            )
7125            .with_query(query)
7126            .idempotent();
7127        self.service.call(call).await
7128    }
7129    /// 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.
7130    pub fn all_project_billing_infos(
7131        &self,
7132        request: ListProjectBillingInfoRequest,
7133    ) -> ::origincloud_core::Pages<ProjectBillingInfo> {
7134        let client = self.clone();
7135        ::origincloud_core::Pages::new(
7136            request,
7137            move |request: ListProjectBillingInfoRequest| {
7138                let client = client.clone();
7139                async move {
7140                    let page = client.list_project_billing_info(request).await?;
7141                    Ok((page.project_billing_infos, page.next_page_token))
7142                }
7143            },
7144            |request: &mut ListProjectBillingInfoRequest, token: ::std::string::String| {
7145                request.page_token = token;
7146            },
7147        )
7148    }
7149    /// Returns a country a billing address may be in.
7150    pub async fn get_billing_country(
7151        &self,
7152        request: GetBillingCountryRequest,
7153    ) -> ::core::result::Result<BillingCountry, ::origincloud_core::Error> {
7154        let p0 = ::origincloud_core::path_value(
7155            "name",
7156            &request.name,
7157            "billingCountries/*",
7158        )?;
7159        let query = ::origincloud_core::query(&request, &["name"])?;
7160        let call = ::origincloud_core::Request::new(
7161                ::origincloud_core::Method::GET,
7162                format!("/v1beta1/{p0}"),
7163            )
7164            .with_query(query)
7165            .idempotent();
7166        self.service.call(call).await
7167    }
7168    /// Lists the countries a billing address may be in, in the order a form
7169    /// shows them, and whether each needs a VAT id.
7170    pub async fn list_billing_countries(
7171        &self,
7172        request: ListBillingCountriesRequest,
7173    ) -> ::core::result::Result<
7174        ListBillingCountriesResponse,
7175        ::origincloud_core::Error,
7176    > {
7177        let query = ::origincloud_core::query(&request, &[])?;
7178        let call = ::origincloud_core::Request::new(
7179                ::origincloud_core::Method::GET,
7180                ::std::string::String::from("/v1beta1/billingCountries"),
7181            )
7182            .with_query(query)
7183            .idempotent();
7184        self.service.call(call).await
7185    }
7186    /// 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.
7187    pub fn all_billing_countries(
7188        &self,
7189        request: ListBillingCountriesRequest,
7190    ) -> ::origincloud_core::Pages<BillingCountry> {
7191        let client = self.clone();
7192        ::origincloud_core::Pages::new(
7193            request,
7194            move |request: ListBillingCountriesRequest| {
7195                let client = client.clone();
7196                async move {
7197                    let page = client.list_billing_countries(request).await?;
7198                    Ok((page.billing_countries, page.next_page_token))
7199                }
7200            },
7201            |request: &mut ListBillingCountriesRequest, token: ::std::string::String| {
7202                request.page_token = token;
7203            },
7204        )
7205    }
7206}
7207/// Calls `CostService`.
7208///
7209/// Usage and cost: what a project, an organization or a billing account used
7210/// in a period, and what it costs, as read-only reports.
7211///
7212/// Usage is metered per resource and priced when it is recorded, at the
7213/// price list's rate then, so a later price change never changes a past
7214/// cost. A running resource's usage is recorded at least hourly; the last
7215/// hour can still be missing from a report.
7216#[derive(Clone, Debug)]
7217pub struct CostClient {
7218    service: ::origincloud_core::Service,
7219}
7220impl CostClient {
7221    /// Returns a client of `CostService` that sends its calls through `client`.
7222    pub fn new(client: &::origincloud_core::Client) -> Self {
7223        Self {
7224            service: client.service("billing", false),
7225        }
7226    }
7227    /// The endpoint the client sends its calls to, which also serves the operations its methods answer with.
7228    pub fn service(&self) -> &::origincloud_core::Service {
7229        &self.service
7230    }
7231    /// Returns a project's cost in a period, by service and product, in hourly
7232    /// or daily buckets. Needs `admin.usage.list` on the organization.
7233    pub async fn query_project_cost(
7234        &self,
7235        request: QueryProjectCostRequest,
7236    ) -> ::core::result::Result<CostReport, ::origincloud_core::Error> {
7237        let p0 = ::origincloud_core::path_value(
7238            "project",
7239            &request.project,
7240            "projects/*",
7241        )?;
7242        let query = ::origincloud_core::query(&request, &["project"])?;
7243        let call = ::origincloud_core::Request::new(
7244                ::origincloud_core::Method::GET,
7245                format!("/v1beta1/{p0}:queryCost"),
7246            )
7247            .with_query(query)
7248            .idempotent();
7249        self.service.call(call).await
7250    }
7251    /// Returns an organization's cost in a period: every project's together,
7252    /// by service and product, and each project's on its own. Needs
7253    /// `admin.usage.list` on the organization, which reads every project's
7254    /// cost in it.
7255    pub async fn query_organization_cost(
7256        &self,
7257        request: QueryOrganizationCostRequest,
7258    ) -> ::core::result::Result<OrganizationCostReport, ::origincloud_core::Error> {
7259        let p0 = ::origincloud_core::path_value(
7260            "organization",
7261            &request.organization,
7262            "organizations/*",
7263        )?;
7264        let query = ::origincloud_core::query(&request, &["organization"])?;
7265        let call = ::origincloud_core::Request::new(
7266                ::origincloud_core::Method::GET,
7267                format!("/v1beta1/{p0}:queryCost"),
7268            )
7269            .with_query(query)
7270            .idempotent();
7271        self.service.call(call).await
7272    }
7273    /// Returns what was charged to a billing account in a period, by service
7274    /// and product. A project's cost is charged to the account it was linked
7275    /// to when the usage was recorded, so moving a project moves only its
7276    /// later cost. Its spend limit compares the calendar month's total with
7277    /// `limit`. Needs `admin.spend_limit.get` on the organization.
7278    pub async fn query_billing_account_cost(
7279        &self,
7280        request: QueryBillingAccountCostRequest,
7281    ) -> ::core::result::Result<CostReport, ::origincloud_core::Error> {
7282        let p0 = ::origincloud_core::path_value(
7283            "billingAccount",
7284            &request.billing_account,
7285            "organizations/*/billingAccounts/*",
7286        )?;
7287        let query = ::origincloud_core::query(&request, &["billingAccount"])?;
7288        let call = ::origincloud_core::Request::new(
7289                ::origincloud_core::Method::GET,
7290                format!("/v1beta1/{p0}:queryCost"),
7291            )
7292            .with_query(query)
7293            .idempotent();
7294        self.service.call(call).await
7295    }
7296    /// Lists a project's metered usage records that overlap a period, the
7297    /// input its cost is priced from, oldest first. Needs `admin.usage.list`
7298    /// on the organization.
7299    pub async fn query_project_usage(
7300        &self,
7301        request: QueryProjectUsageRequest,
7302    ) -> ::core::result::Result<QueryProjectUsageResponse, ::origincloud_core::Error> {
7303        let p0 = ::origincloud_core::path_value(
7304            "project",
7305            &request.project,
7306            "projects/*",
7307        )?;
7308        let query = ::origincloud_core::query(&request, &["project"])?;
7309        let call = ::origincloud_core::Request::new(
7310                ::origincloud_core::Method::GET,
7311                format!("/v1beta1/{p0}:queryUsage"),
7312            )
7313            .with_query(query)
7314            .idempotent();
7315        self.service.call(call).await
7316    }
7317    /// 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.
7318    pub fn all_usage_records(
7319        &self,
7320        request: QueryProjectUsageRequest,
7321    ) -> ::origincloud_core::Pages<UsageRecord> {
7322        let client = self.clone();
7323        ::origincloud_core::Pages::new(
7324            request,
7325            move |request: QueryProjectUsageRequest| {
7326                let client = client.clone();
7327                async move {
7328                    let page = client.query_project_usage(request).await?;
7329                    Ok((page.usage_records, page.next_page_token))
7330                }
7331            },
7332            |request: &mut QueryProjectUsageRequest, token: ::std::string::String| {
7333                request.page_token = token;
7334            },
7335        )
7336    }
7337}
7338/// Calls `PriceListService`.
7339///
7340/// The public price list: the list price of every billable product, for
7341/// anyone to read, websites included. It needs no access token.
7342///
7343/// Unlike the rest of this API, its path has been `/v1/pricing` since before
7344/// the API was published, and its fields are written in snake case, as
7345/// websites read them.
7346#[derive(Clone, Debug)]
7347pub struct PriceListClient {
7348    service: ::origincloud_core::Service,
7349}
7350impl PriceListClient {
7351    /// Returns a client of `PriceListService` that sends its calls through `client`.
7352    pub fn new(client: &::origincloud_core::Client) -> Self {
7353        Self {
7354            service: client.service("billing", false),
7355        }
7356    }
7357    /// The endpoint the client sends its calls to, which also serves the operations its methods answer with.
7358    pub fn service(&self) -> &::origincloud_core::Service {
7359        &self.service
7360    }
7361    /// Returns the prices in effect now. The answer carries an `ETag`; a
7362    /// request that sends it back in `If-None-Match` is answered
7363    /// `304 Not Modified`, without a body, while the list is unchanged.
7364    pub async fn get_price_list(
7365        &self,
7366        request: GetPriceListRequest,
7367    ) -> ::core::result::Result<PriceList, ::origincloud_core::Error> {
7368        let query = ::origincloud_core::query(&request, &[])?;
7369        let call = ::origincloud_core::Request::new(
7370                ::origincloud_core::Method::GET,
7371                ::std::string::String::from("/v1/pricing"),
7372            )
7373            .with_query(query)
7374            .idempotent();
7375        self.service.call(call).await
7376    }
7377}
7378/// Calls `SpendLimitService`.
7379///
7380/// Spend limits: an amount per calendar month for a billing account, and the
7381/// shares of it at which an alert is emailed. A spend limit only alerts: it
7382/// never stops or refuses anything.
7383///
7384/// Access to spend limits is granted apart from access to billing accounts:
7385/// an organization's owner holds it by default.
7386#[derive(Clone, Debug)]
7387pub struct SpendLimitClient {
7388    service: ::origincloud_core::Service,
7389}
7390impl SpendLimitClient {
7391    /// Returns a client of `SpendLimitService` that sends its calls through `client`.
7392    pub fn new(client: &::origincloud_core::Client) -> Self {
7393        Self {
7394            service: client.service("billing", false),
7395        }
7396    }
7397    /// The endpoint the client sends its calls to, which also serves the operations its methods answer with.
7398    pub fn service(&self) -> &::origincloud_core::Service {
7399        &self.service
7400    }
7401    /// Returns a billing account's spend limit; one that has none has no
7402    /// `limit`. Needs `admin.spend_limit.get` on the organization.
7403    pub async fn get_spend_limit(
7404        &self,
7405        request: GetSpendLimitRequest,
7406    ) -> ::core::result::Result<SpendLimit, ::origincloud_core::Error> {
7407        let p0 = ::origincloud_core::path_value(
7408            "name",
7409            &request.name,
7410            "organizations/*/billingAccounts/*/spendLimit",
7411        )?;
7412        let query = ::origincloud_core::query(&request, &["name"])?;
7413        let call = ::origincloud_core::Request::new(
7414                ::origincloud_core::Method::GET,
7415                format!("/v1beta1/{p0}"),
7416            )
7417            .with_query(query)
7418            .idempotent();
7419        self.service.call(call).await
7420    }
7421    /// Sets or removes a billing account's spend limit. The fields named in
7422    /// `update_mask` are replaced and the others kept. A spend limit left
7423    /// without a `limit` is removed, with its thresholds and recipients. Needs
7424    /// `admin.spend_limit.update` on the organization.
7425    pub async fn update_spend_limit(
7426        &self,
7427        request: UpdateSpendLimitRequest,
7428    ) -> ::core::result::Result<SpendLimit, ::origincloud_core::Error> {
7429        let p0 = ::origincloud_core::path_value(
7430            "spendLimit.name",
7431            request.spend_limit.as_ref().map_or("", |m| m.name.as_str()),
7432            "organizations/*/billingAccounts/*/spendLimit",
7433        )?;
7434        let body = ::origincloud_core::json_body(
7435            request.spend_limit.as_ref().unwrap_or(&::core::default::Default::default()),
7436        )?;
7437        let query = ::origincloud_core::query(
7438            &request,
7439            &["spendLimit.name", "spendLimit"],
7440        )?;
7441        let call = ::origincloud_core::Request::new(
7442                ::origincloud_core::Method::PATCH,
7443                format!("/v1beta1/{p0}"),
7444            )
7445            .with_body(body)
7446            .with_query(query);
7447        self.service.call(call).await
7448    }
7449}