1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4#[cfg(feature = "pybindings")]
5use pyo3::prelude::*;
6
7#[cfg(feature = "jsbindings")]
8use tsify_next::Tsify;
9
10#[derive(Deserialize, Serialize, JsonSchema, Default, Clone, PartialEq)]
11#[serde(rename_all = "lowercase")]
12#[cfg_attr(feature = "jsbindings", derive(Tsify))]
13#[cfg_attr(feature = "pybindings", pyclass(eq, eq_int))]
14pub enum Country {
15 #[default]
16 UNKNOWN,
17 AFG,
18 ALA,
19 ALB,
20 DZA,
21 ASM,
22 AND,
23 AGO,
24 AIA,
25 ATA,
26 ATG,
27 ARG,
28 ARM,
29 ABW,
30 AUS,
31 AUT,
32 AZE,
33 BHS,
34 BHR,
35 BGD,
36 BRB,
37 BLR,
38 BEL,
39 BLZ,
40 BEN,
41 BMU,
42 BTN,
43 BOL,
44 BES,
45 BIH,
46 BWA,
47 BVT,
48 BRA,
49 IOT,
50 BRN,
51 BGR,
52 BFA,
53 BDI,
54 CPV,
55 KHM,
56 CMR,
57 CAN,
58 CYM,
59 CAF,
60 TCD,
61 CHL,
62 CHN,
63 CXR,
64 CCK,
65 COL,
66 COM,
67 COG,
68 COD,
69 COK,
70 CRI,
71 CIV,
72 HRV,
73 CUB,
74 CUW,
75 CYP,
76 CZE,
77 DNK,
78 DJI,
79 DMA,
80 DOM,
81 ECU,
82 EGY,
83 SLV,
84 GNQ,
85 ERI,
86 EST,
87 SWZ,
88 ETH,
89 FLK,
90 FRO,
91 FJI,
92 FIN,
93 FRA,
94 GUF,
95 PYF,
96 ATF,
97 GAB,
98 GMB,
99 GEO,
100 DEU,
101 GHA,
102 GIB,
103 GRC,
104 GRL,
105 GRD,
106 GLP,
107 GUM,
108 GTM,
109 GGY,
110 GIN,
111 GNB,
112 GUY,
113 HTI,
114 HMD,
115 VAT,
116 HND,
117 HKG,
118 HUN,
119 ISL,
120 IND,
121 IDN,
122 IRN,
123 IRQ,
124 IRL,
125 IMN,
126 ISR,
127 ITA,
128 JAM,
129 JPN,
130 JEY,
131 JOR,
132 KAZ,
133 KEN,
134 KIR,
135 PRK,
136 KOR,
137 KWT,
138 KGZ,
139 LAO,
140 LVA,
141 LBN,
142 LSO,
143 LBR,
144 LBY,
145 LIE,
146 LTU,
147 LUX,
148 MAC,
149 MDG,
150 MWI,
151 MYS,
152 MDV,
153 MLI,
154 MLT,
155 MHL,
156 MTQ,
157 MRT,
158 MUS,
159 MYT,
160 MEX,
161 FSM,
162 MDA,
163 MCO,
164 MNG,
165 MNE,
166 MSR,
167 MAR,
168 MOZ,
169 MMR,
170 NAM,
171 NRU,
172 NPL,
173 NLD,
174 NCL,
175 NZL,
176 NIC,
177 NER,
178 NGA,
179 NIU,
180 NFK,
181 MKD,
182 MNP,
183 NOR,
184 OMN,
185 PAK,
186 PLW,
187 PSE,
188 PAN,
189 PNG,
190 PRY,
191 PER,
192 PHL,
193 PCN,
194 POL,
195 PRT,
196 PRI,
197 QAT,
198 REU,
199 ROU,
200 RUS,
201 RWA,
202 BLM,
203 SHN,
204 KNA,
205 LCA,
206 MAF,
207 SPM,
208 VCT,
209 WSM,
210 SMR,
211 STP,
212 SAU,
213 SEN,
214 SRB,
215 SYC,
216 SLE,
217 SGP,
218 SXM,
219 SVK,
220 SVN,
221 SLB,
222 SOM,
223 ZAF,
224 SGS,
225 SSD,
226 ESP,
227 LKA,
228 SDN,
229 SUR,
230 SJM,
231 SWE,
232 CHE,
233 SYR,
234 TWN,
235 TJK,
236 TZA,
237 THA,
238 TLS,
239 TGO,
240 TKL,
241 TON,
242 TTO,
243 TUN,
244 TUR,
245 TKM,
246 TCA,
247 TUV,
248 UGA,
249 UKR,
250 ARE,
251 GBR,
252 USA,
253 UMI,
254 URY,
255 UZB,
256 VUT,
257 VEN,
258 VNM,
259 VGB,
260 VIR,
261 WLF,
262 ESH,
263 YEM,
264 ZMB,
265 ZWE,
266}
267
268impl From<&str> for Country {
269 fn from(value: &str) -> Self {
270 match value.len() {
271 2 => Country::_from_alpha2(value),
272 3 => Country::_from_alpha3(value),
273 _ => Country::UNKNOWN,
274 }
275 }
276}
277
278impl Country {
279 fn _from_alpha2(value: &str) -> Self {
280 match value.to_uppercase().as_str() {
281 "AF" => Country::AFG,
282 "AX" => Country::ALA,
283 "AL" => Country::ALB,
284 "DZ" => Country::DZA,
285 "AS" => Country::ASM,
286 "AD" => Country::AND,
287 "AO" => Country::AGO,
288 "AI" => Country::AIA,
289 "AQ" => Country::ATA,
290 "AG" => Country::ATG,
291 "AR" => Country::ARG,
292 "AM" => Country::ARM,
293 "AW" => Country::ABW,
294 "AU" => Country::AUS,
295 "AT" => Country::AUT,
296 "AZ" => Country::AZE,
297 "BS" => Country::BHS,
298 "BH" => Country::BHR,
299 "BD" => Country::BGD,
300 "BB" => Country::BRB,
301 "BY" => Country::BLR,
302 "BE" => Country::BEL,
303 "BZ" => Country::BLZ,
304 "BJ" => Country::BEN,
305 "BM" => Country::BMU,
306 "BT" => Country::BTN,
307 "BO" => Country::BOL,
308 "BQ" => Country::BES,
309 "BA" => Country::BIH,
310 "BW" => Country::BWA,
311 "BV" => Country::BVT,
312 "BR" => Country::BRA,
313 "IO" => Country::IOT,
314 "BN" => Country::BRN,
315 "BG" => Country::BGR,
316 "BF" => Country::BFA,
317 "BI" => Country::BDI,
318 "CV" => Country::CPV,
319 "KH" => Country::KHM,
320 "CM" => Country::CMR,
321 "CA" => Country::CAN,
322 "KY" => Country::CYM,
323 "CF" => Country::CAF,
324 "TD" => Country::TCD,
325 "CL" => Country::CHL,
326 "CN" => Country::CHN,
327 "CX" => Country::CXR,
328 "CC" => Country::CCK,
329 "CO" => Country::COL,
330 "KM" => Country::COM,
331 "CG" => Country::COG,
332 "CD" => Country::COD,
333 "CK" => Country::COK,
334 "CR" => Country::CRI,
335 "CI" => Country::CIV,
336 "HR" => Country::HRV,
337 "CU" => Country::CUB,
338 "CW" => Country::CUW,
339 "CY" => Country::CYP,
340 "CZ" => Country::CZE,
341 "DK" => Country::DNK,
342 "DJ" => Country::DJI,
343 "DM" => Country::DMA,
344 "DO" => Country::DOM,
345 "EC" => Country::ECU,
346 "EG" => Country::EGY,
347 "SV" => Country::SLV,
348 "GQ" => Country::GNQ,
349 "ER" => Country::ERI,
350 "EE" => Country::EST,
351 "SZ" => Country::SWZ,
352 "ET" => Country::ETH,
353 "FK" => Country::FLK,
354 "FO" => Country::FRO,
355 "FJ" => Country::FJI,
356 "FI" => Country::FIN,
357 "FR" => Country::FRA,
358 "GF" => Country::GUF,
359 "PF" => Country::PYF,
360 "TF" => Country::ATF,
361 "GA" => Country::GAB,
362 "GM" => Country::GMB,
363 "GE" => Country::GEO,
364 "DE" => Country::DEU,
365 "GH" => Country::GHA,
366 "GI" => Country::GIB,
367 "GR" => Country::GRC,
368 "GL" => Country::GRL,
369 "GD" => Country::GRD,
370 "GP" => Country::GLP,
371 "GU" => Country::GUM,
372 "GT" => Country::GTM,
373 "GG" => Country::GGY,
374 "GN" => Country::GIN,
375 "GW" => Country::GNB,
376 "GY" => Country::GUY,
377 "HT" => Country::HTI,
378 "HM" => Country::HMD,
379 "VA" => Country::VAT,
380 "HN" => Country::HND,
381 "HK" => Country::HKG,
382 "HU" => Country::HUN,
383 "IS" => Country::ISL,
384 "IN" => Country::IND,
385 "ID" => Country::IDN,
386 "IR" => Country::IRN,
387 "IQ" => Country::IRQ,
388 "IE" => Country::IRL,
389 "IM" => Country::IMN,
390 "IL" => Country::ISR,
391 "IT" => Country::ITA,
392 "JM" => Country::JAM,
393 "JP" => Country::JPN,
394 "JE" => Country::JEY,
395 "JO" => Country::JOR,
396 "KZ" => Country::KAZ,
397 "KE" => Country::KEN,
398 "KI" => Country::KIR,
399 "KP" => Country::PRK,
400 "KR" => Country::KOR,
401 "KW" => Country::KWT,
402 "KG" => Country::KGZ,
403 "LA" => Country::LAO,
404 "LV" => Country::LVA,
405 "LB" => Country::LBN,
406 "LS" => Country::LSO,
407 "LR" => Country::LBR,
408 "LY" => Country::LBY,
409 "LI" => Country::LIE,
410 "LT" => Country::LTU,
411 "LU" => Country::LUX,
412 "MO" => Country::MAC,
413 "MG" => Country::MDG,
414 "MW" => Country::MWI,
415 "MY" => Country::MYS,
416 "MV" => Country::MDV,
417 "ML" => Country::MLI,
418 "MT" => Country::MLT,
419 "MH" => Country::MHL,
420 "MQ" => Country::MTQ,
421 "MR" => Country::MRT,
422 "MU" => Country::MUS,
423 "YT" => Country::MYT,
424 "MX" => Country::MEX,
425 "FM" => Country::FSM,
426 "MD" => Country::MDA,
427 "MC" => Country::MCO,
428 "MN" => Country::MNG,
429 "ME" => Country::MNE,
430 "MS" => Country::MSR,
431 "MA" => Country::MAR,
432 "MZ" => Country::MOZ,
433 "MM" => Country::MMR,
434 "NA" => Country::NAM,
435 "NR" => Country::NRU,
436 "NP" => Country::NPL,
437 "NL" => Country::NLD,
438 "NC" => Country::NCL,
439 "NZ" => Country::NZL,
440 "NI" => Country::NIC,
441 "NE" => Country::NER,
442 "NG" => Country::NGA,
443 "NU" => Country::NIU,
444 "NF" => Country::NFK,
445 "MK" => Country::MKD,
446 "MP" => Country::MNP,
447 "NO" => Country::NOR,
448 "OM" => Country::OMN,
449 "PK" => Country::PAK,
450 "PW" => Country::PLW,
451 "PS" => Country::PSE,
452 "PA" => Country::PAN,
453 "PG" => Country::PNG,
454 "PY" => Country::PRY,
455 "PE" => Country::PER,
456 "PH" => Country::PHL,
457 "PN" => Country::PCN,
458 "PL" => Country::POL,
459 "PT" => Country::PRT,
460 "PR" => Country::PRI,
461 "QT" => Country::QAT,
462 "RE" => Country::REU,
463 "RO" => Country::ROU,
464 "RU" => Country::RUS,
465 "RW" => Country::RWA,
466 "BL" => Country::BLM,
467 "SH" => Country::SHN,
468 "KN" => Country::KNA,
469 "LC" => Country::LCA,
470 "MF" => Country::MAF,
471 "PM" => Country::SPM,
472 "VT" => Country::VCT,
473 "WS" => Country::WSM,
474 "SM" => Country::SMR,
475 "ST" => Country::STP,
476 "SA" => Country::SAU,
477 "SN" => Country::SEN,
478 "RS" => Country::SRB,
479 "SC" => Country::SYC,
480 "SL" => Country::SLE,
481 "SG" => Country::SGP,
482 "SX" => Country::SXM,
483 "SK" => Country::SVK,
484 "SI" => Country::SVN,
485 "SB" => Country::SLB,
486 "SO" => Country::SOM,
487 "ZA" => Country::ZAF,
488 "GS" => Country::SGS,
489 "SS" => Country::SSD,
490 "ES" => Country::ESP,
491 "LK" => Country::LKA,
492 "SD" => Country::SDN,
493 "SR" => Country::SUR,
494 "SJ" => Country::SJM,
495 "SE" => Country::SWE,
496 "CH" => Country::CHE,
497 "SY" => Country::SYR,
498 "TW" => Country::TWN,
499 "TJ" => Country::TJK,
500 "TZ" => Country::TZA,
501 "TH" => Country::THA,
502 "TL" => Country::TLS,
503 "TG" => Country::TGO,
504 "TK" => Country::TKL,
505 "TO" => Country::TON,
506 "TT" => Country::TTO,
507 "TN" => Country::TUN,
508 "TR" => Country::TUR,
509 "TM" => Country::TKM,
510 "TC" => Country::TCA,
511 "TV" => Country::TUV,
512 "UG" => Country::UGA,
513 "UA" => Country::UKR,
514 "AE" => Country::ARE,
515 "GB" => Country::GBR,
516 "US" => Country::USA,
517 "UM" => Country::UMI,
518 "UY" => Country::URY,
519 "UZ" => Country::UZB,
520 "VU" => Country::VUT,
521 "VE" => Country::VEN,
522 "VN" => Country::VNM,
523 "VB" => Country::VGB,
524 "VI" => Country::VIR,
525 "WF" => Country::WLF,
526 "EH" => Country::ESH,
527 "YE" => Country::YEM,
528 "ZM" => Country::ZMB,
529 "ZW" => Country::ZWE,
530 _ => Country::UNKNOWN,
531 }
532 }
533 fn _from_alpha3(value: &str) -> Self {
534 match value.to_uppercase().as_str() {
535 "AFG" => Country::AFG,
536 "ALA" => Country::ALA,
537 "ALB" => Country::ALB,
538 "DZA" => Country::DZA,
539 "ASM" => Country::ASM,
540 "AND" => Country::AND,
541 "AGO" => Country::AGO,
542 "AIA" => Country::AIA,
543 "ATA" => Country::ATA,
544 "ATG" => Country::ATG,
545 "ARG" => Country::ARG,
546 "ARM" => Country::ARM,
547 "ABW" => Country::ABW,
548 "AUS" => Country::AUS,
549 "AUT" => Country::AUT,
550 "AZE" => Country::AZE,
551 "BHS" => Country::BHS,
552 "BHR" => Country::BHR,
553 "BGD" => Country::BGD,
554 "BRB" => Country::BRB,
555 "BLR" => Country::BLR,
556 "BEL" => Country::BEL,
557 "BLZ" => Country::BLZ,
558 "BEN" => Country::BEN,
559 "BMU" => Country::BMU,
560 "BTN" => Country::BTN,
561 "BOL" => Country::BOL,
562 "BES" => Country::BES,
563 "BIH" => Country::BIH,
564 "BWA" => Country::BWA,
565 "BVT" => Country::BVT,
566 "BRA" => Country::BRA,
567 "IOT" => Country::IOT,
568 "BRN" => Country::BRN,
569 "BGR" => Country::BGR,
570 "BFA" => Country::BFA,
571 "BDI" => Country::BDI,
572 "CPV" => Country::CPV,
573 "KHM" => Country::KHM,
574 "CMR" => Country::CMR,
575 "CAN" => Country::CAN,
576 "CYM" => Country::CYM,
577 "CAF" => Country::CAF,
578 "TCD" => Country::TCD,
579 "CHL" => Country::CHL,
580 "CHN" => Country::CHN,
581 "CXR" => Country::CXR,
582 "CCK" => Country::CCK,
583 "COL" => Country::COL,
584 "COM" => Country::COM,
585 "COG" => Country::COG,
586 "COD" => Country::COD,
587 "COK" => Country::COK,
588 "CRI" => Country::CRI,
589 "CIV" => Country::CIV,
590 "HRV" => Country::HRV,
591 "CUB" => Country::CUB,
592 "CUW" => Country::CUW,
593 "CYP" => Country::CYP,
594 "CZE" => Country::CZE,
595 "DNK" => Country::DNK,
596 "DJI" => Country::DJI,
597 "DMA" => Country::DMA,
598 "DOM" => Country::DOM,
599 "ECU" => Country::ECU,
600 "EGY" => Country::EGY,
601 "SLV" => Country::SLV,
602 "GNQ" => Country::GNQ,
603 "ERI" => Country::ERI,
604 "EST" => Country::EST,
605 "SWZ" => Country::SWZ,
606 "ETH" => Country::ETH,
607 "FLK" => Country::FLK,
608 "FRO" => Country::FRO,
609 "FJI" => Country::FJI,
610 "FIN" => Country::FIN,
611 "FRA" => Country::FRA,
612 "GUF" => Country::GUF,
613 "PYF" => Country::PYF,
614 "ATF" => Country::ATF,
615 "GAB" => Country::GAB,
616 "GMB" => Country::GMB,
617 "GEO" => Country::GEO,
618 "DEU" => Country::DEU,
619 "GHA" => Country::GHA,
620 "GIB" => Country::GIB,
621 "GRC" => Country::GRC,
622 "GRL" => Country::GRL,
623 "GRD" => Country::GRD,
624 "GLP" => Country::GLP,
625 "GUM" => Country::GUM,
626 "GTM" => Country::GTM,
627 "GGY" => Country::GGY,
628 "GIN" => Country::GIN,
629 "GNB" => Country::GNB,
630 "GUY" => Country::GUY,
631 "HTI" => Country::HTI,
632 "HMD" => Country::HMD,
633 "VAT" => Country::VAT,
634 "HND" => Country::HND,
635 "HKG" => Country::HKG,
636 "HUN" => Country::HUN,
637 "ISL" => Country::ISL,
638 "IND" => Country::IND,
639 "IDN" => Country::IDN,
640 "IRN" => Country::IRN,
641 "IRQ" => Country::IRQ,
642 "IRL" => Country::IRL,
643 "IMN" => Country::IMN,
644 "ISR" => Country::ISR,
645 "ITA" => Country::ITA,
646 "JAM" => Country::JAM,
647 "JPN" => Country::JPN,
648 "JEY" => Country::JEY,
649 "JOR" => Country::JOR,
650 "KAZ" => Country::KAZ,
651 "KEN" => Country::KEN,
652 "KIR" => Country::KIR,
653 "PRK" => Country::PRK,
654 "KOR" => Country::KOR,
655 "KWT" => Country::KWT,
656 "KGZ" => Country::KGZ,
657 "LAO" => Country::LAO,
658 "LVA" => Country::LVA,
659 "LBN" => Country::LBN,
660 "LSO" => Country::LSO,
661 "LBR" => Country::LBR,
662 "LBY" => Country::LBY,
663 "LIE" => Country::LIE,
664 "LTU" => Country::LTU,
665 "LUX" => Country::LUX,
666 "MAC" => Country::MAC,
667 "MDG" => Country::MDG,
668 "MWI" => Country::MWI,
669 "MYS" => Country::MYS,
670 "MDV" => Country::MDV,
671 "MLI" => Country::MLI,
672 "MLT" => Country::MLT,
673 "MHL" => Country::MHL,
674 "MTQ" => Country::MTQ,
675 "MRT" => Country::MRT,
676 "MUS" => Country::MUS,
677 "MYT" => Country::MYT,
678 "MEX" => Country::MEX,
679 "FSM" => Country::FSM,
680 "MDA" => Country::MDA,
681 "MCO" => Country::MCO,
682 "MNG" => Country::MNG,
683 "MNE" => Country::MNE,
684 "MSR" => Country::MSR,
685 "MAR" => Country::MAR,
686 "MOZ" => Country::MOZ,
687 "MMR" => Country::MMR,
688 "NAM" => Country::NAM,
689 "NRU" => Country::NRU,
690 "NPL" => Country::NPL,
691 "NLD" => Country::NLD,
692 "NCL" => Country::NCL,
693 "NZL" => Country::NZL,
694 "NIC" => Country::NIC,
695 "NER" => Country::NER,
696 "NGA" => Country::NGA,
697 "NIU" => Country::NIU,
698 "NFK" => Country::NFK,
699 "MKD" => Country::MKD,
700 "MNP" => Country::MNP,
701 "NOR" => Country::NOR,
702 "OMN" => Country::OMN,
703 "PAK" => Country::PAK,
704 "PLW" => Country::PLW,
705 "PSE" => Country::PSE,
706 "PAN" => Country::PAN,
707 "PNG" => Country::PNG,
708 "PRY" => Country::PRY,
709 "PER" => Country::PER,
710 "PHL" => Country::PHL,
711 "PCN" => Country::PCN,
712 "POL" => Country::POL,
713 "PRT" => Country::PRT,
714 "PRI" => Country::PRI,
715 "QAT" => Country::QAT,
716 "REU" => Country::REU,
717 "ROU" => Country::ROU,
718 "RUS" => Country::RUS,
719 "RWA" => Country::RWA,
720 "BLM" => Country::BLM,
721 "SHN" => Country::SHN,
722 "KNA" => Country::KNA,
723 "LCA" => Country::LCA,
724 "MAF" => Country::MAF,
725 "SPM" => Country::SPM,
726 "VCT" => Country::VCT,
727 "WSM" => Country::WSM,
728 "SMR" => Country::SMR,
729 "STP" => Country::STP,
730 "SAU" => Country::SAU,
731 "SEN" => Country::SEN,
732 "SRB" => Country::SRB,
733 "SYC" => Country::SYC,
734 "SLE" => Country::SLE,
735 "SGP" => Country::SGP,
736 "SXM" => Country::SXM,
737 "SVK" => Country::SVK,
738 "SVN" => Country::SVN,
739 "SLB" => Country::SLB,
740 "SOM" => Country::SOM,
741 "ZAF" => Country::ZAF,
742 "SGS" => Country::SGS,
743 "SSD" => Country::SSD,
744 "ESP" => Country::ESP,
745 "LKA" => Country::LKA,
746 "SDN" => Country::SDN,
747 "SUR" => Country::SUR,
748 "SJM" => Country::SJM,
749 "SWE" => Country::SWE,
750 "CHE" => Country::CHE,
751 "SYR" => Country::SYR,
752 "TWN" => Country::TWN,
753 "TJK" => Country::TJK,
754 "TZA" => Country::TZA,
755 "THA" => Country::THA,
756 "TLS" => Country::TLS,
757 "TGO" => Country::TGO,
758 "TKL" => Country::TKL,
759 "TON" => Country::TON,
760 "TTO" => Country::TTO,
761 "TUN" => Country::TUN,
762 "TUR" => Country::TUR,
763 "TKM" => Country::TKM,
764 "TCA" => Country::TCA,
765 "TUV" => Country::TUV,
766 "UGA" => Country::UGA,
767 "UKR" => Country::UKR,
768 "ARE" => Country::ARE,
769 "GBR" => Country::GBR,
770 "USA" => Country::USA,
771 "UMI" => Country::UMI,
772 "URY" => Country::URY,
773 "UZB" => Country::UZB,
774 "VUT" => Country::VUT,
775 "VEN" => Country::VEN,
776 "VNM" => Country::VNM,
777 "VGB" => Country::VGB,
778 "VIR" => Country::VIR,
779 "WLF" => Country::WLF,
780 "ESH" => Country::ESH,
781 "YEM" => Country::YEM,
782 "ZMB" => Country::ZMB,
783 "ZWE" => Country::ZWE,
784 _ => Country::UNKNOWN,
785 }
786 }
787}