1use serde::{Deserialize, Serialize};
2
3use crate::params::Timestamp;
4
5#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
7#[serde(rename_all = "snake_case")]
8pub enum ApiVersion {
9 #[serde(rename = "2011-01-01")]
10 V2011_01_01,
11 #[serde(rename = "2011-06-21")]
12 V2011_06_21,
13 #[serde(rename = "2011-06-28")]
14 V2011_06_28,
15 #[serde(rename = "2011-08-01")]
16 V2011_08_01,
17 #[serde(rename = "2011-09-15")]
18 V2011_09_15,
19 #[serde(rename = "2011-11-17")]
20 V2011_11_17,
21 #[serde(rename = "2012-02-23")]
22 V2012_02_23,
23 #[serde(rename = "2012-03-25")]
24 V2012_03_25,
25 #[serde(rename = "2012-06-18")]
26 V2012_06_18,
27 #[serde(rename = "2012-06-28")]
28 V2012_06_28,
29 #[serde(rename = "2012-07-09")]
30 V2012_07_09,
31 #[serde(rename = "2012-09-24")]
32 V2012_09_24,
33 #[serde(rename = "2012-10-26")]
34 V2012_10_26,
35 #[serde(rename = "2012-11-07")]
36 V2012_11_07,
37 #[serde(rename = "2013-02-11")]
38 V2013_02_11,
39 #[serde(rename = "2013-02-13")]
40 V2013_02_13,
41 #[serde(rename = "2013-07-05")]
42 V2013_07_05,
43 #[serde(rename = "2013-08-12")]
44 V2013_08_12,
45 #[serde(rename = "2013-08-13")]
46 V2013_08_13,
47 #[serde(rename = "2013-10-29")]
48 V2013_10_29,
49 #[serde(rename = "2013-12-03")]
50 V2013_12_03,
51 #[serde(rename = "2014-01-31")]
52 V2014_01_31,
53 #[serde(rename = "2014-03-13")]
54 V2014_03_13,
55 #[serde(rename = "2014-03-28")]
56 V2014_03_28,
57 #[serde(rename = "2014-05-19")]
58 V2014_05_19,
59 #[serde(rename = "2014-06-13")]
60 V2014_06_13,
61 #[serde(rename = "2014-06-17")]
62 V2014_06_17,
63 #[serde(rename = "2014-07-22")]
64 V2014_07_22,
65 #[serde(rename = "2014-07-26")]
66 V2014_07_26,
67 #[serde(rename = "2014-08-04")]
68 V2014_08_04,
69 #[serde(rename = "2014-08-20")]
70 V2014_08_20,
71 #[serde(rename = "2014-09-08")]
72 V2014_09_08,
73 #[serde(rename = "2014-10-07")]
74 V2014_10_07,
75 #[serde(rename = "2014-11-05")]
76 V2014_11_05,
77 #[serde(rename = "2014-11-20")]
78 V2014_11_20,
79 #[serde(rename = "2014-12-08")]
80 V2014_12_08,
81 #[serde(rename = "2014-12-17")]
82 V2014_12_17,
83 #[serde(rename = "2014-12-22")]
84 V2014_12_22,
85 #[serde(rename = "2015-01-11")]
86 V2015_01_11,
87 #[serde(rename = "2015-01-26")]
88 V2015_01_26,
89 #[serde(rename = "2015-02-10")]
90 V2015_02_10,
91 #[serde(rename = "2015-02-16")]
92 V2015_02_16,
93 #[serde(rename = "2015-02-18")]
94 V2015_02_18,
95 #[serde(rename = "2015-03-24")]
96 V2015_03_24,
97 #[serde(rename = "2015-04-07")]
98 V2015_04_07,
99 #[serde(rename = "2015-06-15")]
100 V2015_06_15,
101 #[serde(rename = "2015-07-07")]
102 V2015_07_07,
103 #[serde(rename = "2015-07-13")]
104 V2015_07_13,
105 #[serde(rename = "2015-07-28")]
106 V2015_07_28,
107 #[serde(rename = "2015-08-07")]
108 V2015_08_07,
109 #[serde(rename = "2015-08-19")]
110 V2015_08_19,
111 #[serde(rename = "2015-09-03")]
112 V2015_09_03,
113 #[serde(rename = "2015-09-08")]
114 V2015_09_08,
115 #[serde(rename = "2015-09-23")]
116 V2015_09_23,
117 #[serde(rename = "2015-10-01")]
118 V2015_10_01,
119 #[serde(rename = "2015-10-12")]
120 V2015_10_12,
121 #[serde(rename = "2015-10-16")]
122 V2015_10_16,
123 #[serde(rename = "2016-02-03")]
124 V2016_02_03,
125 #[serde(rename = "2016-02-19")]
126 V2016_02_19,
127 #[serde(rename = "2016-02-22")]
128 V2016_02_22,
129 #[serde(rename = "2016-02-23")]
130 V2016_02_23,
131 #[serde(rename = "2016-02-29")]
132 V2016_02_29,
133 #[serde(rename = "2016-03-07")]
134 V2016_03_07,
135 #[serde(rename = "2016-06-15")]
136 V2016_06_15,
137 #[serde(rename = "2016-07-06")]
138 V2016_07_06,
139 #[serde(rename = "2016-10-19")]
140 V2016_10_19,
141 #[serde(rename = "2017-01-27")]
142 V2017_01_27,
143 #[serde(rename = "2017-02-14")]
144 V2017_02_14,
145 #[serde(rename = "2017-04-06")]
146 V2017_04_06,
147 #[serde(rename = "2017-05-25")]
148 V2017_05_25,
149 #[serde(rename = "2017-06-05")]
150 V2017_06_05,
151 #[serde(rename = "2017-08-15")]
152 V2017_08_15,
153 #[serde(rename = "2017-12-14")]
154 V2017_12_14,
155 #[serde(rename = "2018-01-23")]
156 V2018_01_23,
157 #[serde(rename = "2018-02-05")]
158 V2018_02_05,
159 #[serde(rename = "2018-02-06")]
160 V2018_02_06,
161 #[serde(rename = "2018-02-28")]
162 V2018_02_28,
163 #[serde(rename = "2018-05-21")]
164 V2018_05_21,
165 #[serde(rename = "2018-07-27")]
166 V2018_07_27,
167 #[serde(rename = "2018-08-23")]
168 V2018_08_23,
169 #[serde(rename = "2018-09-06")]
170 V2018_09_06,
171 #[serde(rename = "2018-09-24")]
172 V2018_09_24,
173 #[serde(rename = "2018-10-31")]
174 V2018_10_31,
175 #[serde(rename = "2018-11-08")]
176 V2018_11_08,
177 #[serde(rename = "2019-02-11")]
178 V2019_02_11,
179 #[serde(rename = "2019-02-19")]
180 V2019_02_19,
181 #[serde(rename = "2019-03-14")]
182 V2019_03_14,
183 #[serde(rename = "2019-05-16")]
184 V2019_05_16,
185 #[serde(rename = "2019-08-14")]
186 V2019_08_14,
187 #[serde(rename = "2019-09-09")]
188 V2019_09_09,
189 #[serde(rename = "2020-08-27")]
190 V2020_08_27,
191 #[serde(rename = "2022-08-01")]
192 V2022_08_01,
193 #[serde(rename = "2022-11-15")]
194 V2022_11_15,
195 #[serde(rename = "2023-08-16")]
196 V2023_08_16,
197 #[serde(rename = "2023-10-16")]
198 V2023_10_16,
199}
200
201impl ApiVersion {
202 pub fn as_str(self) -> &'static str {
203 match self {
204 ApiVersion::V2011_01_01 => "2011-01-01",
205 ApiVersion::V2011_06_21 => "2011-06-21",
206 ApiVersion::V2011_06_28 => "2011-06-28",
207 ApiVersion::V2011_08_01 => "2011-08-01",
208 ApiVersion::V2011_09_15 => "2011-09-15",
209 ApiVersion::V2011_11_17 => "2011-11-17",
210 ApiVersion::V2012_02_23 => "2012-02-23",
211 ApiVersion::V2012_03_25 => "2012-03-25",
212 ApiVersion::V2012_06_18 => "2012-06-18",
213 ApiVersion::V2012_06_28 => "2012-06-28",
214 ApiVersion::V2012_07_09 => "2012-07-09",
215 ApiVersion::V2012_09_24 => "2012-09-24",
216 ApiVersion::V2012_10_26 => "2012-10-26",
217 ApiVersion::V2012_11_07 => "2012-11-07",
218 ApiVersion::V2013_02_11 => "2013-02-11",
219 ApiVersion::V2013_02_13 => "2013-02-13",
220 ApiVersion::V2013_07_05 => "2013-07-05",
221 ApiVersion::V2013_08_12 => "2013-08-12",
222 ApiVersion::V2013_08_13 => "2013-08-13",
223 ApiVersion::V2013_10_29 => "2013-10-29",
224 ApiVersion::V2013_12_03 => "2013-12-03",
225 ApiVersion::V2014_01_31 => "2014-01-31",
226 ApiVersion::V2014_03_13 => "2014-03-13",
227 ApiVersion::V2014_03_28 => "2014-03-28",
228 ApiVersion::V2014_05_19 => "2014-05-19",
229 ApiVersion::V2014_06_13 => "2014-06-13",
230 ApiVersion::V2014_06_17 => "2014-06-17",
231 ApiVersion::V2014_07_22 => "2014-07-22",
232 ApiVersion::V2014_07_26 => "2014-07-26",
233 ApiVersion::V2014_08_04 => "2014-08-04",
234 ApiVersion::V2014_08_20 => "2014-08-20",
235 ApiVersion::V2014_09_08 => "2014-09-08",
236 ApiVersion::V2014_10_07 => "2014-10-07",
237 ApiVersion::V2014_11_05 => "2014-11-05",
238 ApiVersion::V2014_11_20 => "2014-11-20",
239 ApiVersion::V2014_12_08 => "2014-12-08",
240 ApiVersion::V2014_12_17 => "2014-12-17",
241 ApiVersion::V2014_12_22 => "2014-12-22",
242 ApiVersion::V2015_01_11 => "2015-01-11",
243 ApiVersion::V2015_01_26 => "2015-01-26",
244 ApiVersion::V2015_02_10 => "2015-02-10",
245 ApiVersion::V2015_02_16 => "2015-02-16",
246 ApiVersion::V2015_02_18 => "2015-02-18",
247 ApiVersion::V2015_03_24 => "2015-03-24",
248 ApiVersion::V2015_04_07 => "2015-04-07",
249 ApiVersion::V2015_06_15 => "2015-06-15",
250 ApiVersion::V2015_07_07 => "2015-07-07",
251 ApiVersion::V2015_07_13 => "2015-07-13",
252 ApiVersion::V2015_07_28 => "2015-07-28",
253 ApiVersion::V2015_08_07 => "2015-08-07",
254 ApiVersion::V2015_08_19 => "2015-08-19",
255 ApiVersion::V2015_09_03 => "2015-09-03",
256 ApiVersion::V2015_09_08 => "2015-09-08",
257 ApiVersion::V2015_09_23 => "2015-09-23",
258 ApiVersion::V2015_10_01 => "2015-10-01",
259 ApiVersion::V2015_10_12 => "2015-10-12",
260 ApiVersion::V2015_10_16 => "2015-10-16",
261 ApiVersion::V2016_02_03 => "2016-02-03",
262 ApiVersion::V2016_02_19 => "2016-02-19",
263 ApiVersion::V2016_02_22 => "2016-02-22",
264 ApiVersion::V2016_02_23 => "2016-02-23",
265 ApiVersion::V2016_02_29 => "2016-02-29",
266 ApiVersion::V2016_03_07 => "2016-03-07",
267 ApiVersion::V2016_06_15 => "2016-06-15",
268 ApiVersion::V2016_07_06 => "2016-07-06",
269 ApiVersion::V2016_10_19 => "2016-10-19",
270 ApiVersion::V2017_01_27 => "2017-01-27",
271 ApiVersion::V2017_02_14 => "2017-02-14",
272 ApiVersion::V2017_04_06 => "2017-04-06",
273 ApiVersion::V2017_05_25 => "2017-05-25",
274 ApiVersion::V2017_06_05 => "2017-06-05",
275 ApiVersion::V2017_08_15 => "2017-08-15",
276 ApiVersion::V2017_12_14 => "2017-12-14",
277 ApiVersion::V2018_01_23 => "2018-01-23",
278 ApiVersion::V2018_02_05 => "2018-02-05",
279 ApiVersion::V2018_02_06 => "2018-02-06",
280 ApiVersion::V2018_02_28 => "2018-02-28",
281 ApiVersion::V2018_05_21 => "2018-05-21",
282 ApiVersion::V2018_07_27 => "2018-07-27",
283 ApiVersion::V2018_08_23 => "2018-08-23",
284 ApiVersion::V2018_09_06 => "2018-09-06",
285 ApiVersion::V2018_09_24 => "2018-09-24",
286 ApiVersion::V2018_10_31 => "2018-10-31",
287 ApiVersion::V2018_11_08 => "2018-11-08",
288 ApiVersion::V2019_02_11 => "2019-02-11",
289 ApiVersion::V2019_02_19 => "2019-02-19",
290 ApiVersion::V2019_03_14 => "2019-03-14",
291 ApiVersion::V2019_05_16 => "2019-05-16",
292 ApiVersion::V2019_08_14 => "2019-08-14",
293 ApiVersion::V2019_09_09 => "2019-09-09",
294 ApiVersion::V2020_08_27 => "2020-08-27",
295 ApiVersion::V2022_08_01 => "2022-08-01",
296 ApiVersion::V2022_11_15 => "2022-11-15",
297 ApiVersion::V2023_08_16 => "2023-08-16",
298 ApiVersion::V2023_10_16 => "2023-10-16",
299 }
300 }
301}
302
303impl AsRef<str> for ApiVersion {
304 fn as_ref(&self) -> &str {
305 self.as_str()
306 }
307}
308
309impl std::fmt::Display for ApiVersion {
310 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
311 self.as_str().fmt(f)
312 }
313}
314
315#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
318#[serde(untagged)]
319pub enum DelayDays {
320 Days(u32),
321 Other(DelayDaysOther),
322}
323
324#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
325#[serde(rename_all = "snake_case")]
326pub enum DelayDaysOther {
327 Minimum,
328}
329
330impl DelayDays {
331 pub fn days(n: u32) -> Self {
332 DelayDays::Days(n)
333 }
334 pub fn minimum() -> Self {
335 DelayDays::Other(DelayDaysOther::Minimum)
336 }
337}
338
339#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
340#[serde(untagged)]
341pub enum Scheduled {
342 Timestamp(Timestamp),
343 Other(ScheduledOther),
344}
345
346#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
347#[serde(rename_all = "snake_case")]
348pub enum ScheduledOther {
349 Now,
350}
351
352impl Scheduled {
353 pub fn at(ts: Timestamp) -> Self {
354 Scheduled::Timestamp(ts)
355 }
356 pub fn now() -> Self {
357 Scheduled::Other(ScheduledOther::Now)
358 }
359}
360
361#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
362#[serde(untagged)]
363pub enum UpTo {
364 Max(u64),
365 Other(UpToOther),
366}
367
368#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
369#[serde(rename_all = "snake_case")]
370pub enum UpToOther {
371 Inf,
372}
373
374impl UpTo {
375 pub fn max(n: u64) -> Self {
376 UpTo::Max(n)
377 }
378 pub fn now() -> Self {
379 UpTo::Other(UpToOther::Inf)
380 }
381}
382
383#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
384#[serde(untagged)]
385pub enum PaymentIntentOffSession {
386 Exists(bool),
387 Other(OffSessionOther),
388}
389
390#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
391#[serde(rename_all = "snake_case")]
392pub enum OffSessionOther {
393 #[serde(rename = "one_off")]
394 OneOff,
395 #[serde(rename = "recurring")]
396 Recurring,
397}
398
399impl PaymentIntentOffSession {
400 pub fn exists(n: bool) -> Self {
401 PaymentIntentOffSession::Exists(n)
402 }
403 pub fn frequency(n: OffSessionOther) -> Self {
404 match n {
405 OffSessionOther::OneOff => PaymentIntentOffSession::Other(OffSessionOther::OneOff),
406 OffSessionOther::Recurring => {
407 PaymentIntentOffSession::Other(OffSessionOther::Recurring)
408 }
409 }
410 }
411}