square_ox/objects/
mod.rs

1/*!
2A non-comprehensive list of the Objects used by the
3[Square API](https://developer.squareup.com).
4*/
5
6pub mod enums;
7
8use std::collections::HashMap;
9use serde::{Deserialize, Serialize};
10use square_ox_derive::{Builder};
11use crate::api::orders::Orders;
12use crate::api::terminal::Terminal;
13use crate::builder::{AddField, Buildable};
14use crate::objects::enums::{
15    ActionCancelReason, ApplicationDetailsExternalSquareProduct,
16    BankAccountOwnershipType, BusinessAppointmentSettingsBookingLocationType,
17    BusinessAppointmentSettingsCancellationPolicy,
18    BusinessAppointmentSettingsMaxAppointmentsPerDayLimitType,
19    BusinessBookingProfileBookingPolicy, BusinessBookingProfileCustomerTimezoneChoice,
20    BuyNowPayLaterBrand, CatalogCustomAttributeDefinitionType, CatalogItemProductType,
21    CatalogObjectType, CatalogPricingType, CCVStatus, CheckoutOptionsPaymentType, Currency,
22    CustomerCreationSource, DigitalWalletBrand, DigitalWalletStatus, InventoryAlertType,
23    InventoryChangeType, InventoryState, LocationStatus, LocationType,
24    OrderFulfillmentFulfillmentLineItemApplication, OrderFulfillmentPickupDetailsScheduleType,
25    OrderFulfillmentState, OrderFulfillmentType, OrderLineItemDiscountScope,
26    OrderLineItemDiscountType, OrderLineItemItemType, OrderLineItemTaxScope,
27    OrderLineItemTaxType, OrderServiceChargeCalculationPhase, OrderServiceChargeType,
28    OrderState, PaymentSourceType, PaymentStatus, PaymentType, PaymentVerificationMethod,
29    PaymentVerificationResults, ProcessingFeeType, RefundStatus, RiskEvaluationRiskLevel,
30    SearchOrdersSortField, SortOrder, TenderCardDetailsEntryMethod, TenderCardDetailsStatus,
31    TenderType, TerminalCheckoutStatus
32};
33use crate::response::ResponseError;
34
35/// The Response enum holds the variety of responses that can be returned from a
36/// [Square API](https://developer.squareup.com) call.
37#[derive(Clone, Debug, Serialize, Deserialize)]
38#[serde(rename_all = "snake_case")]
39#[non_exhaustive]
40pub enum Response {
41    // Payments Endpoint Responses
42    Payment(Payment),
43
44    // Orders Endpoint Responses
45    Order(Order),
46    Orders(Vec<Order>),
47    OrderEntries(Vec<OrderEntry>),
48
49    // Locations Endpoint Responses
50    Locations(Vec<Location>),
51
52    // Customer Endpoint Responses
53    Customer(Customer),
54    Customers(Vec<Customer>),
55
56    // Catalog Endpoint Responses
57    Objects(Vec<CatalogObject>),
58    CatalogObject(CatalogObject),
59    Items(Vec<CatalogObject>),
60    MatchedVariationIds(Vec<String>),
61    Limits(CatalogInfoResponseLimits),
62    StandardUnitDescriptionGroup(StandardUnitDescriptionGroup),
63    RelatedObjects(Vec<CatalogObject>),
64
65    // Bookings Endpoint Responses
66    Booking(Booking),
67    Bookings(Vec<Booking>),
68    Availabilities(Vec<Availability>),
69    BusinessBookingProfile(BusinessBookingProfile),
70    TeamMemberBookingProfiles(Vec<TeamMemberBookingProfile>),
71    TeamMemberBookingProfile(TeamMemberBookingProfile),
72
73    // Cards Endpoint Responses
74    Cards(Vec<Card>),
75    Card(Card),
76
77    // Checkout Endpoint Responses
78    Checkout(CheckoutEnum), // Also a possible Terminals Endpoint Response
79    PaymentLinks(Vec<PaymentLink>),
80    PaymentLink(PaymentLink),
81
82    // Inventory Endpoint Responses
83    Counts(Vec<InventoryCount>),
84
85    // Sites Endpoint Responses
86    Sites(Vec<Site>),
87
88    // Terminal Endpoint Responses
89    Checkouts(Vec<TerminalCheckout>),
90}
91
92// Since both the Checkout and Terminal endpoint can return a field tagged with checkout it is
93// necessary to define this return field as an untagged enum
94#[derive(Clone, Debug, Serialize, Deserialize)]
95#[serde(untagged)]
96pub enum CheckoutEnum {
97    Checkout(Checkout),
98    TerminalCheckout(TerminalCheckout),
99}
100
101#[derive(Clone, Debug, Serialize, Deserialize, Default, Builder)]
102pub struct Location {
103    #[serde(default, skip_serializing_if = "Option::is_none")]
104    #[builder_vis("private")]
105    pub id: Option<String>,
106    #[serde(default, skip_serializing_if = "Option::is_none")]
107    pub name: Option<String>,
108    #[serde(default, skip_serializing_if = "Option::is_none")]
109    pub business_email: Option<String>,
110    #[serde(default, skip_serializing_if = "Option::is_none")]
111    pub address: Option<Address>,
112    #[serde(default, skip_serializing_if = "Option::is_none")]
113    pub timezone: Option<String>,
114    #[serde(default, skip_serializing_if = "Option::is_none")]
115    pub capabilities: Option<Vec<String>>,
116    #[serde(default, skip_serializing_if = "Option::is_none")]
117    pub status: Option<LocationStatus>,
118    #[serde(default, skip_serializing_if = "Option::is_none")]
119    pub created_id: Option<String>,
120    #[serde(default, skip_serializing_if = "Option::is_none")]
121    pub coordinates: Option<Coordinates>,
122    #[serde(default, skip_serializing_if = "Option::is_none")]
123    pub country: Option<String>,
124    #[serde(default, skip_serializing_if = "Option::is_none")]
125    #[builder_vis("private")]
126    pub created_at: Option<String>,
127    #[serde(default, skip_serializing_if = "Option::is_none")]
128    pub currency: Option<Currency>,
129    #[serde(default, skip_serializing_if = "Option::is_none")]
130    pub description: Option<String>,
131    #[serde(default, skip_serializing_if = "Option::is_none")]
132    pub facebook_url: Option<String>,
133    #[serde(default, skip_serializing_if = "Option::is_none")]
134    pub full_format_logo_url: Option<String>,
135    #[serde(default, skip_serializing_if = "Option::is_none")]
136    pub logo_url: Option<String>,
137    #[serde(default, skip_serializing_if = "Option::is_none")]
138    pub instagram_username: Option<String>,
139    #[serde(default, skip_serializing_if = "Option::is_none")]
140    pub language_code: Option<String>,
141    #[serde(default, skip_serializing_if = "Option::is_none")]
142    pub mcc: Option<String>,
143    #[serde(default, skip_serializing_if = "Option::is_none")]
144    pub merchant_id: Option<String>,
145    #[serde(default, skip_serializing_if = "Option::is_none")]
146    pub phone_number: Option<String>,
147    #[serde(default, skip_serializing_if = "Option::is_none")]
148    pub pos_background_url: Option<String>,
149    #[serde(default, skip_serializing_if = "Option::is_none")]
150    pub tax_ids: Option<TaxIds>,
151    #[serde(default, skip_serializing_if = "Option::is_none")]
152    pub twitter_username: Option<String>,
153    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
154    pub type_name: Option<LocationType>,
155    #[serde(default, skip_serializing_if = "Option::is_none")]
156    pub business_name: Option<String>,
157    #[serde(default, skip_serializing_if = "Option::is_none")]
158    pub business_hours: Option<BusinessHours>,
159    #[serde(default, skip_serializing_if = "Option::is_none")]
160    pub website_url: Option<String>
161}
162
163#[derive(Clone, Debug, Serialize, Deserialize, Default)]
164pub struct Address {
165    #[serde(default, skip_serializing_if = "Option::is_none")]
166    pub address_line_1: Option<String>,
167    #[serde(default, skip_serializing_if = "Option::is_none")]
168    pub address_line_2: Option<String>,
169    #[serde(default, skip_serializing_if = "Option::is_none")]
170    pub address_line_3: Option<String>,
171    #[serde(default, skip_serializing_if = "Option::is_none")]
172    pub locality: Option<String>,
173    #[serde(default, skip_serializing_if = "Option::is_none")]
174    pub sublocality: Option<String>,
175    #[serde(default, skip_serializing_if = "Option::is_none")]
176    pub administrative_district_level: Option<String>,
177    #[serde(default, skip_serializing_if = "Option::is_none")]
178    pub postal_code: Option<String>,
179    #[serde(default, skip_serializing_if = "Option::is_none")]
180    pub country: Option<String>,
181}
182
183#[derive(Clone, Debug, Serialize, Deserialize, Default)]
184pub struct Coordinates {
185    pub longitude: f64,
186    pub latitude: f64,
187}
188
189#[derive(Clone, Debug, Serialize, Deserialize, Default)]
190pub struct BusinessHours {
191    pub periods: Vec<BusinessHoursPeriod>,
192}
193
194#[derive(Clone, Debug, Serialize, Deserialize, Default)]
195pub struct BusinessHoursPeriod {
196    pub day_of_week: String,
197    pub start_local_time: String,
198    pub end_local_time: String,
199}
200
201#[derive(Clone, Debug, Serialize, Deserialize, Default)]
202pub struct Availability {
203    pub start_at: String,
204    pub location_id: String,
205    pub appointment_segments: Vec<AppointmentSegment>
206}
207
208#[derive(Clone, Debug, Serialize, Deserialize, Default, Builder)]
209pub struct AppointmentSegment {
210    pub duration_minutes: f64,
211    #[builder_into]
212    pub team_member_id: String,
213    #[serde(default, skip_serializing_if = "Option::is_none")]
214    #[builder_into]
215    pub any_team_member_id: Option<String>,
216    #[serde(default, skip_serializing_if = "Option::is_none")]
217    pub intermission_minutes: Option<i32>,
218    #[serde(default, skip_serializing_if = "Option::is_none")]
219    #[builder_into]
220    pub resource_ids: Option<String>,
221    #[builder_into]
222    pub service_variation_id: String,
223    pub service_variation_version: i64,
224}
225
226#[cfg(test)]
227mod test_appointment_segment {
228    use crate::builder::Builder;
229    use super::*;
230
231    #[tokio::test]
232    async fn test_derive() {
233        let expected = AppointmentSegment {
234            duration_minutes: 30.0,
235            team_member_id: "some_id".to_string(),
236            any_team_member_id: None,
237            intermission_minutes: None,
238            resource_ids: None,
239            service_variation_id: "some_id".to_string(),
240            service_variation_version: 1232941981
241        };
242
243        let actual = Builder::from(AppointmentSegment::default())
244            .duration_minutes(30.0)
245            .team_member_id("some_id")
246            .service_variation_id("some_id")
247            .service_variation_version(1232941981)
248            .build()
249            .unwrap();
250
251        assert_eq!(format!("{:?}", expected), format!("{:?}", actual))
252    }
253}
254
255#[derive(Clone, Debug, Serialize, Deserialize, Default)]
256pub struct Customer {
257    #[serde(default, skip_serializing_if = "Option::is_none")]
258    pub id: Option<String>,
259    #[serde(default, skip_serializing_if = "Option::is_none")]
260    pub birthday: Option<String>,
261    #[serde(default, skip_serializing_if = "Option::is_none")]
262    pub address: Option<Address>,
263    #[serde(default, skip_serializing_if = "Option::is_none")]
264    pub company_name: Option<String>,
265    #[serde(default, skip_serializing_if = "Option::is_none")]
266    pub created_at: Option<String>,
267    #[serde(default, skip_serializing_if = "Option::is_none")]
268    pub creation_source: Option<String>,
269    #[serde(default, skip_serializing_if = "Option::is_none")]
270    pub updated_at: Option<String>,
271    #[serde(default, skip_serializing_if = "Option::is_none")]
272    pub email_address: Option<String>,
273    #[serde(default, skip_serializing_if = "Option::is_none")]
274    pub family_name: Option<String>,
275    #[serde(default, skip_serializing_if = "Option::is_none")]
276    pub  given_name: Option<String>,
277    #[serde(default, skip_serializing_if = "Option::is_none")]
278    pub group_ids: Option<Vec<String>>,
279    #[serde(default, skip_serializing_if = "Option::is_none")]
280    pub nickname: Option<String>,
281    #[serde(default, skip_serializing_if = "Option::is_none")]
282    pub note: Option<String>,
283    #[serde(default, skip_serializing_if = "Option::is_none")]
284    pub phone_number: Option<String>,
285    #[serde(default, skip_serializing_if = "Option::is_none")]
286    pub preferences: Option<Preferences>,
287    #[serde(default, skip_serializing_if = "Option::is_none")]
288    pub reference_id: Option<String>,
289    #[serde(default, skip_serializing_if = "Option::is_none")]
290    pub segment_ids: Option<Vec<String>>,
291    #[serde(default, skip_serializing_if = "Option::is_none")]
292    pub tax_ids: Option<TaxIds>,
293    #[serde(default, skip_serializing_if = "Option::is_none")]
294    pub version: Option<i64>,
295    #[serde(default, skip_serializing_if = "Option::is_none")]
296    pub cards: Option<Vec<Card>>,
297    #[serde(default, skip_serializing_if = "Option::is_none")]
298    pub idempotency_key: Option<String>,
299}
300
301#[derive(Clone, Debug, Serialize, Deserialize, Default)]
302pub struct Preferences {
303    #[serde(default, skip_serializing_if = "Option::is_none")]
304    pub email_subscribed: Option<bool>,
305}
306
307#[derive(Clone, Debug, Serialize, Deserialize, Default)]
308pub struct TaxIds {
309    #[serde(default, skip_serializing_if = "Option::is_none")]
310    pub eu_vat: Option<String>,
311    #[serde(default, skip_serializing_if = "Option::is_none")]
312    pub fr_siret: Option<String>,
313    #[serde(default, skip_serializing_if = "Option::is_none")]
314    pub fr_naf: Option<String>,
315    #[serde(default, skip_serializing_if = "Option::is_none")]
316    pub es_nif: Option<String>,
317}
318
319/// Representation of a Credit/Debit Card for the crate and the Square API.
320#[derive(Clone, Debug, Serialize, Deserialize, Default, Builder)]
321pub struct Card {
322    #[serde(default, skip_serializing_if = "Option::is_none")]
323    #[builder_vis("private")]
324    #[builder_into]
325    pub id: Option<String>,
326    #[serde(default, skip_serializing_if = "Option::is_none")]
327    pub billing_address: Option<Address>,
328    #[serde(default, skip_serializing_if = "Option::is_none")]
329    #[builder_into]
330    pub bin: Option<String>,
331    #[serde(default, skip_serializing_if = "Option::is_none")]
332    #[builder_into]
333    pub card_brand: Option<String>,
334    #[serde(default, skip_serializing_if = "Option::is_none")]
335    #[builder_into]
336    pub card_co_brand: Option<String>,
337    #[serde(default, skip_serializing_if = "Option::is_none")]
338    #[builder_into]
339    pub card_type: Option<String>,
340    #[serde(default, skip_serializing_if = "Option::is_none")]
341    #[builder_into]
342    pub cardholder_name: Option<String>,
343    #[serde(default, skip_serializing_if = "Option::is_none")]
344    #[builder_into]
345    pub customer_id: Option<String>,
346    #[serde(default, skip_serializing_if = "Option::is_none")]
347    pub enabled: Option<bool>,
348    #[serde(default, skip_serializing_if = "Option::is_none")]
349    pub exp_month: Option<i64>,
350    #[serde(default, skip_serializing_if = "Option::is_none")]
351    pub exp_year: Option<i64>,
352    #[builder_into]
353    #[serde(default, skip_serializing_if = "Option::is_none")]
354    pub fingerprint: Option<String>,
355    #[serde(default, skip_serializing_if = "Option::is_none")]
356    #[builder_into]
357    pub last_4: Option<String>,
358    #[builder_into]
359    #[serde(default, skip_serializing_if = "Option::is_none")]
360    pub merchant_id: Option<String>,
361    #[builder_into]
362    #[serde(default, skip_serializing_if = "Option::is_none")]
363    pub prepaid_type: Option<String>,
364    #[builder_into]
365    #[serde(default, skip_serializing_if = "Option::is_none")]
366    pub reference_id: Option<String>,
367    #[serde(default, skip_serializing_if = "Option::is_none")]
368    pub version: Option<i64>,
369}
370
371#[cfg(test)]
372mod test_card_builder {
373    use crate::builder::Builder;
374    use super::*;
375
376    #[tokio::test]
377    async fn test_card_builder() {
378        let expected = Card {
379            id: None,
380            billing_address: Some(Address {
381                address_line_1: Some("some line".to_string()),
382                address_line_2: None,
383                address_line_3: None,
384                locality: None,
385                sublocality: None,
386                administrative_district_level: None,
387                postal_code: None,
388                country: None
389            }),
390            bin: None,
391            card_brand: None,
392            card_co_brand: None,
393            card_type: None,
394            cardholder_name: None,
395            customer_id: None,
396            enabled: Some(true),
397            exp_month: None,
398            exp_year: None,
399            fingerprint: None,
400            last_4: None,
401            merchant_id: None,
402            prepaid_type: None,
403            reference_id: None,
404            version: None
405        };
406
407        let actual = Builder::from(Card::default())
408            .billing_address(Address {
409                address_line_1: Some("some line".to_string()),
410                address_line_2: None,
411                address_line_3: None,
412                locality: None,
413                sublocality: None,
414                administrative_district_level: None,
415                postal_code: None,
416                country: None
417            })
418            .enabled(true)
419            .build()
420            .unwrap();
421
422        assert_eq!(format!("{:?}", expected), format!("{:?}", actual))
423    }
424}
425
426#[derive(Clone, Serialize, Debug, Deserialize)]
427pub struct FilterValue {
428    #[serde(skip_serializing_if = "Option::is_none")]
429    pub  all: Option<Vec<String>>,
430    #[serde(skip_serializing_if = "Option::is_none")]
431    pub any: Option<Vec<String>>,
432    #[serde(skip_serializing_if = "Option::is_none")]
433    pub none: Option<Vec<String>>,
434}
435
436#[derive(Clone, Serialize, Debug, Deserialize, Default)]
437pub struct CatalogObject {
438    #[serde(default, skip_serializing_if = "Option::is_none")]
439    pub id: Option<String>,
440    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
441    pub type_name: Option<CatalogObjectType>,
442    #[serde(default, skip_serializing_if = "Option::is_none")]
443    pub absent_at_location_ids: Option<Vec<String>>,
444    #[serde(default, skip_serializing_if = "Option::is_none")]
445    pub catalog_v1_ids: Option<Vec<CatalogV1ID>>,
446    #[serde(default, skip_serializing_if = "Option::is_none")]
447    pub category_data: Option<CatalogCategory>,
448    #[serde(default, skip_serializing_if = "Option::is_none")]
449    pub custom_attribute_definition_data: Option<CatalogCustomAttributeDefinition>,
450    #[serde(default, skip_serializing_if = "Option::is_none")]
451    pub custom_attributes_values: Option<HashMap<String, CatalogCustomAttributeValue>>,
452    #[serde(default, skip_serializing_if = "Option::is_none")]
453    pub discount_data: Option<CatalogDiscount>,
454    #[serde(default, skip_serializing_if = "Option::is_none")]
455    pub image_data: Option<CatalogImage>,
456    #[serde(default, skip_serializing_if = "Option::is_none")]
457    pub is_deleted: Option<bool>,
458    #[serde(default, skip_serializing_if = "Option::is_none")]
459    pub item_data: Option<CatalogItem>,
460    #[serde(default, skip_serializing_if = "Option::is_none")]
461    pub item_variation_data: Option<CatalogItemVariation>,
462    #[serde(default, skip_serializing_if = "Option::is_none")]
463    pub item_option_data: Option<CatalogObjectOption>,
464    #[serde(default, skip_serializing_if = "Option::is_none")]
465    pub measurement_unit_data: Option<CatalogMeasurementUnit>,
466    #[serde(default, skip_serializing_if = "Option::is_none")]
467    pub modifier_data: Option<CatalogModifier>,
468    #[serde(default, skip_serializing_if = "Option::is_none")]
469    pub modifier_list_data: Option<CatalogModifierList>,
470    #[serde(default, skip_serializing_if = "Option::is_none")]
471    pub present_at_all_locations: Option<bool>,
472    #[serde(default, skip_serializing_if = "Option::is_none")]
473    pub present_at_location_ids: Option<Vec<String>>,
474    #[serde(default, skip_serializing_if = "Option::is_none")]
475    pub pricing_rule_data: Option<CatalogPricingRule>,
476    #[serde(default, skip_serializing_if = "Option::is_none")]
477    pub product_set_data: Option<CatalogProductSet>,
478    #[serde(default, skip_serializing_if = "Option::is_none")]
479    pub quick_amount_settings_data: Option<CatalogQuickAmountsSettings>,
480    #[serde(default, skip_serializing_if = "Option::is_none")]
481    pub subscription_plan_data: Option<CatalogSubscriptionPlan>,
482    #[serde(default, skip_serializing_if = "Option::is_none")]
483    pub tax_data: Option<CatalogTax>,
484    #[serde(default, skip_serializing_if = "Option::is_none")]
485    pub time_period_data: Option<CatalogTimePeriod>,
486    #[serde(default, skip_serializing_if = "Option::is_none")]
487    pub updated_at: Option<String>,
488    #[serde(default, skip_serializing_if = "Option::is_none")]
489    pub created_at: Option<String>,
490    #[serde(default, skip_serializing_if = "Option::is_none")]
491    pub version: Option<i64>,
492}
493
494#[derive(Clone, Serialize, Debug, Deserialize)]
495pub struct CatalogObjectVariation {
496    #[serde(default, skip_serializing_if = "Option::is_none")]
497    pub id: Option<String>,
498    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
499    pub type_name: Option<CatalogObjectType>,
500    #[serde(default, skip_serializing_if = "Option::is_none")]
501    pub absent_at_location_ids: Option<Vec<String>>,
502    #[serde(default, skip_serializing_if = "Option::is_none")]
503    pub catalog_v1_ids: Option<Vec<CatalogV1ID>>,
504    #[serde(default, skip_serializing_if = "Option::is_none")]
505    pub category_data: Option<CatalogCategory>,
506    #[serde(default, skip_serializing_if = "Option::is_none")]
507    pub custom_attribute_definition_data: Option<CatalogCustomAttributeDefinition>,
508    #[serde(default, skip_serializing_if = "Option::is_none")]
509    pub custom_attributes_values: Option<HashMap<String, CatalogCustomAttributeValue>>,
510    #[serde(default, skip_serializing_if = "Option::is_none")]
511    pub discount_data: Option<CatalogDiscount>,
512    #[serde(default, skip_serializing_if = "Option::is_none")]
513    pub image_data: Option<CatalogImage>,
514    #[serde(default, skip_serializing_if = "Option::is_none")]
515    pub is_deleted: Option<bool>,
516    #[serde(default, skip_serializing_if = "Option::is_none")]
517    pub item_option_data: Option<CatalogObjectOption>,
518    #[serde(default, skip_serializing_if = "Option::is_none")]
519    pub item_variation_data: Option<CatalogItemVariation>,
520    #[serde(default, skip_serializing_if = "Option::is_none")]
521    pub measurement_unit_data: Option<CatalogMeasurementUnit>,
522    #[serde(default, skip_serializing_if = "Option::is_none")]
523    pub modifier_data: Option<CatalogModifier>,
524    #[serde(default, skip_serializing_if = "Option::is_none")]
525    pub modifier_list_data: Option<CatalogModifierList>,
526    #[serde(default, skip_serializing_if = "Option::is_none")]
527    pub present_at_all_locations: Option<bool>,
528    #[serde(default, skip_serializing_if = "Option::is_none")]
529    pub present_at_location_ids: Option<Vec<String>>,
530    #[serde(default, skip_serializing_if = "Option::is_none")]
531    pub pricing_rule_data: Option<CatalogPricingRule>,
532    #[serde(default, skip_serializing_if = "Option::is_none")]
533    pub product_set_data: Option<CatalogProductSet>,
534    #[serde(default, skip_serializing_if = "Option::is_none")]
535    pub quick_amount_settings_data: Option<CatalogQuickAmountsSettings>,
536    #[serde(default, skip_serializing_if = "Option::is_none")]
537    pub subscription_plan_data: Option<CatalogSubscriptionPlan>,
538    #[serde(default, skip_serializing_if = "Option::is_none")]
539    pub tax_data: Option<CatalogTax>,
540    #[serde(default, skip_serializing_if = "Option::is_none")]
541    pub time_period_data: Option<CatalogTimePeriod>,
542    #[serde(default, skip_serializing_if = "Option::is_none")]
543    pub updated_at: Option<String>,
544    #[serde(default, skip_serializing_if = "Option::is_none")]
545    pub created_at: Option<String>,
546    #[serde(default, skip_serializing_if = "Option::is_none")]
547    pub version: Option<i64>,
548}
549
550#[derive(Clone, Serialize, Debug, Deserialize)]
551pub struct CatalogObjectOption {
552    #[serde(default, skip_serializing_if = "Option::is_none")]
553    pub id: Option<String>,
554    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
555    pub type_name: Option<CatalogObjectType>,
556    #[serde(default, skip_serializing_if = "Option::is_none")]
557    pub absent_at_location_ids: Option<Vec<String>>,
558    #[serde(default, skip_serializing_if = "Option::is_none")]
559    pub catalog_v1_ids: Option<Vec<CatalogV1ID>>,
560    #[serde(default, skip_serializing_if = "Option::is_none")]
561    pub category_data: Option<CatalogCategory>,
562    #[serde(default, skip_serializing_if = "Option::is_none")]
563    pub custom_attribute_definition_data: Option<CatalogCustomAttributeDefinition>,
564    #[serde(default, skip_serializing_if = "Option::is_none")]
565    pub custom_attributes_values: Option<HashMap<String, CatalogCustomAttributeValue>>,
566    #[serde(default, skip_serializing_if = "Option::is_none")]
567    pub discount_data: Option<CatalogDiscount>,
568    #[serde(default, skip_serializing_if = "Option::is_none")]
569    pub image_data: Option<CatalogImage>,
570    #[serde(default, skip_serializing_if = "Option::is_none")]
571    pub is_deleted: Option<bool>,
572    #[serde(default, skip_serializing_if = "Option::is_none")]
573    pub item_option_value_data: Option<CatalogItemOptionValue>,
574    #[serde(default, skip_serializing_if = "Option::is_none")]
575    pub item_variation_data: Option<CatalogItemVariation>,
576    #[serde(default, skip_serializing_if = "Option::is_none")]
577    pub measurement_unit_data: Option<CatalogMeasurementUnit>,
578    #[serde(default, skip_serializing_if = "Option::is_none")]
579    pub modifier_data: Option<CatalogModifier>,
580    #[serde(default, skip_serializing_if = "Option::is_none")]
581    pub modifier_list_data: Option<CatalogModifierList>,
582    #[serde(default, skip_serializing_if = "Option::is_none")]
583    pub present_at_all_locations: Option<bool>,
584    #[serde(default, skip_serializing_if = "Option::is_none")]
585    pub present_at_location_ids: Option<Vec<String>>,
586    #[serde(default, skip_serializing_if = "Option::is_none")]
587    pub pricing_rule_data: Option<CatalogPricingRule>,
588    #[serde(default, skip_serializing_if = "Option::is_none")]
589    pub product_set_data: Option<CatalogProductSet>,
590    #[serde(default, skip_serializing_if = "Option::is_none")]
591    pub quick_amount_settings_data: Option<CatalogQuickAmountsSettings>,
592    #[serde(default, skip_serializing_if = "Option::is_none")]
593    pub subscription_plan_data: Option<CatalogSubscriptionPlan>,
594    #[serde(default, skip_serializing_if = "Option::is_none")]
595    pub tax_data: Option<CatalogTax>,
596    #[serde(default, skip_serializing_if = "Option::is_none")]
597    pub time_period_data: Option<CatalogTimePeriod>,
598    #[serde(default, skip_serializing_if = "Option::is_none")]
599    pub updated_at: Option<String>,
600    #[serde(default, skip_serializing_if = "Option::is_none")]
601    pub created_at: Option<String>,
602    #[serde(default, skip_serializing_if = "Option::is_none")]
603    pub version: Option<i64>,
604}
605
606#[derive(Clone, Serialize, Debug, Deserialize)]
607pub struct CatalogV1ID {
608    #[serde(default, skip_serializing_if = "Option::is_none")]
609    pub catalog_v1_id: Option<String>,
610    #[serde(default, skip_serializing_if = "Option::is_none")]
611    pub location_id: Option<String>,
612}
613
614#[derive(Clone, Serialize, Debug, Deserialize)]
615pub struct CatalogCategory {
616    #[serde(default, skip_serializing_if = "Option::is_none")]
617    pub image_ids: Option<Vec<String>>,
618    #[serde(default, skip_serializing_if = "Option::is_none")]
619    pub name: Option<String>,
620}
621
622#[derive(Clone, Serialize, Debug, Deserialize)]
623pub struct CatalogCustomAttributeDefinition {
624    #[serde(default, skip_serializing_if = "Option::is_none")]
625    allowed_object_types: Option<String>,
626    #[serde(default, skip_serializing_if = "Option::is_none")]
627    name: Option<String>,
628    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
629    pub type_name: Option<CatalogObjectType>,
630    #[serde(default, skip_serializing_if = "Option::is_none")]
631    app_visibility: Option<String>,
632    #[serde(default, skip_serializing_if = "Option::is_none")]
633    custom_attribute_usage_count: Option<i32>,
634    #[serde(default, skip_serializing_if = "Option::is_none")]
635    description: Option<String>,
636    #[serde(default, skip_serializing_if = "Option::is_none")]
637    key: Option<String>,
638    #[serde(default, skip_serializing_if = "Option::is_none")]
639    number_config: Option<CatalogCustomAttributeDefinitionNumberConfig>,
640    #[serde(default, skip_serializing_if = "Option::is_none")]
641    selection_config: Option<CatalogCustomAttributeDefinitionSelectionConfig>,
642    #[serde(default, skip_serializing_if = "Option::is_none")]
643    seller_visibility: Option<String>,
644    #[serde(default, skip_serializing_if = "Option::is_none")]
645    source_application: Option<SourceApplication>,
646    #[serde(default, skip_serializing_if = "Option::is_none")]
647    string_config: Option<CatalogCustomAttributeDefinitionStringConfig>,
648
649}
650
651#[derive(Clone, Serialize, Debug, Deserialize)]
652pub struct CatalogCustomAttributeDefinitionNumberConfig {
653    #[serde(default, skip_serializing_if = "Option::is_none")]
654    pub precision: Option<i32>
655}
656
657#[derive(Clone, Serialize, Debug, Deserialize)]
658pub struct CatalogCustomAttributeDefinitionSelectionConfig {
659    #[serde(default, skip_serializing_if = "Option::is_none")]
660    pub allowed_selections: Option<Vec<CatalogCustomAttributeDefinitionSelectionConfigCustomAttributeSelection>>,
661    #[serde(default, skip_serializing_if = "Option::is_none")]
662    pub max_allowed_selections: Option<i32>
663}
664
665#[derive(Clone, Serialize, Debug, Deserialize)]
666pub struct CatalogCustomAttributeDefinitionSelectionConfigCustomAttributeSelection {
667    #[serde(default, skip_serializing_if = "Option::is_none")]
668    pub name: Option<String>,
669    #[serde(default, skip_serializing_if = "Option::is_none")]
670    pub uid: Option<String>,
671}
672
673#[derive(Clone, Serialize, Debug, Deserialize)]
674pub struct SourceApplication {
675    #[serde(default, skip_serializing_if = "Option::is_none")]
676    pub application_id: Option<String>,
677    #[serde(default, skip_serializing_if = "Option::is_none")]
678    pub name: Option<String>,
679    #[serde(default, skip_serializing_if = "Option::is_none")]
680    pub product: Option<String>,
681}
682
683#[derive(Clone, Serialize, Debug, Deserialize)]
684pub struct CatalogCustomAttributeDefinitionStringConfig {
685    #[serde(default, skip_serializing_if = "Option::is_none")]
686    pub enforce_uniqueness: Option<bool>
687}
688
689#[derive(Clone, Serialize, Debug, Deserialize)]
690pub struct CatalogCustomAttributeValue {
691    #[serde(default, skip_serializing_if = "Option::is_none")]
692    pub boolean_value: Option<bool>,
693    #[serde(default, skip_serializing_if = "Option::is_none")]
694    pub custom_attribute_definition_id: Option<String>,
695    #[serde(default, skip_serializing_if = "Option::is_none")]
696    pub key: Option<String>,
697    #[serde(default, skip_serializing_if = "Option::is_none")]
698    pub name: Option<String>,
699    #[serde(default, skip_serializing_if = "Option::is_none")]
700    pub number_value: Option<String>,
701    #[serde(default, skip_serializing_if = "Option::is_none")]
702    pub selection_uid_values: Option<Vec<String>>,
703    #[serde(default, skip_serializing_if = "Option::is_none")]
704    pub string_value: Option<String>,
705    #[serde(rename="type", default, skip_serializing_if = "Option::is_none")]
706    pub type_name: Option<CatalogCustomAttributeDefinitionType>,
707}
708
709#[derive(Clone, Serialize, Debug, Deserialize)]
710pub struct CatalogDiscount {
711    #[serde(default, skip_serializing_if = "Option::is_none")]
712    pub amount_money: Option<Money>,
713    #[serde(default, skip_serializing_if = "Option::is_none")]
714    pub discount_type: Option<String>,
715    #[serde(default, skip_serializing_if = "Option::is_none")]
716    pub label_color: Option<String>,
717    #[serde(default, skip_serializing_if = "Option::is_none")]
718    pub maximum_amount_money: Option<Money>,
719    #[serde(default, skip_serializing_if = "Option::is_none")]
720    pub modify_tax_basis: Option<String>,
721    #[serde(default, skip_serializing_if = "Option::is_none")]
722    pub name: Option<String>,
723    #[serde(default, skip_serializing_if = "Option::is_none")]
724    pub percentage: Option<String>,
725    #[serde(default, skip_serializing_if = "Option::is_none")]
726    pub pin_required: Option<String>,
727}
728
729#[derive(Clone, Serialize, Debug, Deserialize)]
730pub struct CatalogImage {
731    #[serde(default, skip_serializing_if = "Option::is_none")]
732    pub caption: Option<String>,
733    #[serde(default, skip_serializing_if = "Option::is_none")]
734    pub name: Option<String>,
735    #[serde(default, skip_serializing_if = "Option::is_none")]
736    pub photo_studio_order_id: Option<String>,
737    #[serde(default, skip_serializing_if = "Option::is_none")]
738    pub url: Option<String>,
739}
740
741#[derive(Clone, Serialize, Debug, Deserialize)]
742pub struct CatalogItem {
743    #[serde(default, skip_serializing_if = "Option::is_none")]
744    pub abbreviation: Option<String>,
745    #[serde(default, skip_serializing_if = "Option::is_none")]
746    pub available_electronically: Option<bool>,
747    #[serde(default, skip_serializing_if = "Option::is_none")]
748    pub available_for_pickup: Option<bool>,
749    #[serde(default, skip_serializing_if = "Option::is_none")]
750    pub available_online: Option<bool>,
751    #[serde(default, skip_serializing_if = "Option::is_none")]
752    pub category_id: Option<String>,
753    #[serde(default, skip_serializing_if = "Option::is_none")]
754    pub description: Option<String>,
755    #[serde(default, skip_serializing_if = "Option::is_none")]
756    pub image_ids : Option<Vec<String>>,
757    #[serde(default, skip_serializing_if = "Option::is_none")]
758    pub image_option: Option<Vec<CatalogItemOptionForItem>>,
759    #[serde(default, skip_serializing_if = "Option::is_none")]
760    pub label_color: Option<String>,
761    #[serde(default, skip_serializing_if = "Option::is_none")]
762    pub modifier_list_info: Option<Vec<CatalogItemModifierListInfo>>,
763    #[serde(default, skip_serializing_if = "Option::is_none")]
764    pub name: Option<String>,
765    #[serde(default, skip_serializing_if = "Option::is_none")]
766    pub product_type: Option<CatalogItemProductType>,
767    #[serde(default, skip_serializing_if = "Option::is_none")]
768    pub skip_modifier_scree: Option<bool>,
769    #[serde(default, skip_serializing_if = "Option::is_none")]
770    pub sort_name: Option<String>,
771    #[serde(default, skip_serializing_if = "Option::is_none")]
772    pub tax_ids: Option<Vec<String>>,
773    #[serde(default, skip_serializing_if = "Option::is_none")]
774    pub variations: Option<Vec<CatalogObjectVariation>>,
775}
776
777#[derive(Clone, Serialize, Debug, Deserialize)]
778pub struct CatalogItemOptionForItem {
779    #[serde(default, skip_serializing_if = "Option::is_none")]
780    pub item_option_id: Option<String>,
781}
782
783#[derive(Clone, Serialize, Debug, Deserialize)]
784pub struct CatalogItemModifierListInfo {
785    #[serde(default, skip_serializing_if = "Option::is_none")]
786    pub modifier_list_id: Option<String>,
787    #[serde(default, skip_serializing_if = "Option::is_none")]
788    pub enabled: Option<String>,
789    #[serde(default, skip_serializing_if = "Option::is_none")]
790    pub max_selected_modifiers: Option<String>,
791    #[serde(default, skip_serializing_if = "Option::is_none")]
792    pub min_selected_modifiers: Option<String>,
793    #[serde(default, skip_serializing_if = "Option::is_none")]
794    pub modifier_overrides: Option<String>,
795}
796
797#[derive(Clone, Serialize, Debug, Deserialize)]
798pub struct CatalogModifierOverride {
799    #[serde(default, skip_serializing_if = "Option::is_none")]
800    pub modifier_id: Option<String>,
801    #[serde(default, skip_serializing_if = "Option::is_none")]
802    pub on_by_default: Option<String>,
803}
804
805#[derive(Clone, Serialize, Debug, Deserialize)]
806pub struct CatalogItemOption {
807    #[serde(default, skip_serializing_if = "Option::is_none")]
808    pub description: Option<String>,
809    #[serde(default, skip_serializing_if = "Option::is_none")]
810    pub display_name: Option<String>,
811    #[serde(default, skip_serializing_if = "Option::is_none")]
812    pub name: Option<String>,
813    #[serde(default, skip_serializing_if = "Option::is_none")]
814    pub show_colors: Option<bool>,
815    #[serde(default, skip_serializing_if = "Option::is_none")]
816    pub values: Option<CatalogItemOptionValue>,
817}
818
819#[derive(Clone, Serialize, Debug, Deserialize)]
820pub struct CatalogItemOptionValue {
821    #[serde(default, skip_serializing_if = "Option::is_none")]
822    pub color: Option<String>,
823    #[serde(default, skip_serializing_if = "Option::is_none")]
824    pub description: Option<String>,
825    #[serde(default, skip_serializing_if = "Option::is_none")]
826    pub item_option_id: Option<String>,
827    #[serde(default, skip_serializing_if = "Option::is_none")]
828    pub name: Option<String>,
829    #[serde(default, skip_serializing_if = "Option::is_none")]
830    pub ordinal: Option<i32>,
831}
832
833#[derive(Clone, Serialize, Debug, Deserialize)]
834pub struct CatalogItemVariation {
835    #[serde(default, skip_serializing_if = "Option::is_none")]
836    pub available_for_booking: Option<bool>,
837    #[serde(default, skip_serializing_if = "Option::is_none")]
838    pub image_ids: Option<Vec<String>>,
839    #[serde(default, skip_serializing_if = "Option::is_none")]
840    pub inventory_alert_threshold: Option<i64>,
841    #[serde(default, skip_serializing_if = "Option::is_none")]
842    pub inventory_alert_type: Option<InventoryAlertType>,
843    #[serde(default, skip_serializing_if = "Option::is_none")]
844    pub item_id: Option<String>,
845    #[serde(default, skip_serializing_if = "Option::is_none")]
846    pub item_option_values: Option<Vec<CatalogItemOptionValueForItemVariation>>,
847    #[serde(default, skip_serializing_if = "Option::is_none")]
848    pub location_overrides: Option<Vec<ItemVariationLocationOverrides>>,
849    #[serde(default, skip_serializing_if = "Option::is_none")]
850    pub measurement_unit_id: Option<String>,
851    #[serde(default, skip_serializing_if = "Option::is_none")]
852    pub name: Option<String>,
853    #[serde(default, skip_serializing_if = "Option::is_none")]
854    pub ordinal: Option<i32>,
855    #[serde(default, skip_serializing_if = "Option::is_none")]
856    pub price_money: Option<Money>,
857    #[serde(default, skip_serializing_if = "Option::is_none")]
858    pub pricing_type: Option<CatalogPricingType>,
859    #[serde(default, skip_serializing_if = "Option::is_none")]
860    pub sellable: Option<bool>,
861    #[serde(default, skip_serializing_if = "Option::is_none")]
862    pub service_duration: Option<i64>,
863    #[serde(default, skip_serializing_if = "Option::is_none")]
864    pub sku: Option<String>,
865    #[serde(default, skip_serializing_if = "Option::is_none")]
866    pub stockable: Option<bool>,
867    #[serde(default, skip_serializing_if = "Option::is_none")]
868    pub stockable_conversion: Option<CatalogStockConversion>,
869    #[serde(default, skip_serializing_if = "Option::is_none")]
870    pub team_member_ids: Option<Vec<String>>,
871    #[serde(default, skip_serializing_if = "Option::is_none")]
872    pub track_inventory: Option<bool>,
873    #[serde(default, skip_serializing_if = "Option::is_none")]
874    pub  upc: Option<String>,
875    #[serde(default, skip_serializing_if = "Option::is_none")]
876    pub user_data: Option<String>,
877}
878
879#[derive(Clone, Serialize, Debug, Deserialize)]
880pub struct CatalogItemOptionValueForItemVariation {
881    #[serde(default, skip_serializing_if = "Option::is_none")]
882    pub item_option_id: Option<String>,
883    #[serde(default, skip_serializing_if = "Option::is_none")]
884    pub item_option_value_id: Option<String>,
885}
886
887#[derive(Clone, Serialize, Debug, Deserialize)]
888pub struct ItemVariationLocationOverrides {
889    #[serde(default, skip_serializing_if = "Option::is_none")]
890    pub inventory_alert_threshold: Option<i64>,
891    #[serde(default, skip_serializing_if = "Option::is_none")]
892    pub inventory_alert_type: Option<InventoryAlertType>,
893    #[serde(default, skip_serializing_if = "Option::is_none")]
894    pub location_id: Option<String>,
895    #[serde(default, skip_serializing_if = "Option::is_none")]
896    pub price_money: Option<Money>,
897    #[serde(default, skip_serializing_if = "Option::is_none")]
898    pub pricing_type: Option<CatalogPricingType>,
899    #[serde(default, skip_serializing_if = "Option::is_none")]
900    pub sold_out: Option<bool>,
901    #[serde(default, skip_serializing_if = "Option::is_none")]
902    pub sold_out_valid_until: Option<String>,
903    #[serde(default, skip_serializing_if = "Option::is_none")]
904    pub track_inventory: Option<bool>,
905}
906
907#[derive(Clone, Serialize, Debug, Deserialize)]
908pub struct CatalogStockConversion {
909    #[serde(default, skip_serializing_if = "Option::is_none")]
910    pub nonstockable_quantity: Option<String>,
911    #[serde(default, skip_serializing_if = "Option::is_none")]
912    pub stockable_item_variation_id: Option<String>,
913    #[serde(default, skip_serializing_if = "Option::is_none")]
914    pub stockable_quantity: Option<String>,
915}
916
917#[derive(Clone, Serialize, Debug, Deserialize)]
918pub struct CatalogMeasurementUnit {
919    #[serde(default, skip_serializing_if = "Option::is_none")]
920    pub measurement_unit: Option<MeasurementUnit>,
921    #[serde(default, skip_serializing_if = "Option::is_none")]
922    pub precision: Option<i32>,
923}
924
925#[derive(Clone, Serialize, Debug, Deserialize)]
926pub struct MeasurementUnit {
927    #[serde(default, skip_serializing_if = "Option::is_none")]
928    pub area_unit: Option<String>,
929    #[serde(default, skip_serializing_if = "Option::is_none")]
930    pub custom_unit: Option<MeasurementUnitCustom>,
931    #[serde(default, skip_serializing_if = "Option::is_none")]
932    pub generic_unit: Option<String>,
933    #[serde(default, skip_serializing_if = "Option::is_none")]
934    pub length_unit: Option<String>,
935    #[serde(default, skip_serializing_if = "Option::is_none")]
936    pub time_unit: Option<String>,
937    #[serde(rename= "type", default, skip_serializing_if = "Option::is_none")]
938    pub type_name: Option<String>,
939    #[serde(default, skip_serializing_if = "Option::is_none")]
940    pub volume_unit: Option<String>,
941    #[serde(default, skip_serializing_if = "Option::is_none")]
942    pub weight_unit: Option<String>,
943}
944
945#[derive(Clone, Serialize, Debug, Deserialize)]
946pub struct MeasurementUnitCustom {
947    #[serde(default, skip_serializing_if = "Option::is_none")]
948    pub abbreviation: Option<String>,
949    #[serde(default, skip_serializing_if = "Option::is_none")]
950    pub name: Option<String>,
951}
952
953#[derive(Clone, Serialize, Debug, Deserialize)]
954pub struct CatalogModifier {
955    #[serde(default, skip_serializing_if = "Option::is_none")]
956    pub image_ids: Option<Vec<String>>,
957    #[serde(default, skip_serializing_if = "Option::is_none")]
958    pub modifier_list_id: Option<String>,
959    #[serde(default, skip_serializing_if = "Option::is_none")]
960    pub name: Option<String>,
961    #[serde(default, skip_serializing_if = "Option::is_none")]
962    pub ordinal: Option<i32>,
963    #[serde(default, skip_serializing_if = "Option::is_none")]
964    pub price_money: Option<Money>,
965}
966
967#[derive(Clone, Serialize, Debug, Deserialize)]
968pub struct CatalogModifierList {
969    #[serde(default, skip_serializing_if = "Option::is_none")]
970    pub image_ids: Option<Vec<String>>,
971    #[serde(default, skip_serializing_if = "Option::is_none")]
972    pub modifiers: Option<CatalogModifier>,
973    #[serde(default, skip_serializing_if = "Option::is_none")]
974    pub name: Option<String>,
975    #[serde(default, skip_serializing_if = "Option::is_none")]
976    pub ordinal: Option<i32>,
977    #[serde(default, skip_serializing_if = "Option::is_none")]
978    pub selection_type: Option<String>,
979}
980
981#[derive(Clone, Serialize, Debug, Deserialize)]
982pub struct CatalogPricingRule {
983    #[serde(default, skip_serializing_if = "Option::is_none")]
984    pub customer_group_ids_any: Option<Vec<String>>,
985    #[serde(default, skip_serializing_if = "Option::is_none")]
986    pub discount_id: Option<String>,
987    #[serde(default, skip_serializing_if = "Option::is_none")]
988    pub exclude_products_id: Option<String>,
989    #[serde(default, skip_serializing_if = "Option::is_none")]
990    pub exclude_strategy: Option<String>,
991    #[serde(default, skip_serializing_if = "Option::is_none")]
992    pub match_products_id: Option<String>,
993    #[serde(default, skip_serializing_if = "Option::is_none")]
994    pub minimum_order_subtotal_money: Option<Money>,
995    #[serde(default, skip_serializing_if = "Option::is_none")]
996    pub name: Option<String>,
997    #[serde(default, skip_serializing_if = "Option::is_none")]
998    pub time_period_ids: Option<String>,
999    #[serde(default, skip_serializing_if = "Option::is_none")]
1000    pub valid_from_date: Option<String>,
1001    #[serde(default, skip_serializing_if = "Option::is_none")]
1002    pub valid_from_local_time: Option<Vec<String>>,
1003    #[serde(default, skip_serializing_if = "Option::is_none")]
1004    pub valid_until_date: Option<String>,
1005    #[serde(default, skip_serializing_if = "Option::is_none")]
1006    pub valid_until_local_time: Option<String>,
1007    #[serde(default, skip_serializing_if = "Option::is_none")]
1008    pub apply_products_id: Option<String>,
1009}
1010
1011#[derive(Clone, Serialize, Debug, Deserialize)]
1012pub struct CatalogProductSet {
1013    #[serde(default, skip_serializing_if = "Option::is_none")]
1014    pub all_products: Option<bool>,
1015    #[serde(default, skip_serializing_if = "Option::is_none")]
1016    pub name: Option<String>,
1017    #[serde(default, skip_serializing_if = "Option::is_none")]
1018    pub product_ids_all: Option<Vec<String>>,
1019    #[serde(default, skip_serializing_if = "Option::is_none")]
1020    pub product_ids_any: Option<Vec<String>>,
1021    #[serde(default, skip_serializing_if = "Option::is_none")]
1022    pub quantity_exact: Option<i64>,
1023    #[serde(default, skip_serializing_if = "Option::is_none")]
1024    pub quantity_max: Option<i64>,
1025    #[serde(default, skip_serializing_if = "Option::is_none")]
1026    pub quantity_min: Option<i64>,
1027}
1028
1029#[derive(Clone, Serialize, Debug, Deserialize)]
1030pub struct CatalogQuickAmountsSettings {
1031    #[serde(default, skip_serializing_if = "Option::is_none")]
1032    pub option: Option<String>,
1033    #[serde(default, skip_serializing_if = "Option::is_none")]
1034    pub amounts: Option<Vec<CatalogQuickAmount>>,
1035    #[serde(default, skip_serializing_if = "Option::is_none")]
1036    pub eligible_for_auto_amounts: Option<bool>,
1037}
1038
1039#[derive(Clone, Serialize, Debug, Deserialize)]
1040pub struct CatalogQuickAmount {
1041    #[serde(default, skip_serializing_if = "Option::is_none")]
1042    pub amount: Option<Money>,
1043    #[serde(rename="type", default, skip_serializing_if = "Option::is_none")]
1044    pub type_name: Option<String>,
1045    #[serde(default, skip_serializing_if = "Option::is_none")]
1046    pub ordinal: Option<i64>,
1047    #[serde(default, skip_serializing_if = "Option::is_none")]
1048    pub score: Option<i64>,
1049}
1050
1051#[derive(Clone, Serialize, Debug, Deserialize)]
1052pub struct CatalogSubscriptionPlan {
1053    #[serde(default, skip_serializing_if = "Option::is_none")]
1054    pub name: Option<String>,
1055    #[serde(default, skip_serializing_if = "Option::is_none")]
1056    pub phases: Option<SubscriptionPhase>
1057}
1058
1059#[derive(Clone, Serialize, Debug, Deserialize)]
1060pub struct SubscriptionPhase {
1061    #[serde(default, skip_serializing_if = "Option::is_none")]
1062    pub cadence: Option<String>,
1063    #[serde(default, skip_serializing_if = "Option::is_none")]
1064    pub ordinal: Option<i64>,
1065    #[serde(default, skip_serializing_if = "Option::is_none")]
1066    pub periods: Option<i32>,
1067    #[serde(default, skip_serializing_if = "Option::is_none")]
1068    pub recurring_price_money: Option<Money>,
1069    #[serde(default, skip_serializing_if = "Option::is_none")]
1070    pub uid: Option<String>,
1071}
1072
1073#[derive(Clone, Serialize, Debug, Deserialize)]
1074pub struct CatalogTax {
1075    #[serde(default, skip_serializing_if = "Option::is_none")]
1076    pub applies_to_custom_amounts: Option<bool>,
1077    #[serde(default, skip_serializing_if = "Option::is_none")]
1078    pub calculation_phase: Option<String>,
1079    #[serde(default, skip_serializing_if = "Option::is_none")]
1080    pub enabled: Option<bool>,
1081    #[serde(default, skip_serializing_if = "Option::is_none")]
1082    pub inclusion_type: Option<String>,
1083    #[serde(default, skip_serializing_if = "Option::is_none")]
1084    pub name: Option<String>,
1085    #[serde(default, skip_serializing_if = "Option::is_none")]
1086    pub percentage: Option<String>,
1087}
1088
1089#[derive(Clone, Serialize, Debug, Deserialize)]
1090pub struct CatalogTimePeriod {
1091    #[serde(default, skip_serializing_if = "Option::is_none")]
1092    pub event: Option<String>,
1093}
1094
1095#[derive(Clone, Serialize, Debug, Deserialize, Default, Builder)]
1096pub struct Booking {
1097    #[builder_vis("private")]
1098    #[serde(default, skip_serializing_if = "Option::is_none")]
1099    pub id: Option<String>,
1100    #[serde(default, skip_serializing_if = "Option::is_none")]
1101    pub all_day: Option<bool>,
1102    #[serde(default, skip_serializing_if = "Option::is_none")]
1103    pub appointment_segments: Option<Vec<AppointmentSegment>>,
1104    #[serde(default, skip_serializing_if = "Option::is_none")]
1105    pub created_at: Option<String>,
1106    #[serde(default, skip_serializing_if = "Option::is_none")]
1107    pub booking_creator_details: Option<BookingCreatorDetails>,
1108    #[serde(default, skip_serializing_if = "Option::is_none")]
1109    #[builder_into]
1110    #[builder_validate("is_some")]
1111    pub customer_id: Option<String>,
1112    #[serde(default, skip_serializing_if = "Option::is_none")]
1113    #[builder_into]
1114    pub customer_note: Option<String>,
1115    #[serde(default, skip_serializing_if = "Option::is_none")]
1116    #[builder_into]
1117    #[builder_validate("is_some")]
1118    pub location_id: Option<String>,
1119    #[serde(default, skip_serializing_if = "Option::is_none")]
1120    pub location_type: Option<BusinessAppointmentSettingsBookingLocationType>,
1121    #[serde(default, skip_serializing_if = "Option::is_none")]
1122    #[builder_into]
1123    pub seller_note: Option<String>,
1124    #[serde(default, skip_serializing_if = "Option::is_none")]
1125    #[builder_into]
1126    pub source: Option<String>,
1127    #[serde(default, skip_serializing_if = "Option::is_none")]
1128    #[builder_into]
1129    pub start_at: Option<String>,
1130    #[serde(default, skip_serializing_if = "Option::is_none")]
1131    #[builder_into]
1132    pub status: Option<String>,
1133    #[serde(default, skip_serializing_if = "Option::is_none")]
1134    pub transition_time_minutes: Option<i32>,
1135    #[serde(default, skip_serializing_if = "Option::is_none")]
1136    #[builder_into]
1137    pub updated_at: Option<String>,
1138    #[serde(default, skip_serializing_if = "Option::is_none")]
1139    pub version: Option<i32>
1140}
1141
1142impl AddField<AppointmentSegment> for Booking {
1143    fn add_field(&mut self, field: AppointmentSegment) {
1144        if let Some(segments) = self.appointment_segments.as_mut() {
1145            segments.push(field);
1146        } else {
1147            self.appointment_segments = Some(vec![field])
1148        }
1149    }
1150}
1151
1152#[derive(Clone, Serialize, Debug, Deserialize)]
1153pub struct BookingCreatorDetails {
1154    #[serde(default, skip_serializing_if = "Option::is_none")]
1155    pub creator_type: Option<String>,
1156    #[serde(default, skip_serializing_if = "Option::is_none")]
1157    pub customer_id: Option<String>,
1158    #[serde(default, skip_serializing_if = "Option::is_none")]
1159    pub team_member_id: Option<String>,
1160}
1161
1162/// Representation of Money for the crate.
1163/// The amount is given in the lowest possible denomination.
1164/// So for GBP the amount is in pence.
1165#[derive(Serialize, Deserialize, Debug, Clone)]
1166pub struct Money {
1167    #[serde(default, skip_serializing_if = "Option::is_none")]
1168    pub amount: Option<i64>,
1169    pub currency: Currency,
1170}
1171
1172#[derive(Serialize, Deserialize, Debug, Clone)]
1173pub struct BusinessBookingProfile {
1174    #[serde(default, skip_serializing_if = "Option::is_none")]
1175    pub allow_user_cancel: Option<bool>,
1176    #[serde(default, skip_serializing_if = "Option::is_none")]
1177    pub booking_enabled: Option<bool>,
1178    #[serde(default, skip_serializing_if = "Option::is_none")]
1179    pub booking_policy: Option<BusinessBookingProfileBookingPolicy>,
1180    #[serde(default, skip_serializing_if = "Option::is_none")]
1181    pub business_appointment_settings: Option<BusinessAppointmentSettings>,
1182    #[serde(default, skip_serializing_if = "Option::is_none")]
1183    pub created_at: Option<String>,
1184    #[serde(default, skip_serializing_if = "Option::is_none")]
1185    pub customer_timezone_choice: Option<BusinessBookingProfileCustomerTimezoneChoice>,
1186    #[serde(default, skip_serializing_if = "Option::is_none")]
1187    pub seller_id: Option<String>,
1188    #[serde(default, skip_serializing_if = "Option::is_none")]
1189    pub support_seller_level_writes: Option<bool>,
1190}
1191
1192#[derive(Serialize, Deserialize, Debug, Clone)]
1193pub struct BusinessAppointmentSettings {
1194    #[serde(default, skip_serializing_if = "Option::is_none")]
1195    pub alignment_time: Option<String>,
1196    #[serde(default, skip_serializing_if = "Option::is_none")]
1197    pub any_team_member_booking_enabled: Option<bool>,
1198    #[serde(default, skip_serializing_if = "Option::is_none")]
1199    pub cancellation_fee_money: Option<Money>,
1200    #[serde(default, skip_serializing_if = "Option::is_none")]
1201    pub cancellation_policy: Option<BusinessAppointmentSettingsCancellationPolicy>,
1202    #[serde(default, skip_serializing_if = "Option::is_none")]
1203    pub cancellation_policy_text: Option<String>,
1204    #[serde(default, skip_serializing_if = "Option::is_none")]
1205    pub cancellation_window_seconds: Option<i32>,
1206    #[serde(default, skip_serializing_if = "Option::is_none")]
1207    pub location_types: Option<Vec<BusinessAppointmentSettingsBookingLocationType>>,
1208    #[serde(default, skip_serializing_if = "Option::is_none")]
1209    pub max_appointments_per_day_limit: Option<i32>,
1210    #[serde(default, skip_serializing_if = "Option::is_none")]
1211    pub max_appointments_per_day_limit_type: Option<BusinessAppointmentSettingsMaxAppointmentsPerDayLimitType>,
1212    #[serde(default, skip_serializing_if = "Option::is_none")]
1213    pub max_booking_lead_time_seconds: Option<i32>,
1214    #[serde(default, skip_serializing_if = "Option::is_none")]
1215    pub min_booking_lead_time_seconds: Option<i32>,
1216    #[serde(default, skip_serializing_if = "Option::is_none")]
1217    pub multiple_service_booking_enabled: Option<bool>,
1218    #[serde(default, skip_serializing_if = "Option::is_none")]
1219    pub skip_booking_flow_staff_selection: Option<bool>,
1220}
1221
1222#[derive(Serialize, Deserialize, Debug, Clone)]
1223pub struct TeamMemberBookingProfile {
1224    #[serde(default, skip_serializing_if = "Option::is_none")]
1225    pub description: Option<String>,
1226    #[serde(default, skip_serializing_if = "Option::is_none")]
1227    pub display_name: Option<String>,
1228    #[serde(default, skip_serializing_if = "Option::is_none")]
1229    pub is_bookable: Option<bool>,
1230    #[serde(default, skip_serializing_if = "Option::is_none")]
1231    pub profile_image_url: Option<String>,
1232    #[serde(default, skip_serializing_if = "Option::is_none")]
1233    pub team_member_id: Option<String>,
1234}
1235
1236#[derive(Clone, Serialize, Debug, Deserialize, Default, Builder)]
1237pub struct CreateOrderRequest {
1238    #[builder_rand("uuid")]
1239    pub idempotency_key: Option<String>,
1240    pub order: Order,
1241}
1242
1243impl AddField<Order> for CreateOrderRequest {
1244    fn add_field(&mut self, field: Order) {
1245        self.order = field;
1246    }
1247}
1248
1249#[derive(Clone, Serialize, Debug, Deserialize, Default, Builder)]
1250pub struct Order {
1251    #[serde(default, skip_serializing_if = "Option::is_none")]
1252    #[builder_into]
1253    pub id: Option<String>,
1254    #[serde(default, skip_serializing_if = "Option::is_none")]
1255    #[builder_into]
1256    #[builder_validate("is_some")]
1257    pub location_id: Option<String>,
1258    #[serde(default, skip_serializing_if = "Option::is_none")]
1259    #[builder_into]
1260    pub close_at: Option<String>,
1261    #[serde(default, skip_serializing_if = "Option::is_none")]
1262    #[builder_into]
1263    pub created_at: Option<String>,
1264    #[serde(default, skip_serializing_if = "Option::is_none")]
1265    #[builder_into]
1266    pub customer_id: Option<String>,
1267    #[serde(default, skip_serializing_if = "Option::is_none")]
1268    pub discounts: Option<Vec<OrderLineItemDiscount>>,
1269    #[serde(default, skip_serializing_if = "Option::is_none")]
1270    pub fulfillments: Option<OrderFulfillment>,
1271    #[serde(default, skip_serializing_if = "Option::is_none")]
1272    pub line_items: Option<Vec<OrderLineItem>>,
1273    #[serde(default, skip_serializing_if = "Option::is_none")]
1274    pub metadata: Option<HashMap<String, String>>,
1275    #[serde(default, skip_serializing_if = "Option::is_none")]
1276    pub net_amounts: Option<OrderMoneyAmounts>,
1277    #[serde(default, skip_serializing_if = "Option::is_none")]
1278    pub pricing_options: Option<OrderPricingOptions>,
1279    #[serde(default, skip_serializing_if = "Option::is_none")]
1280    #[builder_into]
1281    pub reference_id: Option<String>,
1282    #[serde(default, skip_serializing_if = "Option::is_none")]
1283    pub refunds: Option<Vec<Refund>>,
1284    #[serde(default, skip_serializing_if = "Option::is_none")]
1285    pub return_amounts: Option<OrderMoneyAmounts>,
1286    #[serde(default, skip_serializing_if = "Option::is_none")]
1287    pub returns: Option<Vec<OrderReturn>>,
1288    #[serde(default, skip_serializing_if = "Option::is_none")]
1289    pub rewards: Option<Vec<OrderReward>>,
1290    #[serde(default, skip_serializing_if = "Option::is_none")]
1291    pub rounding_adjustment: Option<OrderRoundingAdjustment>,
1292    #[serde(default, skip_serializing_if = "Option::is_none")]
1293    pub service_charges: Option<Vec<OrderServiceCharge>>,
1294    #[serde(default, skip_serializing_if = "Option::is_none")]
1295    pub source: Option<OrderSource>,
1296    #[serde(default, skip_serializing_if = "Option::is_none")]
1297    pub state: Option<OrderState>,
1298    #[serde(default, skip_serializing_if = "Option::is_none")]
1299    pub taxes: Option<Vec<OrderLineItemTax>>,
1300    #[serde(default, skip_serializing_if = "Option::is_none")]
1301    pub tenders: Option<Vec<Tender>>,
1302    #[serde(default, skip_serializing_if = "Option::is_none")]
1303    #[builder_into]
1304    pub ticket_name: Option<String>,
1305    #[serde(default, skip_serializing_if = "Option::is_none")]
1306    pub total_discount_money: Option<Money>,
1307    #[serde(default, skip_serializing_if = "Option::is_none")]
1308    pub total_money: Option<Money>,
1309    #[serde(default, skip_serializing_if = "Option::is_none")]
1310    pub total_service_charge_money: Option<Money>,
1311    #[serde(default, skip_serializing_if = "Option::is_none")]
1312    pub total_tax_money: Option<Money>,
1313    #[serde(default, skip_serializing_if = "Option::is_none")]
1314    pub total_tip_money: Option<Money>,
1315    #[serde(default, skip_serializing_if = "Option::is_none")]
1316    #[builder_into]
1317    pub updated_at: Option<String>,
1318    #[serde(default, skip_serializing_if = "Option::is_none")]
1319    pub version: Option<i64>,
1320}
1321
1322impl AddField<OrderLineItem> for Order {
1323    fn add_field(&mut self, field: OrderLineItem) {
1324        if let Some(line_items) = self.line_items.as_mut() {
1325            line_items.push(field);
1326        } else {
1327            self.line_items = Some(vec![field]);
1328        }
1329    }
1330}
1331
1332impl AddField<OrderServiceCharge> for Order {
1333    fn add_field(&mut self, field: OrderServiceCharge) {
1334        if let Some(line_items) = self.service_charges.as_mut() {
1335            line_items.push(field);
1336        } else {
1337            self.service_charges = Some(vec![field]);
1338        }
1339    }
1340}
1341
1342
1343#[derive(Clone, Serialize, Debug, Deserialize)]
1344pub struct ChargeRequestAdditionalRecipient {
1345
1346}
1347
1348#[derive(Clone, Serialize, Debug, Deserialize)]
1349pub struct OrderLineItemDiscount {
1350    #[serde(default, skip_serializing_if = "Option::is_none")]
1351    pub amount_money: Option<Money>,
1352    #[serde(default, skip_serializing_if = "Option::is_none")]
1353    pub applied_money: Option<Money>,
1354    #[serde(default, skip_serializing_if = "Option::is_none")]
1355    pub catalog_object_id: Option<String>,
1356    #[serde(default, skip_serializing_if = "Option::is_none")]
1357    pub catalog_version: Option<i64>,
1358    #[serde(default, skip_serializing_if = "Option::is_none")]
1359    metadata: Option<HashMap<String, String>>,
1360    #[serde(default, skip_serializing_if = "Option::is_none")]
1361    pub name: Option<String>,
1362    #[serde(default, skip_serializing_if = "Option::is_none")]
1363    pub percentage: Option<String>,
1364    #[serde(default, skip_serializing_if = "Option::is_none")]
1365    pub pricing_rule_id: Option<String>,
1366    #[serde(default, skip_serializing_if = "Option::is_none")]
1367    pub reward_ids: Option<Vec<String>>,
1368    #[serde(default, skip_serializing_if = "Option::is_none")]
1369    pub scope: Option<OrderLineItemDiscountScope>,
1370    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1371    pub discount_type: Option<OrderLineItemDiscountType>,
1372    #[serde(default, skip_serializing_if = "Option::is_none")]
1373    pub uid: Option<String>,
1374}
1375
1376#[derive(Clone, Serialize, Debug, Deserialize)]
1377pub struct OrderFulfillment {
1378    #[serde(default, skip_serializing_if = "Option::is_none")]
1379    entries: Option<Vec<OrderFulfillmentFulfillmentEntry>>,
1380    #[serde(default, skip_serializing_if = "Option::is_none")]
1381    line_item_application: Option<OrderFulfillmentFulfillmentLineItemApplication>,
1382    #[serde(default, skip_serializing_if = "Option::is_none")]
1383    pub metadata: Option<HashMap<String, String>>,
1384    #[serde(default, skip_serializing_if = "Option::is_none")]
1385    pickup_details: Option<OrderFulfillmentPickupDetails>,
1386    #[serde(default, skip_serializing_if = "Option::is_none")]
1387    shipment_details: Option<OrderFulfillmentShipmentDetails>,
1388    #[serde(default, skip_serializing_if = "Option::is_none")]
1389    state: Option<String>,
1390    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1391    fulfillment_type: Option<String>,
1392    #[serde(default, skip_serializing_if = "Option::is_none")]
1393    uid: Option<String>,
1394}
1395
1396#[derive(Clone, Serialize, Debug, Deserialize)]
1397pub struct OrderFulfillmentFulfillmentEntry {
1398    pub line_item_uid: String,
1399    pub quantity: String,
1400    #[serde(default, skip_serializing_if = "Option::is_none")]
1401    pub metadata: Option<HashMap<String, String>>,
1402    #[serde(default, skip_serializing_if = "Option::is_none")]
1403    pub uid: Option<String>,
1404}
1405
1406#[derive(Clone, Serialize, Debug, Deserialize)]
1407pub struct OrderFulfillmentPickupDetails {
1408    #[serde(default, skip_serializing_if = "Option::is_none")]
1409    pub accepted_at: Option<String>,
1410    #[serde(default, skip_serializing_if = "Option::is_none")]
1411    pub auto_complete_duration: Option<String>,
1412    #[serde(default, skip_serializing_if = "Option::is_none")]
1413    pub cancel_reason: Option<String>,
1414    #[serde(default, skip_serializing_if = "Option::is_none")]
1415    pub canceled_at: Option<String>,
1416    #[serde(default, skip_serializing_if = "Option::is_none")]
1417    pub curbside_pickup_details: Option<OrderFulfillmentPickupDetailsCurbsidePickupDetails>,
1418    #[serde(default, skip_serializing_if = "Option::is_none")]
1419    pub expired_at: Option<String>,
1420    #[serde(default, skip_serializing_if = "Option::is_none")]
1421    pub expires_at: Option<String>,
1422    #[serde(default, skip_serializing_if = "Option::is_none")]
1423    pub is_curbside_pickup: Option<bool>,
1424    #[serde(default, skip_serializing_if = "Option::is_none")]
1425    pub note: Option<String>,
1426    #[serde(default, skip_serializing_if = "Option::is_none")]
1427    pub picked_up_at: Option<String>,
1428    #[serde(default, skip_serializing_if = "Option::is_none")]
1429    pub pickup_at: Option<String>,
1430    #[serde(default, skip_serializing_if = "Option::is_none")]
1431    pub pickup_window_duration: Option<String>,
1432    #[serde(default, skip_serializing_if = "Option::is_none")]
1433    pub placed_at: Option<String>,
1434    #[serde(default, skip_serializing_if = "Option::is_none")]
1435    pub prep_time_duration: Option<String>,
1436    #[serde(default, skip_serializing_if = "Option::is_none")]
1437    pub ready_at: Option<String>,
1438    #[serde(default, skip_serializing_if = "Option::is_none")]
1439    pub recipient: Option<OrderFulfillmentRecipient>,
1440    #[serde(default, skip_serializing_if = "Option::is_none")]
1441    pub rejected_at: Option<String>,
1442    #[serde(default, skip_serializing_if = "Option::is_none")]
1443    pub schedule_type: Option<OrderFulfillmentPickupDetailsScheduleType>,
1444}
1445
1446#[derive(Clone, Serialize, Debug, Deserialize)]
1447pub struct OrderFulfillmentPickupDetailsCurbsidePickupDetails {
1448    #[serde(default, skip_serializing_if = "Option::is_none")]
1449    pub buyer_arrived_at: Option<String>,
1450    #[serde(default, skip_serializing_if = "Option::is_none")]
1451    pub curbside_details: Option<String>,
1452}
1453
1454#[derive(Clone, Serialize, Debug, Deserialize)]
1455pub struct OrderFulfillmentRecipient {
1456    #[serde(default, skip_serializing_if = "Option::is_none")]
1457    pub address: Option<Address>,
1458    #[serde(default, skip_serializing_if = "Option::is_none")]
1459    pub customer_id: Option<String>,
1460    #[serde(default, skip_serializing_if = "Option::is_none")]
1461    pub display_name: Option<String>,
1462    #[serde(default, skip_serializing_if = "Option::is_none")]
1463    pub email_address: Option<String>,
1464    #[serde(default, skip_serializing_if = "Option::is_none")]
1465    pub phone_number: Option<String>,
1466}
1467
1468#[derive(Clone, Serialize, Debug, Deserialize)]
1469pub struct OrderFulfillmentShipmentDetails {
1470    cancel_reason: Option<String>,
1471    #[serde(default, skip_serializing_if = "Option::is_none")]
1472    canceled_at: Option<String>,
1473    #[serde(default, skip_serializing_if = "Option::is_none")]
1474    carrier: Option<String>,
1475    #[serde(default, skip_serializing_if = "Option::is_none")]
1476    expected_shipped_at: Option<String>,
1477    #[serde(default, skip_serializing_if = "Option::is_none")]
1478    failed_at: Option<String>,
1479    #[serde(default, skip_serializing_if = "Option::is_none")]
1480    failure_reason: Option<String>,
1481    #[serde(default, skip_serializing_if = "Option::is_none")]
1482    in_progress_at: Option<String>,
1483    #[serde(default, skip_serializing_if = "Option::is_none")]
1484    packaged_at: Option<String>,
1485    #[serde(default, skip_serializing_if = "Option::is_none")]
1486    placed_at: Option<String>,
1487    #[serde(default, skip_serializing_if = "Option::is_none")]
1488    recipient: Option<OrderFulfillmentRecipient>,
1489    shipped_at: Option<String>,
1490    #[serde(default, skip_serializing_if = "Option::is_none")]
1491    shipping_note: Option<String>,
1492    #[serde(default, skip_serializing_if = "Option::is_none")]
1493    shipping_type: Option<String>,
1494    #[serde(default, skip_serializing_if = "Option::is_none")]
1495    tracking_number: Option<String>,
1496    #[serde(default, skip_serializing_if = "Option::is_none")]
1497    tracking_url: Option<String>,
1498}
1499
1500#[derive(Clone, Serialize, Debug, Deserialize, Default, Builder)]
1501pub struct OrderLineItem {
1502    #[builder_into]
1503    pub quantity: String,
1504    #[serde(default, skip_serializing_if = "Option::is_none")]
1505    pub applied_discounts: Option<Vec<OrderLineItemAppliedDiscount>>,
1506    #[serde(default, skip_serializing_if = "Option::is_none")]
1507    pub applied_taxes: Option<Vec<OrderLineItemAppliedTax>>,
1508    #[serde(default, skip_serializing_if = "Option::is_none")]
1509    pub base_price_money: Option<Money>,
1510    #[serde(default, skip_serializing_if = "Option::is_none")]
1511    #[builder_into]
1512    pub catalog_object_id: Option<String>,
1513    #[serde(default, skip_serializing_if = "Option::is_none")]
1514    pub catalog_version: Option<i64>,
1515    #[serde(default, skip_serializing_if = "Option::is_none")]
1516    pub gross_sales_money: Option<Money>,
1517    #[serde(default, skip_serializing_if = "Option::is_none")]
1518    pub item_type: Option<OrderLineItemItemType>,
1519    #[serde(default, skip_serializing_if = "Option::is_none")]
1520    pub metadata: Option<HashMap<String, String>>,
1521    #[serde(default, skip_serializing_if = "Option::is_none")]
1522    pub modifiers: Option<Vec<OrderLineItemModifier>>,
1523    #[serde(default, skip_serializing_if = "Option::is_none")]
1524    pub name: Option<String>,
1525    #[serde(default, skip_serializing_if = "Option::is_none")]
1526    pub note: Option<String>,
1527    #[serde(default, skip_serializing_if = "Option::is_none")]
1528    pub  pricing_blocklists: Option<OrderLineItemPricingBlocklists>,
1529    #[serde(default, skip_serializing_if = "Option::is_none")]
1530    pub quantity_unit: Option<OrderQuantityUnit>,
1531    #[serde(default, skip_serializing_if = "Option::is_none")]
1532    pub total_discount_money: Option<Money>,
1533    #[serde(default, skip_serializing_if = "Option::is_none")]
1534    pub total_money: Option<Money>,
1535    #[serde(default, skip_serializing_if = "Option::is_none")]
1536    pub total_tax_money: Option<Money>,
1537    #[serde(default, skip_serializing_if = "Option::is_none")]
1538    pub uid: Option<String>,
1539    #[serde(default, skip_serializing_if = "Option::is_none")]
1540    pub variation_name: Option<String>,
1541    #[serde(default, skip_serializing_if = "Option::is_none")]
1542    pub variation_total_price_money: Option<Money>,
1543    #[serde(default, skip_serializing_if = "Option::is_none")]
1544    pub api_reference_ids: Option<HashMap<String, String>>,
1545}
1546
1547#[derive(Clone, Serialize, Debug, Deserialize)]
1548pub struct OrderLineItemAppliedDiscount {
1549    pub discount_uid: String,
1550    #[serde(default, skip_serializing_if = "Option::is_none")]
1551    pub applied_money: Option<Money>,
1552    #[serde(default, skip_serializing_if = "Option::is_none")]
1553    pub uid: Option<String>,
1554}
1555
1556#[derive(Clone, Serialize, Debug, Deserialize)]
1557pub struct OrderLineItemAppliedTax {
1558    pub tax_uid: String,
1559    #[serde(default, skip_serializing_if = "Option::is_none")]
1560    pub  applied_money: Option<Money>,
1561    #[serde(default, skip_serializing_if = "Option::is_none")]
1562    pub uid: Option<String>,
1563}
1564
1565#[derive(Clone, Serialize, Debug, Deserialize)]
1566pub struct OrderLineItemModifier {
1567    #[serde(default, skip_serializing_if = "Option::is_none")]
1568    pub base_price_money: Option<Money>,
1569    #[serde(default, skip_serializing_if = "Option::is_none")]
1570    pub catalog_object_id: Option<String>,
1571    #[serde(default, skip_serializing_if = "Option::is_none")]
1572    pub catalog_version: Option<i64>,
1573    #[serde(default, skip_serializing_if = "Option::is_none")]
1574    pub metadata: Option<HashMap<String, String>>,
1575    #[serde(default, skip_serializing_if = "Option::is_none")]
1576    pub name: Option<String>,
1577    #[serde(default, skip_serializing_if = "Option::is_none")]
1578    pub quantity: Option<String>,
1579    #[serde(default, skip_serializing_if = "Option::is_none")]
1580    pub total_price_money: Option<Money>,
1581    #[serde(default, skip_serializing_if = "Option::is_none")]
1582    pub uid: Option<String>,
1583}
1584
1585#[derive(Clone, Serialize, Debug, Deserialize)]
1586pub struct OrderLineItemPricingBlocklists {
1587    #[serde(default, skip_serializing_if = "Option::is_none")]
1588    pub blocked_discounts: Option<Vec<OrderLineItemPricingBlocklistsBlockedDiscount>>,
1589    #[serde(default, skip_serializing_if = "Option::is_none")]
1590    pub blocked_taxes: Option<Vec<OrderLineItemPricingBlocklistsBlockedTax>>,
1591}
1592
1593#[derive(Clone, Serialize, Debug, Deserialize)]
1594pub struct OrderLineItemPricingBlocklistsBlockedDiscount {
1595    #[serde(default, skip_serializing_if = "Option::is_none")]
1596    pub discount_catalog_object_id: Option<String>,
1597    #[serde(default, skip_serializing_if = "Option::is_none")]
1598    pub discount_uid: Option<String>,
1599    #[serde(default, skip_serializing_if = "Option::is_none")]
1600    pub uid: Option<String>,
1601}
1602
1603#[derive(Clone, Serialize, Debug, Deserialize)]
1604pub struct OrderLineItemPricingBlocklistsBlockedTax {
1605    #[serde(default, skip_serializing_if = "Option::is_none")]
1606    pub tax_catalog_object_id: Option<String>,
1607    #[serde(default, skip_serializing_if = "Option::is_none")]
1608    pub tax_uid: Option<String>,
1609    #[serde(default, skip_serializing_if = "Option::is_none")]
1610    pub uid: Option<String>,
1611}
1612
1613#[derive(Clone, Serialize, Debug, Deserialize)]
1614pub struct OrderQuantityUnit {
1615    #[serde(default, skip_serializing_if = "Option::is_none")]
1616    pub catalog_object_id: Option<String>,
1617    #[serde(default, skip_serializing_if = "Option::is_none")]
1618    pub catalog_version: Option<i64>,
1619    #[serde(default, skip_serializing_if = "Option::is_none")]
1620    pub measurement_unit: Option<MeasurementUnit>,
1621    #[serde(default, skip_serializing_if = "Option::is_none")]
1622    pub precision: Option<i32>,
1623}
1624
1625#[derive(Clone, Serialize, Debug, Deserialize)]
1626pub struct OrderMoneyAmounts {
1627    #[serde(default, skip_serializing_if = "Option::is_none")]
1628    pub discount_money: Option<Money>,
1629    #[serde(default, skip_serializing_if = "Option::is_none")]
1630    pub service_charge_money: Option<Money>,
1631    #[serde(default, skip_serializing_if = "Option::is_none")]
1632    pub tax_money: Option<Money>,
1633    #[serde(default, skip_serializing_if = "Option::is_none")]
1634    pub tip_money: Option<Money>,
1635    #[serde(default, skip_serializing_if = "Option::is_none")]
1636    pub total_money: Option<Money>,
1637}
1638
1639#[derive(Clone, Serialize, Debug, Deserialize)]
1640pub struct OrderPricingOptions {
1641    #[serde(default, skip_serializing_if = "Option::is_none")]
1642    pub auto_apply_discounts: Option<bool>,
1643    #[serde(default, skip_serializing_if = "Option::is_none")]
1644    pub auto_apply_taxes: Option<bool>,
1645}
1646
1647#[derive(Clone, Serialize, Debug, Deserialize)]
1648pub struct Refund {
1649    pub id: String,
1650    pub amount_money: Money,
1651    pub location_id: String,
1652    pub reason: String,
1653    pub status: RefundStatus,
1654    pub tender_id: String,
1655    #[serde(default, skip_serializing_if = "Option::is_none")]
1656    pub created_at: Option<String>,
1657    #[serde(default, skip_serializing_if = "Option::is_none")]
1658    pub processing_fee_money: Option<Money>,
1659    #[serde(default, skip_serializing_if = "Option::is_none")]
1660    pub transaction_id: Option<String>,
1661}
1662
1663#[derive(Clone, Serialize, Debug, Deserialize)]
1664pub struct OrderReturn {
1665    #[serde(default, skip_serializing_if = "Option::is_none")]
1666    pub return_amounts: Option<OrderMoneyAmounts>,
1667    #[serde(default, skip_serializing_if = "Option::is_none")]
1668    pub return_discounts: Option<Vec<OrderReturnDiscount>>,
1669    #[serde(default, skip_serializing_if = "Option::is_none")]
1670    pub return_line_items: Option<Vec<OrderReturnLineItem>>,
1671    #[serde(default, skip_serializing_if = "Option::is_none")]
1672    pub return_service_charges: Option<Vec<OrderReturnServiceCharge>>,
1673    #[serde(default, skip_serializing_if = "Option::is_none")]
1674    pub return_taxes: Option<Vec<OrderReturnTax>>,
1675    #[serde(default, skip_serializing_if = "Option::is_none")]
1676    pub rounding_adjustment: Option<OrderRoundingAdjustment>,
1677    #[serde(default, skip_serializing_if = "Option::is_none")]
1678    pub source_order_id: Option<String>,
1679    #[serde(default, skip_serializing_if = "Option::is_none")]
1680    pub uid: Option<String>,
1681}
1682
1683#[derive(Clone, Serialize, Debug, Deserialize)]
1684pub struct OrderReturnDiscount {
1685    #[serde(default, skip_serializing_if = "Option::is_none")]
1686    pub amount_money: Option<Money>,
1687    #[serde(default, skip_serializing_if = "Option::is_none")]
1688    pub applied_money: Option<Money>,
1689    #[serde(default, skip_serializing_if = "Option::is_none")]
1690    pub catalog_object_id: Option<String>,
1691    #[serde(default, skip_serializing_if = "Option::is_none")]
1692    pub catalog_version: Option<i64>,
1693    #[serde(default, skip_serializing_if = "Option::is_none")]
1694    pub name: Option<String>,
1695    #[serde(default, skip_serializing_if = "Option::is_none")]
1696    pub percentage: Option<String>,
1697    #[serde(default, skip_serializing_if = "Option::is_none")]
1698    pub scope: Option<String>,
1699    #[serde(default, skip_serializing_if = "Option::is_none")]
1700    pub source_discount_uid: Option<String>,
1701    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1702    pub discount_type: Option<OrderLineItemDiscountType>,
1703    #[serde(default, skip_serializing_if = "Option::is_none")]
1704    pub uid: Option<String>,
1705}
1706
1707#[derive(Clone, Serialize, Debug, Deserialize)]
1708pub struct OrderReturnLineItem {
1709    pub quantity: String,
1710    #[serde(default, skip_serializing_if = "Option::is_none")]
1711    pub applied_discounts: Option<Vec<OrderLineItemAppliedDiscount>>,
1712    #[serde(default, skip_serializing_if = "Option::is_none")]
1713    pub applied_taxes: Option<Vec<OrderLineItemAppliedTax>>,
1714    #[serde(default, skip_serializing_if = "Option::is_none")]
1715    pub base_price_money: Option<Money>,
1716    #[serde(default, skip_serializing_if = "Option::is_none")]
1717    pub catalog_object_id: Option<String>,
1718    #[serde(default, skip_serializing_if = "Option::is_none")]
1719    pub catalog_version: Option<i64>,
1720    #[serde(default, skip_serializing_if = "Option::is_none")]
1721    pub gross_return_money: Option<Money>,
1722    #[serde(default, skip_serializing_if = "Option::is_none")]
1723    pub item_type: Option<OrderLineItemItemType>,
1724    #[serde(default, skip_serializing_if = "Option::is_none")]
1725    pub name: Option<String>,
1726    #[serde(default, skip_serializing_if = "Option::is_none")]
1727    pub note: Option<String>,
1728    #[serde(default, skip_serializing_if = "Option::is_none")]
1729    pub quantity_unit: Option<OrderQuantityUnit>,
1730    #[serde(default, skip_serializing_if = "Option::is_none")]
1731    pub return_modifiers: Option<Vec<OrderReturnLineItemModifier>>,
1732    #[serde(default, skip_serializing_if = "Option::is_none")]
1733    pub source_line_item_uid: Option<String>,
1734    #[serde(default, skip_serializing_if = "Option::is_none")]
1735    pub total_discount_money: Option<Money>,
1736    #[serde(default, skip_serializing_if = "Option::is_none")]
1737    pub total_money: Option<Money>,
1738    #[serde(default, skip_serializing_if = "Option::is_none")]
1739    pub total_tax_money: Option<Money>,
1740    #[serde(default, skip_serializing_if = "Option::is_none")]
1741    pub uid: Option<String>,
1742    #[serde(default, skip_serializing_if = "Option::is_none")]
1743    pub variation_name: Option<String>,
1744    #[serde(default, skip_serializing_if = "Option::is_none")]
1745    pub variation_total_price_money: Option<Money>,
1746}
1747
1748#[derive(Clone, Serialize, Debug, Deserialize)]
1749pub struct OrderReturnLineItemModifier {
1750    #[serde(default, skip_serializing_if = "Option::is_none")]
1751    pub base_price_money: Option<Money>,
1752    #[serde(default, skip_serializing_if = "Option::is_none")]
1753    pub catalog_object_id: Option<String>,
1754    #[serde(default, skip_serializing_if = "Option::is_none")]
1755    pub catalog_version: Option<i64>,
1756    #[serde(default, skip_serializing_if = "Option::is_none")]
1757    pub name: Option<String>,
1758    #[serde(default, skip_serializing_if = "Option::is_none")]
1759    pub source_modifier_uid: Option<String>,
1760    #[serde(default, skip_serializing_if = "Option::is_none")]
1761    pub total_price_money: Option<Money>,
1762    #[serde(default, skip_serializing_if = "Option::is_none")]
1763    pub uid: Option<String>,
1764}
1765
1766#[derive(Clone, Serialize, Debug, Deserialize)]
1767pub struct OrderReturnServiceCharge {
1768    #[serde(default, skip_serializing_if = "Option::is_none")]
1769    pub amount_money: Option<Money>,
1770    #[serde(default, skip_serializing_if = "Option::is_none")]
1771    pub applied_money: Option<Money>,
1772    #[serde(default, skip_serializing_if = "Option::is_none")]
1773    pub applied_taxes: Option<Vec<OrderLineItemAppliedTax>>,
1774    #[serde(default, skip_serializing_if = "Option::is_none")]
1775    pub calculation_phase: Option<String>,
1776    #[serde(default, skip_serializing_if = "Option::is_none")]
1777    pub catalog_object_id: Option<String>,
1778    #[serde(default, skip_serializing_if = "Option::is_none")]
1779    pub catalog_version: Option<i64>,
1780    #[serde(default, skip_serializing_if = "Option::is_none")]
1781    pub name: Option<String>,
1782    #[serde(default, skip_serializing_if = "Option::is_none")]
1783    pub percentage: Option<String>,
1784    #[serde(default, skip_serializing_if = "Option::is_none")]
1785    pub source_service_charge_uid: Option<String>,
1786    #[serde(default, skip_serializing_if = "Option::is_none")]
1787    pub taxable: Option<bool>,
1788    #[serde(default, skip_serializing_if = "Option::is_none")]
1789    pub total_money: Option<Money>,
1790    #[serde(default, skip_serializing_if = "Option::is_none")]
1791    pub total_tax_money: Option<Money>,
1792    #[serde(default, skip_serializing_if = "Option::is_none")]
1793    pub uid: Option<String>,
1794}
1795
1796#[derive(Clone, Serialize, Debug, Deserialize)]
1797pub struct OrderReturnTax {
1798    #[serde(default, skip_serializing_if = "Option::is_none")]
1799    pub applied_money: Option<Money>,
1800    #[serde(default, skip_serializing_if = "Option::is_none")]
1801    pub catalog_object_id: Option<String>,
1802    #[serde(default, skip_serializing_if = "Option::is_none")]
1803    pub catalog_version: Option<i64>,
1804    #[serde(default, skip_serializing_if = "Option::is_none")]
1805    pub name: Option<String>,
1806    #[serde(default, skip_serializing_if = "Option::is_none")]
1807    pub percentage: Option<String>,
1808    #[serde(default, skip_serializing_if = "Option::is_none")]
1809    pub scope: Option<OrderLineItemTaxScope>,
1810    #[serde(default, skip_serializing_if = "Option::is_none")]
1811    pub source_tax_uid: Option<String>,
1812    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1813    pub calculation_type: Option<OrderLineItemTaxType>,
1814    #[serde(default, skip_serializing_if = "Option::is_none")]
1815    pub uid: Option<String>,
1816}
1817
1818#[derive(Clone, Serialize, Debug, Deserialize)]
1819pub struct OrderRoundingAdjustment {
1820    #[serde(default, skip_serializing_if = "Option::is_none")]
1821    pub amount_money: Option<Money>,
1822    #[serde(default, skip_serializing_if = "Option::is_none")]
1823    pub name: Option<String>,
1824    #[serde(default, skip_serializing_if = "Option::is_none")]
1825    pub uid: Option<String>,
1826}
1827
1828#[derive(Clone, Serialize, Debug, Deserialize)]
1829pub struct OrderReward {
1830    pub id: String,
1831    pub reward_tier_id: String
1832}
1833
1834#[derive(Clone, Serialize, Debug, Deserialize, Default, Builder)]
1835pub struct OrderServiceCharge {
1836    #[serde(default, skip_serializing_if = "Option::is_none")]
1837    pub amount_money: Option<Money>,
1838    #[serde(default, skip_serializing_if = "Option::is_none")]
1839    pub applied_money: Option<Money>,
1840    #[serde(default, skip_serializing_if = "Option::is_none")]
1841    pub applied_taxes: Option<Vec<OrderLineItemAppliedTax>>,
1842    #[serde(default, skip_serializing_if = "Option::is_none")]
1843    pub calculation_phase: Option<OrderServiceChargeCalculationPhase>,
1844    #[serde(default, skip_serializing_if = "Option::is_none")]
1845    #[builder_into]
1846    pub catalog_object_id: Option<String>,
1847    #[serde(default, skip_serializing_if = "Option::is_none")]
1848    pub catalog_version: Option<i64>,
1849    #[serde(default, skip_serializing_if = "Option::is_none")]
1850    pub metadata: Option<HashMap<String, String>>,
1851    #[serde(default, skip_serializing_if = "Option::is_none")]
1852    #[builder_into]
1853    #[builder_validate("is_some")]
1854    pub name: Option<String>,
1855    #[serde(default, skip_serializing_if = "Option::is_none")]
1856    #[builder_into]
1857    pub percentage: Option<String>,
1858    #[serde(default, skip_serializing_if = "Option::is_none")]
1859    pub taxable: Option<bool>,
1860    #[serde(default, skip_serializing_if = "Option::is_none")]
1861    pub total_money: Option<Money>,
1862    #[serde(default, skip_serializing_if = "Option::is_none")]
1863    pub total_tax_money: Option<Money>,
1864    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1865    pub service_charge_type: Option<OrderServiceChargeType>,
1866    #[serde(default, skip_serializing_if = "Option::is_none")]
1867    pub uid: Option<String>,
1868}
1869
1870#[derive(Clone, Serialize, Debug, Deserialize)]
1871pub struct OrderSource {
1872    #[serde(default, skip_serializing_if = "Option::is_none")]
1873    pub name: Option<String>
1874}
1875
1876#[derive(Clone, Serialize, Debug, Deserialize)]
1877pub struct OrderLineItemTax {
1878    pub applied_money: Option<Money>,
1879    #[serde(default, skip_serializing_if = "Option::is_none")]
1880    pub auto_applied: Option<bool>,
1881    #[serde(default, skip_serializing_if = "Option::is_none")]
1882    pub catalog_object_id: Option<String>,
1883    #[serde(default, skip_serializing_if = "Option::is_none")]
1884    pub catalog_version: Option<i64>,
1885    #[serde(default, skip_serializing_if = "Option::is_none")]
1886    pub metadata: Option<HashMap<String, String>>,
1887    #[serde(default, skip_serializing_if = "Option::is_none")]
1888    pub name: Option<String>,
1889    #[serde(default, skip_serializing_if = "Option::is_none")]
1890    pub percentage: Option<String>,
1891    #[serde(default, skip_serializing_if = "Option::is_none")]
1892    pub scope: Option<OrderLineItemTaxScope>,
1893    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1894    pub calculation_method_type: Option<OrderLineItemTaxType>,
1895    #[serde(default, skip_serializing_if = "Option::is_none")]
1896    pub uid: Option<String>,
1897}
1898
1899#[derive(Clone, Serialize, Debug, Deserialize)]
1900pub struct Tender {
1901    #[serde(default, skip_serializing_if = "Option::is_none")]
1902    pub id: Option<String>,
1903    #[serde(rename = "type")]
1904    pub tender_type: TenderType,
1905    #[serde(default, skip_serializing_if = "Option::is_none")]
1906    pub amount_money: Option<Money>,
1907    #[serde(default, skip_serializing_if = "Option::is_none")]
1908    pub card_details: Option<TenderCardDetails>,
1909    #[serde(default, skip_serializing_if = "Option::is_none")]
1910    pub cash_details: Option<TenderCashDetails>,
1911    #[serde(default, skip_serializing_if = "Option::is_none")]
1912    pub created_at: Option<String>,
1913    #[serde(default, skip_serializing_if = "Option::is_none")]
1914    pub customer_id: Option<String>,
1915    #[serde(default, skip_serializing_if = "Option::is_none")]
1916    pub location_id: Option<String>,
1917    #[serde(default, skip_serializing_if = "Option::is_none")]
1918    pub note: Option<String>,
1919    #[serde(default, skip_serializing_if = "Option::is_none")]
1920    pub payment_id: Option<String>,
1921    #[serde(default, skip_serializing_if = "Option::is_none")]
1922    pub processing_fee_money: Option<Money>,
1923    #[serde(default, skip_serializing_if = "Option::is_none")]
1924    pub tip_money: Option<Money>,
1925    #[serde(default, skip_serializing_if = "Option::is_none")]
1926    pub transaction_id: Option<String>,
1927}
1928
1929#[derive(Clone, Serialize, Debug, Deserialize)]
1930pub struct TenderCardDetails {
1931    #[serde(default, skip_serializing_if = "Option::is_none")]
1932    pub card: Option<Card>,
1933    #[serde(default, skip_serializing_if = "Option::is_none")]
1934    pub entry_method: Option<TenderCardDetailsEntryMethod>,
1935    #[serde(default, skip_serializing_if = "Option::is_none")]
1936    pub status: Option<TenderCardDetailsStatus>
1937}
1938
1939#[derive(Clone, Serialize, Debug, Deserialize)]
1940pub struct TenderCashDetails {
1941    #[serde(default, skip_serializing_if = "Option::is_none")]
1942    pub buyer_tendered_money: Option<Money>,
1943    #[serde(default, skip_serializing_if = "Option::is_none")]
1944    pub change_back_money: Option<Money>,
1945}
1946
1947#[derive(Clone, Serialize, Debug, Deserialize)]
1948pub struct Checkout {
1949    pub id: String,
1950    #[serde(default, skip_serializing_if = "Option::is_none")]
1951    pub ask_for_shipping_address: Option<bool>,
1952    #[serde(default, skip_serializing_if = "Option::is_none")]
1953    pub checkout_page_url: Option<String>,
1954    #[serde(default, skip_serializing_if = "Option::is_none")]
1955    pub created_at: Option<String>,
1956    #[serde(default, skip_serializing_if = "Option::is_none")]
1957    pub merchant_support_email: Option<String>,
1958    #[serde(default, skip_serializing_if = "Option::is_none")]
1959    pub order: Option<Order>,
1960    #[serde(default, skip_serializing_if = "Option::is_none")]
1961    pub pre_populate_buyer_email: Option<String>,
1962    #[serde(default, skip_serializing_if = "Option::is_none")]
1963    pub pre_populate_shipping_address: Option<Address>,
1964    #[serde(default, skip_serializing_if = "Option::is_none")]
1965    pub redirect_url: Option<String>,
1966}
1967
1968#[derive(Clone, Serialize, Debug, Deserialize, Default, Builder)]
1969pub struct PaymentLink {
1970    #[serde(default, skip_serializing_if = "Option::is_none")]
1971    #[builder_into]
1972    #[builder_vis("private")]
1973    pub id: Option<String>,
1974    pub version: i32,
1975    #[serde(default, skip_serializing_if = "Option::is_none")]
1976    pub checkout_options: Option<CheckoutOptions>,
1977    #[serde(default, skip_serializing_if = "Option::is_none")]
1978    #[builder_into]
1979    pub created_at: Option<String>,
1980    #[serde(default, skip_serializing_if = "Option::is_none")]
1981    #[builder_into]
1982    pub description: Option<String>,
1983    #[serde(default, skip_serializing_if = "Option::is_none")]
1984    #[builder_into]
1985    pub order_id: Option<String>,
1986    #[serde(default, skip_serializing_if = "Option::is_none")]
1987    #[builder_into]
1988    pub payment_note: Option<String>,
1989    #[serde(default, skip_serializing_if = "Option::is_none")]
1990    pub pre_populated_data: Option<PrePopulatedData>,
1991    #[serde(default, skip_serializing_if = "Option::is_none")]
1992    #[builder_into]
1993    pub updated_at: Option<String>,
1994    #[serde(default, skip_serializing_if = "Option::is_none")]
1995    #[builder_into]
1996    pub url: Option<String>,
1997}
1998
1999#[derive(Clone, Serialize, Debug, Deserialize)]
2000pub struct CheckoutOptions {
2001    #[serde(default, skip_serializing_if = "Option::is_none")]
2002    pub accepted_payment_methods: Option<AcceptedPaymentMethods>,
2003    #[serde(default, skip_serializing_if = "Option::is_none")]
2004    pub allow_tipping: Option<bool>,
2005    #[serde(default, skip_serializing_if = "Option::is_none")]
2006    pub ask_for_shipping_address: Option<bool>,
2007    #[serde(default, skip_serializing_if = "Option::is_none")]
2008    pub custom_fields: Option<Vec<CustomField>>,
2009    #[serde(default, skip_serializing_if = "Option::is_none")]
2010    pub merchant_support_email: Option<String>,
2011    #[serde(default, skip_serializing_if = "Option::is_none")]
2012    pub redirect_url: Option<String>,
2013    #[serde(default, skip_serializing_if = "Option::is_none")]
2014    pub subscription_plan_id: Option<String>,
2015}
2016
2017#[derive(Clone, Serialize, Debug, Deserialize)]
2018pub struct AcceptedPaymentMethods {
2019    #[serde(default, skip_serializing_if = "Option::is_none")]
2020    pub afterpay_clearpay: Option<bool>,
2021    #[serde(default, skip_serializing_if = "Option::is_none")]
2022    pub apple_pay: Option<bool>,
2023    #[serde(default, skip_serializing_if = "Option::is_none")]
2024    pub cash_app_pay: Option<bool>,
2025    #[serde(default, skip_serializing_if = "Option::is_none")]
2026    pub google_pay: Option<bool>,
2027}
2028
2029#[derive(Clone, Serialize, Debug, Deserialize)]
2030pub struct CustomField {
2031    pub title: String,
2032}
2033
2034#[derive(Clone, Serialize, Debug, Deserialize)]
2035pub struct PrePopulatedData {
2036    #[serde(default, skip_serializing_if = "Option::is_none")]
2037    pub buyer_address: Option<Address>,
2038    #[serde(default, skip_serializing_if = "Option::is_none")]
2039    pub buyer_email: Option<String>,
2040    #[serde(default, skip_serializing_if = "Option::is_none")]
2041    pub buyer_phone_number: Option<String>,
2042}
2043
2044#[derive(Clone, Serialize, Debug, Deserialize)]
2045pub struct QuickPay {
2046    pub location_id: String,
2047    pub name: String,
2048    pub price_money: Money,
2049}
2050
2051#[derive(Clone, Serialize, Debug, Deserialize)]
2052pub struct CatalogQuery {
2053    #[serde(default, skip_serializing_if = "Option::is_none")]
2054    pub exact_query: Option<CatalogQueryExact>,
2055    #[serde(default, skip_serializing_if = "Option::is_none")]
2056    pub item_variations_for_item_option_values_query: Option<CatalogQueryItemVariationsForItemOptionValues>,
2057    #[serde(default, skip_serializing_if = "Option::is_none")]
2058    pub items_for_item_options_query: Option<CatalogQueryItemsForItemOptions>,
2059    #[serde(default, skip_serializing_if = "Option::is_none")]
2060    pub items_for_modifier_list_query: Option<CatalogQueryItemsForModifierList>,
2061    #[serde(default, skip_serializing_if = "Option::is_none")]
2062    pub items_for_tax_query: Option<CatalogQueryItemsForTax>,
2063    #[serde(default, skip_serializing_if = "Option::is_none")]
2064    pub prefix_query: Option<CatalogQueryPrefix>,
2065    #[serde(default, skip_serializing_if = "Option::is_none")]
2066    pub range_query: Option<CatalogQueryRange>,
2067    #[serde(default, skip_serializing_if = "Option::is_none")]
2068    pub set_query: Option<CatalogQuerySet>,
2069    #[serde(default, skip_serializing_if = "Option::is_none")]
2070    pub sorted_attribute_query: Option<CatalogQuerySortedAttribute>,
2071    #[serde(default, skip_serializing_if = "Option::is_none")]
2072    pub text_query: Option<CatalogQueryText>,
2073}
2074
2075#[derive(Clone, Serialize, Debug, Deserialize)]
2076pub struct CatalogQueryExact {
2077    pub attribute_name: String,
2078    pub attribute_value: String,
2079}
2080
2081#[derive(Clone, Serialize, Debug, Deserialize)]
2082pub struct CatalogQueryItemVariationsForItemOptionValues {
2083    #[serde(default, skip_serializing_if = "Option::is_none")]
2084    pub item_option_value_ids: Option<Vec<String>>,
2085}
2086
2087#[derive(Clone, Serialize, Debug, Deserialize)]
2088pub struct CatalogQueryItemsForItemOptions {
2089    #[serde(default, skip_serializing_if = "Option::is_none")]
2090    pub item_option_ids: Option<Vec<String>>,
2091}
2092
2093#[derive(Clone, Serialize, Debug, Deserialize)]
2094pub struct CatalogQueryItemsForModifierList {
2095    pub modifier_list_ids: Vec<String>,
2096}
2097
2098#[derive(Clone, Serialize, Debug, Deserialize)]
2099pub struct CatalogQueryItemsForTax {
2100    pub tax_ids: Vec<String>,
2101}
2102
2103#[derive(Clone, Serialize, Debug, Deserialize)]
2104pub struct CatalogQueryPrefix {
2105    pub attribute_name: String,
2106    pub attribute_prefix: String,
2107}
2108
2109#[derive(Clone, Serialize, Debug, Deserialize)]
2110pub struct CatalogQueryRange {
2111    pub attribute_name: String,
2112    #[serde(default, skip_serializing_if = "Option::is_none")]
2113    pub attribute_max_value: Option<i64>,
2114    #[serde(default, skip_serializing_if = "Option::is_none")]
2115    pub attribute_min_value: Option<i64>,
2116}
2117
2118#[derive(Clone, Serialize, Debug, Deserialize)]
2119pub struct CatalogQuerySet {
2120    pub attribute_name: String,
2121    pub attribute_values: Vec<String>,
2122}
2123
2124#[derive(Clone, Serialize, Debug, Deserialize)]
2125pub struct CatalogQuerySortedAttribute {
2126    pub attribute_name: String,
2127    #[serde(default, skip_serializing_if = "Option::is_none")]
2128    pub initial_attribute_value: Option<String>,
2129    #[serde(default, skip_serializing_if = "Option::is_none")]
2130    pub sort_order: Option<SortOrder>,
2131}
2132
2133#[derive(Clone, Serialize, Debug, Deserialize)]
2134pub struct CatalogQueryText {
2135    pub keywords: Vec<String>,
2136}
2137
2138#[derive(Clone, Serialize, Debug, Deserialize)]
2139pub struct CatalogInfoResponseLimits {
2140    #[serde(default, skip_serializing_if = "Option::is_none")]
2141    pub batch_delete_max_object_ids: Option<i32>,
2142    #[serde(default, skip_serializing_if = "Option::is_none")]
2143    pub batch_retrieve_max_object_ids: Option<i32>,
2144    #[serde(default, skip_serializing_if = "Option::is_none")]
2145    pub batch_upsert_max_objects_per_batch: Option<i32>,
2146    #[serde(default, skip_serializing_if = "Option::is_none")]
2147    pub batch_upsert_max_total_objects: Option<i32>,
2148    #[serde(default, skip_serializing_if = "Option::is_none")]
2149    pub search_max_page_limit: Option<i32>,
2150    #[serde(default, skip_serializing_if = "Option::is_none")]
2151    pub update_item_modifier_lists_max_item_ids: Option<i32>,
2152    #[serde(default, skip_serializing_if = "Option::is_none")]
2153    pub update_item_modifier_lists_max_modifier_lists_to_disable: Option<i32>,
2154    #[serde(default, skip_serializing_if = "Option::is_none")]
2155    pub update_item_modifier_lists_max_modifier_lists_to_enable: Option<i32>,
2156    #[serde(default, skip_serializing_if = "Option::is_none")]
2157    pub update_item_taxes_max_item_ids: Option<i32>,
2158    #[serde(default, skip_serializing_if = "Option::is_none")]
2159    pub update_item_taxes_max_taxes_to_disable: Option<i32>,
2160    #[serde(default, skip_serializing_if = "Option::is_none")]
2161    pub update_item_taxes_max_taxes_to_enable: Option<i32>,
2162}
2163
2164#[derive(Clone, Serialize, Debug, Deserialize)]
2165pub struct StandardUnitDescriptionGroup {
2166    #[serde(default, skip_serializing_if = "Option::is_none")]
2167    pub language_code: Option<String>,
2168    #[serde(default, skip_serializing_if = "Option::is_none")]
2169    pub standard_unit_descriptions: Option<Vec<StandardUnitDescription>>,
2170}
2171
2172#[derive(Clone, Serialize, Debug, Deserialize)]
2173pub struct StandardUnitDescription {
2174    #[serde(default, skip_serializing_if = "Option::is_none")]
2175    pub abbreviation: Option<String>,
2176    #[serde(default, skip_serializing_if = "Option::is_none")]
2177    pub name: Option<String>,
2178    #[serde(default, skip_serializing_if = "Option::is_none")]
2179    pub unit: Option<MeasurementUnit>,
2180}
2181
2182#[derive(Clone, Serialize, Debug, Deserialize)]
2183pub struct CustomAttributeFilter {
2184    #[serde(default, skip_serializing_if = "Option::is_none")]
2185    bool_filter: Option<bool>,
2186    #[serde(default, skip_serializing_if = "Option::is_none")]
2187    custom_attribute_definition_id: Option<String>,
2188    #[serde(default, skip_serializing_if = "Option::is_none")]
2189    key: Option<String>,
2190    #[serde(default, skip_serializing_if = "Option::is_none")]
2191    number_filter: Option<Range>,
2192    #[serde(default, skip_serializing_if = "Option::is_none")]
2193    selection_uids_filter: Option<Vec<String>>,
2194    #[serde(default, skip_serializing_if = "Option::is_none")]
2195    string_filter: Option<String>,
2196}
2197
2198#[derive(Clone, Serialize, Debug, Deserialize)]
2199pub struct Range {
2200    #[serde(default, skip_serializing_if = "Option::is_none")]
2201    pub max: Option<String>,
2202    #[serde(default, skip_serializing_if = "Option::is_none")]
2203    pub min: Option<String>,
2204}
2205
2206#[derive(Clone, Serialize, Debug, Deserialize)]
2207pub struct InventoryCount {
2208    #[serde(default, skip_serializing_if = "Option::is_none")]
2209    pub calculated_at: Option<String>,
2210    #[serde(default, skip_serializing_if = "Option::is_none")]
2211    pub catalog_object_id: Option<String>,
2212    #[serde(default, skip_serializing_if = "Option::is_none")]
2213    pub catalog_object_type: Option<CatalogObjectType>,
2214    #[serde(default, skip_serializing_if = "Option::is_none")]
2215    pub is_estimated: Option<bool>,
2216    #[serde(default, skip_serializing_if = "Option::is_none")]
2217    pub location_id: Option<String>,
2218    #[serde(default, skip_serializing_if = "Option::is_none")]
2219    pub quantity: Option<String>,
2220    #[serde(default, skip_serializing_if = "Option::is_none")]
2221    pub state: Option<InventoryState>,
2222}
2223
2224#[derive(Clone, Serialize, Debug, Deserialize, Default)]
2225pub struct InventoryChange {
2226    #[serde(default, skip_serializing_if = "Option::is_none")]
2227    pub adjustment: Option<InventoryAdjustment>,
2228    #[serde(default, skip_serializing_if = "Option::is_none")]
2229    pub measurement_unit: Option<CatalogMeasurementUnit>,
2230    #[serde(default, skip_serializing_if = "Option::is_none")]
2231    pub measurement_unit_id: Option<String>,
2232    #[serde(default, skip_serializing_if = "Option::is_none")]
2233    pub physical_count: Option<InventoryPhysicalCount>,
2234    #[serde(default, skip_serializing_if = "Option::is_none")]
2235    pub transfer: Option<InventoryTransfer>,
2236    #[serde(rename = "type")]
2237    pub inventory_change_type: InventoryChangeType,
2238}
2239
2240impl AddField<InventoryPhysicalCount> for InventoryChange {
2241    fn add_field(&mut self, field: InventoryPhysicalCount) {
2242        self.physical_count = Some(field)
2243    }
2244}
2245
2246#[derive(Clone, Serialize, Debug, Deserialize)]
2247pub struct InventoryAdjustment {
2248    #[serde(default, skip_serializing_if = "Option::is_none")]
2249    pub id: Option<String>,
2250    #[serde(default, skip_serializing_if = "Option::is_none")]
2251    pub adjustment_group: Option<InventoryAdjustmentGroup>,
2252    pub catalog_object_id: String,
2253    #[serde(default, skip_serializing_if = "Option::is_none")]
2254    pub catalog_object_type: Option<CatalogObjectType>,
2255    #[serde(default, skip_serializing_if = "Option::is_none")]
2256    pub created_at: Option<String>,
2257    #[serde(default, skip_serializing_if = "Option::is_none")]
2258    pub employee_id: Option<String>,
2259    #[serde(default, skip_serializing_if = "Option::is_none")]
2260    pub from_state: Option<InventoryState>,
2261    #[serde(default, skip_serializing_if = "Option::is_none")]
2262    pub goods_receipt_id: Option<String>,
2263    pub location_id: String,
2264    #[serde(default, skip_serializing_if = "Option::is_none")]
2265    pub occurred_at: Option<String>,
2266    #[serde(default, skip_serializing_if = "Option::is_none")]
2267    pub purchase_order_id: Option<String>,
2268    #[serde(default, skip_serializing_if = "Option::is_none")]
2269    pub quantity: Option<String>,
2270    #[serde(default, skip_serializing_if = "Option::is_none")]
2271    pub reference_id: Option<String>,
2272    #[serde(default, skip_serializing_if = "Option::is_none")]
2273    pub refund_id: Option<String>,
2274    #[serde(default, skip_serializing_if = "Option::is_none")]
2275    pub source: Option<SourceApplication>,
2276    #[serde(default, skip_serializing_if = "Option::is_none")]
2277    pub team_member_id: Option<String>,
2278    #[serde(default, skip_serializing_if = "Option::is_none")]
2279    pub to_state: Option<InventoryState>,
2280    #[serde(default, skip_serializing_if = "Option::is_none")]
2281    pub total_price_money: Option<Money>,
2282    #[serde(default, skip_serializing_if = "Option::is_none")]
2283    pub transaction_id: Option<String>,
2284}
2285
2286#[derive(Clone, Serialize, Debug, Deserialize)]
2287pub struct InventoryAdjustmentGroup {
2288    #[serde(default, skip_serializing_if = "Option::is_none")]
2289    pub id: Option<String>,
2290    #[serde(default, skip_serializing_if = "Option::is_none")]
2291    pub from_state: Option<InventoryState>,
2292    #[serde(default, skip_serializing_if = "Option::is_none")]
2293    pub root_adjustment_id: Option<String>,
2294    #[serde(default, skip_serializing_if = "Option::is_none")]
2295    pub to_state: Option<InventoryState>,
2296}
2297
2298#[derive(Clone, Serialize, Debug, Deserialize, Default, Builder)]
2299pub struct InventoryPhysicalCount {
2300    #[serde(default, skip_serializing_if = "Option::is_none")]
2301    #[builder_vis("private")]
2302    pub id: Option<String>,
2303    pub catalog_object_id: String,
2304    #[serde(default, skip_serializing_if = "Option::is_none")]
2305    pub catalog_object_type: Option<CatalogObjectType>,
2306    #[serde(default, skip_serializing_if = "Option::is_none")]
2307    pub created_at: Option<String>,
2308    pub location_id: String,
2309    pub occurred_at: String,
2310    pub quantity: String, /// As decimal with up to 5 digits after the decimal point
2311    #[serde(default, skip_serializing_if = "Option::is_none")]
2312    pub reference_id: Option<String>,
2313    #[serde(default, skip_serializing_if = "Option::is_none")]
2314    pub source: Option<SourceApplication>,
2315    pub state: InventoryState,
2316    #[serde(default, skip_serializing_if = "Option::is_none")]
2317    pub team_member_id: Option<String>,
2318}
2319
2320#[derive(Clone, Serialize, Debug, Deserialize)]
2321pub struct InventoryTransfer {
2322    #[serde(default, skip_serializing_if = "Option::is_none")]
2323    pub id: Option<String>,
2324    pub catalog_object_id: String,
2325    #[serde(default, skip_serializing_if = "Option::is_none")]
2326    pub catalog_object_type: Option<String>,
2327    #[serde(default, skip_serializing_if = "Option::is_none")]
2328    pub created_at: Option<String>,
2329    #[serde(default, skip_serializing_if = "Option::is_none")]
2330    pub employee_id: Option<String>,
2331    pub from_location_id: String,
2332    pub occurred_at: String,
2333    pub quantity: String,
2334    #[serde(default, skip_serializing_if = "Option::is_none")]
2335    pub reference_id: Option<String>,
2336    #[serde(default, skip_serializing_if = "Option::is_none")]
2337    pub source: Option<SourceApplication>,
2338    pub state: InventoryState,
2339    #[serde(default, skip_serializing_if = "Option::is_none")]
2340    pub team_member_id: Option<String>,
2341    pub to_location_id: String,
2342}
2343
2344#[derive(Clone, Serialize, Debug, Deserialize, Default)]
2345pub struct Payment {
2346    #[serde(default, skip_serializing_if = "Option::is_none")]
2347    pub id: Option<String>,
2348    #[serde(default, skip_serializing_if = "Option::is_none")]
2349    pub amount_money: Option<Money>,
2350    #[serde(default, skip_serializing_if = "Option::is_none")]
2351    pub app_fee_money: Option<Money>,
2352    #[serde(default, skip_serializing_if = "Option::is_none")]
2353    pub application_details: Option<ApplicationDetails>,
2354    #[serde(default, skip_serializing_if = "Option::is_none")]
2355    pub approved_money: Option<Money>,
2356    #[serde(default, skip_serializing_if = "Option::is_none")]
2357    pub bank_account_details: Option<BankAccountPaymentDetails>,
2358    #[serde(default, skip_serializing_if = "Option::is_none")]
2359    pub billing_address: Option<Address>,
2360    #[serde(default, skip_serializing_if = "Option::is_none")]
2361    pub buy_now_pay_later_details: Option<BuyNowPayLaterDetails>,
2362    #[serde(default, skip_serializing_if = "Option::is_none")]
2363    pub buyer_email_address: Option<String>,
2364    #[serde(default, skip_serializing_if = "Option::is_none")]
2365    pub capabilities: Option<Vec<String>>,
2366    #[serde(default, skip_serializing_if = "Option::is_none")]
2367    pub card_details: Option<CardPaymentDetails>,
2368    #[serde(default, skip_serializing_if = "Option::is_none")]
2369    pub cash_details: Option<CashPaymentDetails>,
2370    #[serde(default, skip_serializing_if = "Option::is_none")]
2371    pub created_at: Option<String>,
2372    #[serde(default, skip_serializing_if = "Option::is_none")]
2373    pub customer_id: Option<String>,
2374    #[serde(default, skip_serializing_if = "Option::is_none")]
2375    pub delay_action: Option<String>,
2376    #[serde(default, skip_serializing_if = "Option::is_none")]
2377    pub delay_duration: Option<String>,
2378    #[serde(default, skip_serializing_if = "Option::is_none")]
2379    pub delayed_until: Option<String>,
2380    #[serde(default, skip_serializing_if = "Option::is_none")]
2381    pub device_details: Option<DeviceDetails>,
2382    #[serde(default, skip_serializing_if = "Option::is_none")]
2383    pub external_details: Option<ExternalPaymentDetails>,
2384    #[serde(default, skip_serializing_if = "Option::is_none")]
2385    pub location_id: Option<String>,
2386    #[serde(default, skip_serializing_if = "Option::is_none")]
2387    pub note: Option<String>,
2388    #[serde(default, skip_serializing_if = "Option::is_none")]
2389    pub order_id: Option<String>,
2390    #[serde(default, skip_serializing_if = "Option::is_none")]
2391    pub processing_fee: Option<ProcessingFee>,
2392    #[serde(default, skip_serializing_if = "Option::is_none")]
2393    pub receipt_number: Option<String>,
2394    #[serde(default, skip_serializing_if = "Option::is_none")]
2395    pub receipt_url: Option<String>,
2396    #[serde(default, skip_serializing_if = "Option::is_none")]
2397    pub reference_id: Option<String>,
2398    #[serde(default, skip_serializing_if = "Option::is_none")]
2399    pub refund_ids: Option<Vec<String>>,
2400    #[serde(default, skip_serializing_if = "Option::is_none")]
2401    pub refunded_money: Option<Money>,
2402    #[serde(default, skip_serializing_if = "Option::is_none")]
2403    pub risk_evaluation: Option<RiskEvaluation>,
2404    #[serde(default, skip_serializing_if = "Option::is_none")]
2405    pub shipping_address: Option<Address>,
2406    #[serde(default, skip_serializing_if = "Option::is_none")]
2407    pub source_type: Option<PaymentSourceType>,
2408    #[serde(default, skip_serializing_if = "Option::is_none")]
2409    pub statement_description_identifier: Option<String>,
2410    #[serde(default, skip_serializing_if = "Option::is_none")]
2411    pub status: Option<String>,
2412    #[serde(default, skip_serializing_if = "Option::is_none")]
2413    pub team_member_id: Option<String>,
2414    #[serde(default, skip_serializing_if = "Option::is_none")]
2415    pub tip_money: Option<Money>,
2416    #[serde(default, skip_serializing_if = "Option::is_none")]
2417    pub total_money: Option<Money>,
2418    #[serde(default, skip_serializing_if = "Option::is_none")]
2419    pub updated_at: Option<String>,
2420    #[serde(default, skip_serializing_if = "Option::is_none")]
2421    pub version_token: Option<String>,
2422    #[serde(default, skip_serializing_if = "Option::is_none")]
2423    pub wallet_details: Option<DigitalWalletDetails>
2424}
2425
2426#[derive(Clone, Serialize, Debug, Deserialize)]
2427pub struct CashPaymentDetails {
2428    pub buyer_supplied_money: Money,
2429    #[serde(default, skip_serializing_if = "Option::is_none")]
2430    pub change_back_money: Option<Money>,
2431}
2432
2433#[derive(Clone, Serialize, Debug, Deserialize)]
2434pub struct ExternalPaymentDetails {
2435    pub source: String,
2436    #[serde(rename = "type")]
2437    pub payment_type: PaymentType,
2438    #[serde(default, skip_serializing_if = "Option::is_none")]
2439    pub source_fee_money: Option<Money>,
2440    #[serde(default, skip_serializing_if = "Option::is_none")]
2441    pub source_id: Option<String>,
2442}
2443
2444#[derive(Clone, Serialize, Debug, Deserialize)]
2445pub struct ApplicationDetails {
2446    #[serde(default, skip_serializing_if = "Option::is_none")]
2447    pub application_id: Option<String>,
2448    #[serde(default, skip_serializing_if = "Option::is_none")]
2449    pub square_product: Option<ApplicationDetailsExternalSquareProduct>,
2450}
2451
2452#[derive(Clone, Serialize, Debug, Deserialize)]
2453pub struct BankAccountPaymentDetails {
2454    #[serde(default, skip_serializing_if = "Option::is_none")]
2455    pub account_ownership_type: Option<BankAccountOwnershipType>,
2456    #[serde(default, skip_serializing_if = "Option::is_none")]
2457    pub ach_details: Option<ACHDetails>,
2458    #[serde(default, skip_serializing_if = "Option::is_none")]
2459    pub bank_name: Option<String>,
2460    #[serde(default, skip_serializing_if = "Option::is_none")]
2461    pub country: Option<String>,
2462    #[serde(default, skip_serializing_if = "Option::is_none")]
2463    pub errors: Option<Vec<ResponseError>>,
2464    #[serde(default, skip_serializing_if = "Option::is_none")]
2465    pub fingerprint: Option<String>,
2466    #[serde(default, skip_serializing_if = "Option::is_none")]
2467    pub statement_description: Option<String>,
2468    #[serde(default, skip_serializing_if = "Option::is_none")]
2469    pub transfer_type: Option<String>,
2470}
2471
2472#[derive(Clone, Serialize, Debug, Deserialize)]
2473pub struct ACHDetails {
2474    #[serde(default, skip_serializing_if = "Option::is_none")]
2475    pub account_number_suffix: Option<String>,
2476    #[serde(default, skip_serializing_if = "Option::is_none")]
2477    pub account_type: Option<BankAccountOwnershipType>,
2478    #[serde(default, skip_serializing_if = "Option::is_none")]
2479    pub routing_number: Option<String>,
2480}
2481
2482#[derive(Clone, Serialize, Debug, Deserialize)]
2483pub struct BuyNowPayLaterDetails {
2484    #[serde(default, skip_serializing_if = "Option::is_none")]
2485    pub afterpay_details: Option<AfterpayDetails>,
2486    #[serde(default, skip_serializing_if = "Option::is_none")]
2487    pub brand: Option<BuyNowPayLaterBrand>,
2488}
2489
2490#[derive(Clone, Serialize, Debug, Deserialize)]
2491pub struct AfterpayDetails {
2492    pub email_address: String,
2493}
2494
2495#[derive(Clone, Serialize, Debug, Deserialize)]
2496pub struct CardPaymentDetails {
2497    #[serde(default, skip_serializing_if = "Option::is_none")]
2498    pub application_cryptogram: Option<String>,
2499    #[serde(default, skip_serializing_if = "Option::is_none")]
2500    pub application_identifier: Option<String>,
2501    #[serde(default, skip_serializing_if = "Option::is_none")]
2502    pub application_name: Option<String>,
2503    #[serde(default, skip_serializing_if = "Option::is_none")]
2504    pub auth_result_code: Option<String>,
2505    #[serde(default, skip_serializing_if = "Option::is_none")]
2506    pub avs_status: Option<String>,
2507    #[serde(default, skip_serializing_if = "Option::is_none")]
2508    pub card: Option<Card>,
2509    #[serde(default, skip_serializing_if = "Option::is_none")]
2510    pub card_payment_timeline: Option<CardPaymentTimeline>,
2511    #[serde(default, skip_serializing_if = "Option::is_none")]
2512    pub cvv_status: Option<CCVStatus>,
2513    #[serde(default, skip_serializing_if = "Option::is_none")]
2514    pub entry_method: Option<TenderCardDetailsEntryMethod>,
2515    #[serde(default, skip_serializing_if = "Option::is_none")]
2516    pub errors: Option<Vec<ResponseError>>,
2517    #[serde(default, skip_serializing_if = "Option::is_none")]
2518    pub refund_requires_card_presence: Option<bool>,
2519    #[serde(default, skip_serializing_if = "Option::is_none")]
2520    pub statement_description: Option<String>,
2521    #[serde(default, skip_serializing_if = "Option::is_none")]
2522    pub status: Option<PaymentStatus>,
2523    #[serde(default, skip_serializing_if = "Option::is_none")]
2524    pub verification_method: Option<PaymentVerificationMethod>,
2525    #[serde(default, skip_serializing_if = "Option::is_none")]
2526    pub verification_results: Option<PaymentVerificationResults>,
2527}
2528
2529#[derive(Clone, Serialize, Debug, Deserialize)]
2530pub struct CardPaymentTimeline {
2531    #[serde(default, skip_serializing_if = "Option::is_none")]
2532    pub authorized_at: Option<String>,
2533    #[serde(default, skip_serializing_if = "Option::is_none")]
2534    pub captured_at: Option<String>,
2535    #[serde(default, skip_serializing_if = "Option::is_none")]
2536    pub voided_at: Option<String>,
2537}
2538
2539#[derive(Clone, Serialize, Debug, Deserialize)]
2540pub struct DeviceDetails {
2541    #[serde(default, skip_serializing_if = "Option::is_none")]
2542    pub device_id: Option<String>,
2543    #[serde(default, skip_serializing_if = "Option::is_none")]
2544    pub device_installation_id: Option<String>,
2545    pub device_name: Option<String>,
2546}
2547
2548#[derive(Clone, Serialize, Debug, Deserialize)]
2549pub struct ProcessingFee {
2550    #[serde(default, skip_serializing_if = "Option::is_none")]
2551    pub amount_money: Option<Money>,
2552    #[serde(default, skip_serializing_if = "Option::is_none")]
2553    pub effective_at: Option<String>,
2554    #[serde(default, skip_serializing_if = "Option::is_none")]
2555    pub fee_type: Option<ProcessingFeeType>,
2556}
2557
2558#[derive(Clone, Serialize, Debug, Deserialize)]
2559pub struct RiskEvaluation {
2560    #[serde(default, skip_serializing_if = "Option::is_none")]
2561    pub created_at: Option<String>,
2562    #[serde(default, skip_serializing_if = "Option::is_none")]
2563    pub risk_level: Option<RiskEvaluationRiskLevel>,
2564}
2565
2566#[derive(Clone, Serialize, Debug, Deserialize)]
2567pub struct DigitalWalletDetails {
2568    #[serde(default, skip_serializing_if = "Option::is_none")]
2569    brand: Option<DigitalWalletBrand>,
2570    #[serde(default, skip_serializing_if = "Option::is_none")]
2571    cash_app_details: Option<CashPaymentDetails>,
2572    #[serde(default, skip_serializing_if = "Option::is_none")]
2573    status: Option<DigitalWalletStatus>
2574}
2575
2576#[derive(Clone, Serialize, Debug, Deserialize)]
2577pub struct CashAppDetails {
2578    #[serde(default, skip_serializing_if = "Option::is_none")]
2579    pub buyer_cashtag: Option<String>,
2580    #[serde(default, skip_serializing_if = "Option::is_none")]
2581    pub buyer_country_code: Option<String>,
2582    #[serde(default, skip_serializing_if = "Option::is_none")]
2583    pub buyer_full_name: Option<String>,
2584}
2585
2586#[derive(Clone, Serialize, Debug, Deserialize)]
2587pub struct Site {
2588    #[serde(default, skip_serializing_if = "Option::is_none")]
2589    pub id: Option<String>,
2590    #[serde(default, skip_serializing_if = "Option::is_none")]
2591    pub created_at: Option<String>,
2592    #[serde(default, skip_serializing_if = "Option::is_none")]
2593    pub domain: Option<String>,
2594    #[serde(default, skip_serializing_if = "Option::is_none")]
2595    pub is_published: Option<bool>,
2596    #[serde(default, skip_serializing_if = "Option::is_none")]
2597    pub site_title: Option<String>,
2598    #[serde(default, skip_serializing_if = "Option::is_none")]
2599    pub updated_at: Option<String>,
2600}
2601
2602#[derive(Clone, Serialize, Debug, Deserialize, Default)]
2603pub struct TerminalCheckout {
2604    #[serde(default, skip_serializing_if = "Option::is_none")]
2605    pub id: Option<String>,
2606    pub amount_money: Option<Money>,
2607    pub device_options: Option<DeviceCheckoutOptions>,
2608    #[serde(default, skip_serializing_if = "Option::is_none")]
2609    pub app_fee_money: Option<Money>,
2610    #[serde(default, skip_serializing_if = "Option::is_none")]
2611    pub app_id: Option<String>,
2612    #[serde(default, skip_serializing_if = "Option::is_none")]
2613    pub cancel_reason: Option<ActionCancelReason>,
2614    #[serde(default, skip_serializing_if = "Option::is_none")]
2615    pub created_at: Option<String>,
2616    #[serde(default, skip_serializing_if = "Option::is_none")]
2617    pub customer_id: Option<String>,
2618    #[serde(default, skip_serializing_if = "Option::is_none")]
2619    pub deadline_duration: Option<String>,
2620    #[serde(default, skip_serializing_if = "Option::is_none")]
2621    pub location_id: Option<String>,
2622    #[serde(default, skip_serializing_if = "Option::is_none")]
2623    pub note: Option<String>,
2624    #[serde(default, skip_serializing_if = "Option::is_none")]
2625    pub order_id: Option<String>,
2626    #[serde(default, skip_serializing_if = "Option::is_none")]
2627    pub payment_ids: Option<Vec<String>>,
2628    #[serde(default, skip_serializing_if = "Option::is_none")]
2629    pub payment_options: Option<PaymentOptions>,
2630    #[serde(default, skip_serializing_if = "Option::is_none")]
2631    pub payment_type: Option<CheckoutOptionsPaymentType>,
2632    #[serde(default, skip_serializing_if = "Option::is_none")]
2633    pub reference_id: Option<String>,
2634    #[serde(default, skip_serializing_if = "Option::is_none")]
2635    pub status: Option<TerminalCheckoutStatus>,
2636    #[serde(default, skip_serializing_if = "Option::is_none")]
2637    pub updated_at: Option<String>,
2638}
2639
2640#[derive(Clone, Serialize, Debug, Deserialize, Default)]
2641pub struct DeviceCheckoutOptions {
2642    #[serde(default, skip_serializing_if = "Option::is_none")]
2643    pub device_id: Option<String>,
2644    #[serde(default, skip_serializing_if = "Option::is_none")]
2645    pub collect_signature: Option<bool>,
2646    #[serde(default, skip_serializing_if = "Option::is_none")]
2647    pub show_itemized_cart: Option<bool>,
2648    #[serde(default, skip_serializing_if = "Option::is_none")]
2649    pub skip_receipt_screen: Option<bool>,
2650    #[serde(default, skip_serializing_if = "Option::is_none")]
2651    pub tip_settings: Option<TipSettings>,
2652}
2653
2654#[derive(Clone, Serialize, Debug, Deserialize)]
2655pub struct TipSettings {
2656    /// Indicates whether tipping is enabled for this checkout. Defaults to false.
2657    #[serde(default, skip_serializing_if = "Option::is_none")]
2658    pub allow_tipping: Option<bool>,
2659    /// Indicates whether custom tip amounts are allowed during the checkout flow. Defaults to false.
2660    #[serde(default, skip_serializing_if = "Option::is_none")]
2661    pub custom_tip_field: Option<bool>,
2662    /// Indicates whether tip options should be presented on the screen before presenting the
2663    /// signature screen during card payment. Defaults to false.
2664    #[serde(default, skip_serializing_if = "Option::is_none")]
2665    pub separate_tip_screen: Option<bool>,
2666    /// Enables the "Smart Tip Amounts" behavior. Exact tipping options depend on the region in which
2667    /// the Square seller is active. <br/>
2668    /// For payments under 10.00, in the Australia, Canada, Ireland, United Kingdom, and United
2669    /// States, tipping options are presented as no tip, .50, 1.00 or 2.00. <br/>
2670    /// For payment amounts of 10.00 or greater, tipping options are presented as the following
2671    /// percentages: 0%, 5%, 10%, 15%.
2672    /// If set to true, the `tip_percentages` settings is ignored. Defaults to false.
2673    #[serde(default, skip_serializing_if = "Option::is_none")]
2674    pub smart_tipping: Option<bool>,
2675    /// A list of tip percentages that should be presented during the checkout flow, specified as up
2676    /// to 3 non-negative integers from 0 to 100 (inclusive). Defaults to 15, 20, and 25.
2677    #[serde(default, skip_serializing_if = "Option::is_none")]
2678    pub tip_percentages: Option<Vec<i32>>,
2679}
2680
2681#[derive(Clone, Serialize, Debug, Deserialize)]
2682pub struct PaymentOptions {
2683    #[serde(default, skip_serializing_if = "Option::is_none")]
2684    pub accept_partial_authorization: Option<bool>,
2685    #[serde(default, skip_serializing_if = "Option::is_none")]
2686    pub autocomplete: Option<bool>,
2687    #[serde(default, skip_serializing_if = "Option::is_none")]
2688    pub delay_duration: Option<String>,
2689}
2690
2691#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2692pub struct TerminalCheckoutQuery {
2693    #[serde(default, skip_serializing_if = "Option::is_none")]
2694    pub filter: Option<TerminalCheckoutQueryFilter>,
2695    #[serde(default, skip_serializing_if = "Option::is_none")]
2696    pub sort: Option<TerminalCheckoutQuerySort>,
2697}
2698
2699#[derive(Clone, Debug, Serialize, Deserialize)]
2700pub struct TerminalCheckoutQueryFilter {
2701    #[serde(default, skip_serializing_if = "Option::is_none")]
2702    pub created_at: Option<TimeRange>,
2703    #[serde(default, skip_serializing_if = "Option::is_none")]
2704    pub device_id: Option<String>,
2705    #[serde(default, skip_serializing_if = "Option::is_none")]
2706    pub status: Option<TerminalCheckoutStatus>
2707}
2708
2709#[derive(Clone, Debug, Serialize, Deserialize)]
2710pub struct TerminalCheckoutQuerySort {
2711    #[serde(default, skip_serializing_if = "Option::is_none")]
2712    pub sort_order: Option<SortOrder>,
2713}
2714
2715#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2716pub struct TerminalRefund {
2717    #[serde(default, skip_serializing_if = "Option::is_none")]
2718    pub id: Option<String>,
2719    #[serde(default, skip_serializing_if = "Option::is_none")]
2720    pub amount_money: Option<Money>,
2721    #[serde(default, skip_serializing_if = "Option::is_none")]
2722    pub device_id: Option<String>,
2723    #[serde(default, skip_serializing_if = "Option::is_none")]
2724    pub payment_id: Option<String>,
2725    #[serde(default, skip_serializing_if = "Option::is_none")]
2726    pub reason: Option<String>,
2727    #[serde(default, skip_serializing_if = "Option::is_none")]
2728    pub app_id: Option<String>,
2729    #[serde(default, skip_serializing_if = "Option::is_none")]
2730    pub cancel_reason: Option<ActionCancelReason>,
2731    #[serde(default, skip_serializing_if = "Option::is_none")]
2732    pub created_at: Option<String>,
2733    #[serde(default, skip_serializing_if = "Option::is_none")]
2734    pub deadline_duration: Option<String>,
2735    #[serde(default, skip_serializing_if = "Option::is_none")]
2736    pub location_id: Option<String>,
2737    #[serde(default, skip_serializing_if = "Option::is_none")]
2738    pub order_id: Option<String>,
2739    #[serde(default, skip_serializing_if = "Option::is_none")]
2740    pub refund_id: Option<String>,
2741    #[serde(default, skip_serializing_if = "Option::is_none")]
2742    pub status: Option<String>,
2743    #[serde(default, skip_serializing_if = "Option::is_none")]
2744    pub updated_at: Option<TerminalCheckoutStatus>,
2745}
2746
2747#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2748pub struct TerminalRefundQuery {
2749    #[serde(default, skip_serializing_if = "Option::is_none")]
2750    pub filter: Option<TerminalRefundQueryFilter>,
2751    #[serde(default, skip_serializing_if = "Option::is_none")]
2752    pub sort: Option<TerminalCheckoutQuerySort>,
2753}
2754
2755#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2756pub struct TerminalRefundQueryFilter {
2757    #[serde(default, skip_serializing_if = "Option::is_none")]
2758    pub created_at: Option<TimeRange>,
2759    #[serde(default, skip_serializing_if = "Option::is_none")]
2760    pub device_id: Option<String>,
2761    #[serde(default, skip_serializing_if = "Option::is_none")]
2762    pub status: Option<TerminalCheckoutStatus>,
2763}
2764
2765#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2766pub struct SearchOrdersQuery {
2767    pub filter: Option<SearchOrdersFilter>,
2768    pub sort: Option<SearchOrdersSort>,
2769}
2770
2771#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2772pub struct SearchOrdersFilter {
2773    #[serde(default, skip_serializing_if = "Option::is_none")]
2774    pub custom_filter: Option<SearchOrdersCustomerFilter>,
2775    #[serde(default, skip_serializing_if = "Option::is_none")]
2776    pub date_time_filter: Option<SearchOrdersDateTimeFilter>,
2777    #[serde(default, skip_serializing_if = "Option::is_none")]
2778    pub fulfillment_filter: Option<SearchOrdersFulfillmentFilter>,
2779    #[serde(default, skip_serializing_if = "Option::is_none")]
2780    pub source_filter: Option<SearchOrdersSourceFilter>,
2781    #[serde(default, skip_serializing_if = "Option::is_none")]
2782    pub state_filter: Option<SearchOrdersStateFilter>,
2783}
2784
2785#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2786pub struct SearchOrdersCustomerFilter {
2787    #[serde(default, skip_serializing_if = "Option::is_none")]
2788    pub customer_ids: Option<String>,
2789}
2790
2791#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2792pub struct SearchOrdersDateTimeFilter {
2793    #[serde(default, skip_serializing_if = "Option::is_none")]
2794    pub closed_at: Option<TimeRange>,
2795    #[serde(default, skip_serializing_if = "Option::is_none")]
2796    pub created_at: Option<TimeRange>,
2797    #[serde(default, skip_serializing_if = "Option::is_none")]
2798    pub updated_at: Option<TimeRange>,
2799}
2800
2801#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2802pub struct SearchOrdersFulfillmentFilter {
2803    #[serde(default, skip_serializing_if = "Option::is_none")]
2804    pub fulfillment_states: Option<Vec<OrderFulfillmentState>>,
2805    #[serde(default, skip_serializing_if = "Option::is_none")]
2806    pub fulfillment_types: Option<Vec<OrderFulfillmentType>>
2807}
2808
2809#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2810pub struct SearchOrdersSourceFilter {
2811    #[serde(default, skip_serializing_if = "Option::is_none")]
2812    pub source_names: Option<Vec<String>>
2813}
2814
2815#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2816pub struct SearchOrdersStateFilter {
2817    #[serde(default, skip_serializing_if = "Option::is_none")]
2818    pub states: Option<Vec<OrderState>>
2819}
2820
2821#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2822pub struct SearchOrdersSort {
2823    #[serde(default, skip_serializing_if = "Option::is_none")]
2824    pub sort_field: Option<SearchOrdersSortField>,
2825    #[serde(default, skip_serializing_if = "Option::is_none")]
2826    pub sort_order: Option<SortOrder>,
2827}
2828
2829#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2830pub struct OrderEntry {
2831    #[serde(default, skip_serializing_if = "Option::is_none")]
2832    location_id: Option<String>,
2833    #[serde(default, skip_serializing_if = "Option::is_none")]
2834    order_id: Option<String>,
2835    #[serde(default, skip_serializing_if = "Option::is_none")]
2836    version: Option<i32>,
2837}
2838
2839#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2840pub struct SearchQueryAttribute {
2841    #[serde(skip_serializing_if = "Option::is_none")]
2842    pub filter: Option<CustomerFilter>,
2843    #[serde(skip_serializing_if = "Option::is_none")]
2844    pub sort: Option<CustomerSort>,
2845}
2846
2847#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2848pub struct CustomerFilter {
2849    #[serde(skip_serializing_if = "Option::is_none")]
2850    pub created_at: Option<TimeRange>,
2851    #[serde(skip_serializing_if = "Option::is_none")]
2852    pub creation_source: Option<CreationSource>,
2853    #[serde(skip_serializing_if = "Option::is_none")]
2854    pub email_address: Option<CustomerTextFilter>,
2855    #[serde(skip_serializing_if = "Option::is_none")]
2856    pub group_ids: Option<FilterValue>,
2857    #[serde(skip_serializing_if = "Option::is_none")]
2858    pub phone_number: Option<CustomerTextFilter>,
2859    #[serde(skip_serializing_if = "Option::is_none")]
2860    pub reference_id: Option<CustomerTextFilter>,
2861    #[serde(skip_serializing_if = "Option::is_none")]
2862    pub updated_at: Option<TimeRange>,
2863}
2864
2865#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2866pub struct CustomerSort {
2867    #[serde(skip_serializing_if = "Option::is_none")]
2868    pub field: Option<String>,
2869    #[serde(skip_serializing_if = "Option::is_none")]
2870    pub order: Option<String>,
2871}
2872
2873#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2874pub struct TimeRange {
2875    #[serde(skip_serializing_if = "Option::is_none")]
2876    pub end_at: Option<String>,
2877    #[serde(skip_serializing_if = "Option::is_none")]
2878    pub start_at: Option<String>,
2879}
2880
2881#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2882pub struct CustomerTextFilter {
2883    #[serde(skip_serializing_if = "Option::is_none")]
2884    pub exact: Option<String>,
2885    #[serde(skip_serializing_if = "Option::is_none")]
2886    pub fuzzy: Option<String>,
2887}
2888
2889#[derive(Clone, Debug, Serialize, Deserialize, Default)]
2890pub struct CreationSource {
2891    #[serde(skip_serializing_if = "Option::is_none")]
2892    pub rule: Option<String>,
2893    #[serde(skip_serializing_if = "Option::is_none")]
2894    pub values: Option<Vec<CustomerCreationSource>>,
2895}
2896
2897#[derive(Clone, Serialize, Debug, Deserialize)]
2898pub struct StartAtRange {
2899    pub end_at: String,
2900    pub start_at: String,
2901}
2902
2903#[derive(Clone, Serialize, Debug, Deserialize)]
2904pub struct SegmentFilter {
2905    pub service_variation_id: String,
2906    #[serde(skip_serializing_if = "Option::is_none")]
2907    pub team_member_id_filter: Option<FilterValue>,
2908}
2909
2910#[derive(Serialize, Debug, Deserialize, Default)]
2911pub struct AvailabilityQueryFilter {
2912    #[serde(skip_serializing_if = "Option::is_none")]
2913    pub start_at_range: Option<StartAtRange>,
2914    #[serde(skip_serializing_if = "Option::is_none")]
2915    pub booking_id: Option<String>,
2916    #[serde(skip_serializing_if = "Option::is_none")]
2917    pub location_id: Option<String>,
2918    #[serde(skip_serializing_if = "Option::is_none")]
2919    pub segment_filters: Option<Vec<SegmentFilter>>
2920}