Skip to main content

wave_api/inputs/
customer.rs

1use serde::Serialize;
2
3use super::AddressInput;
4use crate::enums::CurrencyCode;
5
6/// Shipping details input for customer creation.
7#[derive(Debug, Clone, Default, Serialize)]
8#[serde(rename_all = "camelCase")]
9pub struct CustomerShippingDetailsInput {
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub name: Option<String>,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub address: Option<AddressInput>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub phone: Option<String>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub instructions: Option<String>,
18}
19
20/// Input for creating a customer.
21#[derive(Debug, Clone, Serialize)]
22#[serde(rename_all = "camelCase")]
23pub struct CustomerCreateInput {
24    pub business_id: String,
25    pub name: String,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub first_name: Option<String>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub last_name: Option<String>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub email: Option<String>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub phone: Option<String>,
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub mobile: Option<String>,
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub fax: Option<String>,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub toll_free: Option<String>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub website: Option<String>,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub display_id: Option<String>,
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub internal_notes: Option<String>,
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub address: Option<AddressInput>,
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub currency: Option<CurrencyCode>,
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub shipping_details: Option<CustomerShippingDetailsInput>,
52}
53
54impl CustomerCreateInput {
55    /// Create with required fields.
56    pub fn new(business_id: impl Into<String>, name: impl Into<String>) -> Self {
57        Self {
58            business_id: business_id.into(),
59            name: name.into(),
60            first_name: None,
61            last_name: None,
62            email: None,
63            phone: None,
64            mobile: None,
65            fax: None,
66            toll_free: None,
67            website: None,
68            display_id: None,
69            internal_notes: None,
70            address: None,
71            currency: None,
72            shipping_details: None,
73        }
74    }
75
76    pub fn first_name(mut self, v: impl Into<String>) -> Self {
77        self.first_name = Some(v.into());
78        self
79    }
80    pub fn last_name(mut self, v: impl Into<String>) -> Self {
81        self.last_name = Some(v.into());
82        self
83    }
84    pub fn email(mut self, v: impl Into<String>) -> Self {
85        self.email = Some(v.into());
86        self
87    }
88    pub fn phone(mut self, v: impl Into<String>) -> Self {
89        self.phone = Some(v.into());
90        self
91    }
92    pub fn address(mut self, v: AddressInput) -> Self {
93        self.address = Some(v);
94        self
95    }
96    pub fn currency(mut self, v: CurrencyCode) -> Self {
97        self.currency = Some(v);
98        self
99    }
100}
101
102/// Input for patching a customer.
103#[derive(Debug, Clone, Serialize)]
104#[serde(rename_all = "camelCase")]
105pub struct CustomerPatchInput {
106    pub id: String,
107    #[serde(skip_serializing_if = "Option::is_none")]
108    pub name: Option<String>,
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub first_name: Option<String>,
111    #[serde(skip_serializing_if = "Option::is_none")]
112    pub last_name: Option<String>,
113    #[serde(skip_serializing_if = "Option::is_none")]
114    pub email: Option<String>,
115    #[serde(skip_serializing_if = "Option::is_none")]
116    pub phone: Option<String>,
117    #[serde(skip_serializing_if = "Option::is_none")]
118    pub mobile: Option<String>,
119    #[serde(skip_serializing_if = "Option::is_none")]
120    pub fax: Option<String>,
121    #[serde(skip_serializing_if = "Option::is_none")]
122    pub toll_free: Option<String>,
123    #[serde(skip_serializing_if = "Option::is_none")]
124    pub website: Option<String>,
125    #[serde(skip_serializing_if = "Option::is_none")]
126    pub display_id: Option<String>,
127    #[serde(skip_serializing_if = "Option::is_none")]
128    pub internal_notes: Option<String>,
129    #[serde(skip_serializing_if = "Option::is_none")]
130    pub address: Option<AddressInput>,
131    #[serde(skip_serializing_if = "Option::is_none")]
132    pub currency: Option<CurrencyCode>,
133    #[serde(skip_serializing_if = "Option::is_none")]
134    pub shipping_details: Option<CustomerShippingDetailsInput>,
135}
136
137impl CustomerPatchInput {
138    /// Create with required ID.
139    pub fn new(id: impl Into<String>) -> Self {
140        Self {
141            id: id.into(),
142            name: None,
143            first_name: None,
144            last_name: None,
145            email: None,
146            phone: None,
147            mobile: None,
148            fax: None,
149            toll_free: None,
150            website: None,
151            display_id: None,
152            internal_notes: None,
153            address: None,
154            currency: None,
155            shipping_details: None,
156        }
157    }
158
159    pub fn name(mut self, v: impl Into<String>) -> Self {
160        self.name = Some(v.into());
161        self
162    }
163    pub fn email(mut self, v: impl Into<String>) -> Self {
164        self.email = Some(v.into());
165        self
166    }
167}
168
169/// Input for deleting a customer.
170#[derive(Debug, Clone, Serialize)]
171#[serde(rename_all = "camelCase")]
172pub struct CustomerDeleteInput {
173    pub id: String,
174}
175
176impl CustomerDeleteInput {
177    pub fn new(id: impl Into<String>) -> Self {
178        Self { id: id.into() }
179    }
180}