lcax_core/
country.rs

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}