1use std::fmt::{self, Display};
25use serde::{Serialize, Serializer, Deserialize, Deserializer};
26use serde::de::{self, Visitor};
27use thiserror::Error;
28
29pub mod alpha2;
31pub mod alpha3;
33pub mod full;
35pub mod numeric;
37
38mod sorted_arrays;
39
40#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
41pub enum CountryCode {
43 AFG,
45 ALA,
47 ALB,
49 DZA,
51 ASM,
53 AND,
55 AGO,
57 AIA,
59 ATA,
61 ATG,
63 ARG,
65 ARM,
67 ABW,
69 AUS,
71 AUT,
73 AZE,
75 BHS,
77 BHR,
79 BGD,
81 BRB,
83 BLR,
85 BEL,
87 BLZ,
89 BEN,
91 BMU,
93 BTN,
95 BOL,
97 BES,
99 BIH,
101 BWA,
103 BVT,
105 BRA,
107 IOT,
109 BRN,
111 BGR,
113 BFA,
115 BDI,
117 CPV,
119 KHM,
121 CMR,
123 CAN,
125 CYM,
127 CAF,
129 TCD,
131 CHL,
133 CHN,
135 CXR,
137 CCK,
139 COL,
141 COM,
143 COG,
145 COD,
147 COK,
149 CRI,
151 CIV,
153 HRV,
155 CUB,
157 CUW,
159 CYP,
161 CZE,
163 DNK,
165 DJI,
167 DMA,
169 DOM,
171 ECU,
173 EGY,
175 SLV,
177 GNQ,
179 ERI,
181 EST,
183 ETH,
185 FLK,
187 FRO,
189 FJI,
191 FIN,
193 FRA,
195 GUF,
197 PYF,
199 ATF,
201 GAB,
203 GMB,
205 GEO,
207 DEU,
209 GHA,
211 GIB,
213 GRC,
215 GRL,
217 GRD,
219 GLP,
221 GUM,
223 GTM,
225 GGY,
227 GIN,
229 GNB,
231 GUY,
233 HTI,
235 HMD,
237 VAT,
239 HND,
241 HKG,
243 HUN,
245 ISL,
247 IND,
249 IDN,
251 IRN,
253 IRQ,
255 IRL,
257 IMN,
259 ISR,
261 ITA,
263 JAM,
265 JPN,
267 JEY,
269 JOR,
271 KAZ,
273 KEN,
275 KIR,
277 PRK,
279 KOR,
281 KWT,
283 KGZ,
285 LAO,
287 LVA,
289 LBN,
291 LSO,
293 LBR,
295 LBY,
297 LIE,
299 LTU,
301 LUX,
303 MAC,
305 MKD,
307 MDG,
309 MWI,
311 MYS,
313 MDV,
315 MLI,
317 MLT,
319 MHL,
321 MTQ,
323 MRT,
325 MUS,
327 MYT,
329 MEX,
331 FSM,
333 MDA,
335 MCO,
337 MNG,
339 MNE,
341 MSR,
343 MAR,
345 MOZ,
347 MMR,
349 NAM,
351 NRU,
353 NPL,
355 NLD,
357 NCL,
359 NZL,
361 NIC,
363 NER,
365 NGA,
367 NIU,
369 NFK,
371 MNP,
373 NOR,
375 OMN,
377 PAK,
379 PLW,
381 PSE,
383 PAN,
385 PNG,
387 PRY,
389 PER,
391 PHL,
393 PCN,
395 POL,
397 PRT,
399 PRI,
401 QAT,
403 REU,
405 ROU,
407 RUS,
409 RWA,
411 BLM,
413 SHN,
415 KNA,
417 LCA,
419 MAF,
421 SPM,
423 VCT,
425 WSM,
427 SMR,
429 STP,
431 SAU,
433 SEN,
435 SRB,
437 SYC,
439 SLE,
441 SGP,
443 SXM,
445 SVK,
447 SVN,
449 SLB,
451 SOM,
453 ZAF,
455 SGS,
457 SSD,
459 ESP,
461 LKA,
463 SDN,
465 SUR,
467 SJM,
469 SWZ,
471 SWE,
473 CHE,
475 SYR,
477 TWN,
479 TJK,
481 TZA,
483 THA,
485 TLS,
487 TGO,
489 TKL,
491 TON,
493 TTO,
495 TUN,
497 TUR,
499 TKM,
501 TCA,
503 TUV,
505 UGA,
507 UKR,
509 ARE,
511 GBR,
513 USA,
515 UMI,
517 URY,
519 UZB,
521 VUT,
523 VEN,
525 VNM,
527 VGB,
529 VIR,
531 WLF,
533 ESH,
535 YEM,
537 ZMB,
539 ZWE,
541}
542
543#[derive(Debug, Error, PartialEq)]
545pub enum CountryCodeParseErr {
546 #[error("invalid alpha-2 country code string: {}", unknown)]
547 InvalidAlpha2 { unknown: String },
548 #[error("invalid alpha-3 country code string: {}", unknown)]
549 InvalidAlpha3 { unknown: String },
550 #[error("invalid ID (integer) country code: {}", unknown)]
551 InvalidID { unknown: u32 },
552}
553
554const NUM_COUNTRY_CODES: usize = 249;
555
556impl CountryCode {
557 pub fn name(&self) -> &'static str {
559 use self::CountryCode::*;
560 use full::*;
561 match *self {
562 AFG => ISO_FULL_AFG,
563 ALA => ISO_FULL_ALA,
564 ALB => ISO_FULL_ALB,
565 DZA => ISO_FULL_DZA,
566 ASM => ISO_FULL_ASM,
567 AND => ISO_FULL_AND,
568 AGO => ISO_FULL_AGO,
569 AIA => ISO_FULL_AIA,
570 ATA => ISO_FULL_ATA,
571 ATG => ISO_FULL_ATG,
572 ARG => ISO_FULL_ARG,
573 ARM => ISO_FULL_ARM,
574 ABW => ISO_FULL_ABW,
575 AUS => ISO_FULL_AUS,
576 AUT => ISO_FULL_AUT,
577 AZE => ISO_FULL_AZE,
578 BHS => ISO_FULL_BHS,
579 BHR => ISO_FULL_BHR,
580 BGD => ISO_FULL_BGD,
581 BRB => ISO_FULL_BRB,
582 BLR => ISO_FULL_BLR,
583 BEL => ISO_FULL_BEL,
584 BLZ => ISO_FULL_BLZ,
585 BEN => ISO_FULL_BEN,
586 BMU => ISO_FULL_BMU,
587 BTN => ISO_FULL_BTN,
588 BOL => ISO_FULL_BOL,
589 BES => ISO_FULL_BES,
590 BIH => ISO_FULL_BIH,
591 BWA => ISO_FULL_BWA,
592 BVT => ISO_FULL_BVT,
593 BRA => ISO_FULL_BRA,
594 IOT => ISO_FULL_IOT,
595 BRN => ISO_FULL_BRN,
596 BGR => ISO_FULL_BGR,
597 BFA => ISO_FULL_BFA,
598 BDI => ISO_FULL_BDI,
599 CPV => ISO_FULL_CPV,
600 KHM => ISO_FULL_KHM,
601 CMR => ISO_FULL_CMR,
602 CAN => ISO_FULL_CAN,
603 CYM => ISO_FULL_CYM,
604 CAF => ISO_FULL_CAF,
605 TCD => ISO_FULL_TCD,
606 CHL => ISO_FULL_CHL,
607 CHN => ISO_FULL_CHN,
608 CXR => ISO_FULL_CXR,
609 CCK => ISO_FULL_CCK,
610 COL => ISO_FULL_COL,
611 COM => ISO_FULL_COM,
612 COG => ISO_FULL_COG,
613 COD => ISO_FULL_COD,
614 COK => ISO_FULL_COK,
615 CRI => ISO_FULL_CRI,
616 CIV => ISO_FULL_CIV,
617 HRV => ISO_FULL_HRV,
618 CUB => ISO_FULL_CUB,
619 CUW => ISO_FULL_CUW,
620 CYP => ISO_FULL_CYP,
621 CZE => ISO_FULL_CZE,
622 DNK => ISO_FULL_DNK,
623 DJI => ISO_FULL_DJI,
624 DMA => ISO_FULL_DMA,
625 DOM => ISO_FULL_DOM,
626 ECU => ISO_FULL_ECU,
627 EGY => ISO_FULL_EGY,
628 SLV => ISO_FULL_SLV,
629 GNQ => ISO_FULL_GNQ,
630 ERI => ISO_FULL_ERI,
631 EST => ISO_FULL_EST,
632 ETH => ISO_FULL_ETH,
633 FLK => ISO_FULL_FLK,
634 FRO => ISO_FULL_FRO,
635 FJI => ISO_FULL_FJI,
636 FIN => ISO_FULL_FIN,
637 FRA => ISO_FULL_FRA,
638 GUF => ISO_FULL_GUF,
639 PYF => ISO_FULL_PYF,
640 ATF => ISO_FULL_ATF,
641 GAB => ISO_FULL_GAB,
642 GMB => ISO_FULL_GMB,
643 GEO => ISO_FULL_GEO,
644 DEU => ISO_FULL_DEU,
645 GHA => ISO_FULL_GHA,
646 GIB => ISO_FULL_GIB,
647 GRC => ISO_FULL_GRC,
648 GRL => ISO_FULL_GRL,
649 GRD => ISO_FULL_GRD,
650 GLP => ISO_FULL_GLP,
651 GUM => ISO_FULL_GUM,
652 GTM => ISO_FULL_GTM,
653 GGY => ISO_FULL_GGY,
654 GIN => ISO_FULL_GIN,
655 GNB => ISO_FULL_GNB,
656 GUY => ISO_FULL_GUY,
657 HTI => ISO_FULL_HTI,
658 HMD => ISO_FULL_HMD,
659 VAT => ISO_FULL_VAT,
660 HND => ISO_FULL_HND,
661 HKG => ISO_FULL_HKG,
662 HUN => ISO_FULL_HUN,
663 ISL => ISO_FULL_ISL,
664 IND => ISO_FULL_IND,
665 IDN => ISO_FULL_IDN,
666 IRN => ISO_FULL_IRN,
667 IRQ => ISO_FULL_IRQ,
668 IRL => ISO_FULL_IRL,
669 IMN => ISO_FULL_IMN,
670 ISR => ISO_FULL_ISR,
671 ITA => ISO_FULL_ITA,
672 JAM => ISO_FULL_JAM,
673 JPN => ISO_FULL_JPN,
674 JEY => ISO_FULL_JEY,
675 JOR => ISO_FULL_JOR,
676 KAZ => ISO_FULL_KAZ,
677 KEN => ISO_FULL_KEN,
678 KIR => ISO_FULL_KIR,
679 PRK => ISO_FULL_PRK,
680 KOR => ISO_FULL_KOR,
681 KWT => ISO_FULL_KWT,
682 KGZ => ISO_FULL_KGZ,
683 LAO => ISO_FULL_LAO,
684 LVA => ISO_FULL_LVA,
685 LBN => ISO_FULL_LBN,
686 LSO => ISO_FULL_LSO,
687 LBR => ISO_FULL_LBR,
688 LBY => ISO_FULL_LBY,
689 LIE => ISO_FULL_LIE,
690 LTU => ISO_FULL_LTU,
691 LUX => ISO_FULL_LUX,
692 MAC => ISO_FULL_MAC,
693 MKD => ISO_FULL_MKD,
694 MDG => ISO_FULL_MDG,
695 MWI => ISO_FULL_MWI,
696 MYS => ISO_FULL_MYS,
697 MDV => ISO_FULL_MDV,
698 MLI => ISO_FULL_MLI,
699 MLT => ISO_FULL_MLT,
700 MHL => ISO_FULL_MHL,
701 MTQ => ISO_FULL_MTQ,
702 MRT => ISO_FULL_MRT,
703 MUS => ISO_FULL_MUS,
704 MYT => ISO_FULL_MYT,
705 MEX => ISO_FULL_MEX,
706 FSM => ISO_FULL_FSM,
707 MDA => ISO_FULL_MDA,
708 MCO => ISO_FULL_MCO,
709 MNG => ISO_FULL_MNG,
710 MNE => ISO_FULL_MNE,
711 MSR => ISO_FULL_MSR,
712 MAR => ISO_FULL_MAR,
713 MOZ => ISO_FULL_MOZ,
714 MMR => ISO_FULL_MMR,
715 NAM => ISO_FULL_NAM,
716 NRU => ISO_FULL_NRU,
717 NPL => ISO_FULL_NPL,
718 NLD => ISO_FULL_NLD,
719 NCL => ISO_FULL_NCL,
720 NZL => ISO_FULL_NZL,
721 NIC => ISO_FULL_NIC,
722 NER => ISO_FULL_NER,
723 NGA => ISO_FULL_NGA,
724 NIU => ISO_FULL_NIU,
725 NFK => ISO_FULL_NFK,
726 MNP => ISO_FULL_MNP,
727 NOR => ISO_FULL_NOR,
728 OMN => ISO_FULL_OMN,
729 PAK => ISO_FULL_PAK,
730 PLW => ISO_FULL_PLW,
731 PSE => ISO_FULL_PSE,
732 PAN => ISO_FULL_PAN,
733 PNG => ISO_FULL_PNG,
734 PRY => ISO_FULL_PRY,
735 PER => ISO_FULL_PER,
736 PHL => ISO_FULL_PHL,
737 PCN => ISO_FULL_PCN,
738 POL => ISO_FULL_POL,
739 PRT => ISO_FULL_PRT,
740 PRI => ISO_FULL_PRI,
741 QAT => ISO_FULL_QAT,
742 REU => ISO_FULL_REU,
743 ROU => ISO_FULL_ROU,
744 RUS => ISO_FULL_RUS,
745 RWA => ISO_FULL_RWA,
746 BLM => ISO_FULL_BLM,
747 SHN => ISO_FULL_SHN,
748 KNA => ISO_FULL_KNA,
749 LCA => ISO_FULL_LCA,
750 MAF => ISO_FULL_MAF,
751 SPM => ISO_FULL_SPM,
752 VCT => ISO_FULL_VCT,
753 WSM => ISO_FULL_WSM,
754 SMR => ISO_FULL_SMR,
755 STP => ISO_FULL_STP,
756 SAU => ISO_FULL_SAU,
757 SEN => ISO_FULL_SEN,
758 SRB => ISO_FULL_SRB,
759 SYC => ISO_FULL_SYC,
760 SLE => ISO_FULL_SLE,
761 SGP => ISO_FULL_SGP,
762 SXM => ISO_FULL_SXM,
763 SVK => ISO_FULL_SVK,
764 SVN => ISO_FULL_SVN,
765 SLB => ISO_FULL_SLB,
766 SOM => ISO_FULL_SOM,
767 ZAF => ISO_FULL_ZAF,
768 SGS => ISO_FULL_SGS,
769 SSD => ISO_FULL_SSD,
770 ESP => ISO_FULL_ESP,
771 LKA => ISO_FULL_LKA,
772 SDN => ISO_FULL_SDN,
773 SUR => ISO_FULL_SUR,
774 SJM => ISO_FULL_SJM,
775 SWZ => ISO_FULL_SWZ,
776 SWE => ISO_FULL_SWE,
777 CHE => ISO_FULL_CHE,
778 SYR => ISO_FULL_SYR,
779 TWN => ISO_FULL_TWN,
780 TJK => ISO_FULL_TJK,
781 TZA => ISO_FULL_TZA,
782 THA => ISO_FULL_THA,
783 TLS => ISO_FULL_TLS,
784 TGO => ISO_FULL_TGO,
785 TKL => ISO_FULL_TKL,
786 TON => ISO_FULL_TON,
787 TTO => ISO_FULL_TTO,
788 TUN => ISO_FULL_TUN,
789 TUR => ISO_FULL_TUR,
790 TKM => ISO_FULL_TKM,
791 TCA => ISO_FULL_TCA,
792 TUV => ISO_FULL_TUV,
793 UGA => ISO_FULL_UGA,
794 UKR => ISO_FULL_UKR,
795 ARE => ISO_FULL_ARE,
796 GBR => ISO_FULL_GBR,
797 USA => ISO_FULL_USA,
798 UMI => ISO_FULL_UMI,
799 URY => ISO_FULL_URY,
800 UZB => ISO_FULL_UZB,
801 VUT => ISO_FULL_VUT,
802 VEN => ISO_FULL_VEN,
803 VNM => ISO_FULL_VNM,
804 VGB => ISO_FULL_VGB,
805 VIR => ISO_FULL_VIR,
806 WLF => ISO_FULL_WLF,
807 ESH => ISO_FULL_ESH,
808 YEM => ISO_FULL_YEM,
809 ZMB => ISO_FULL_ZMB,
810 ZWE => ISO_FULL_ZWE,
811 }
812 }
813
814 pub fn numeric_id(&self) -> u32 {
816 use self::CountryCode::*;
817 use numeric::*;
818 match *self {
819 AFG => ISO_NUM_AFG,
820 ALA => ISO_NUM_ALA,
821 ALB => ISO_NUM_ALB,
822 DZA => ISO_NUM_DZA,
823 ASM => ISO_NUM_ASM,
824 AND => ISO_NUM_AND,
825 AGO => ISO_NUM_AGO,
826 AIA => ISO_NUM_AIA,
827 ATA => ISO_NUM_ATA,
828 ATG => ISO_NUM_ATG,
829 ARG => ISO_NUM_ARG,
830 ARM => ISO_NUM_ARM,
831 ABW => ISO_NUM_ABW,
832 AUS => ISO_NUM_AUS,
833 AUT => ISO_NUM_AUT,
834 AZE => ISO_NUM_AZE,
835 BHS => ISO_NUM_BHS,
836 BHR => ISO_NUM_BHR,
837 BGD => ISO_NUM_BGD,
838 BRB => ISO_NUM_BRB,
839 BLR => ISO_NUM_BLR,
840 BEL => ISO_NUM_BEL,
841 BLZ => ISO_NUM_BLZ,
842 BEN => ISO_NUM_BEN,
843 BMU => ISO_NUM_BMU,
844 BTN => ISO_NUM_BTN,
845 BOL => ISO_NUM_BOL,
846 BES => ISO_NUM_BES,
847 BIH => ISO_NUM_BIH,
848 BWA => ISO_NUM_BWA,
849 BVT => ISO_NUM_BVT,
850 BRA => ISO_NUM_BRA,
851 IOT => ISO_NUM_IOT,
852 BRN => ISO_NUM_BRN,
853 BGR => ISO_NUM_BGR,
854 BFA => ISO_NUM_BFA,
855 BDI => ISO_NUM_BDI,
856 CPV => ISO_NUM_CPV,
857 KHM => ISO_NUM_KHM,
858 CMR => ISO_NUM_CMR,
859 CAN => ISO_NUM_CAN,
860 CYM => ISO_NUM_CYM,
861 CAF => ISO_NUM_CAF,
862 TCD => ISO_NUM_TCD,
863 CHL => ISO_NUM_CHL,
864 CHN => ISO_NUM_CHN,
865 CXR => ISO_NUM_CXR,
866 CCK => ISO_NUM_CCK,
867 COL => ISO_NUM_COL,
868 COM => ISO_NUM_COM,
869 COG => ISO_NUM_COG,
870 COD => ISO_NUM_COD,
871 COK => ISO_NUM_COK,
872 CRI => ISO_NUM_CRI,
873 CIV => ISO_NUM_CIV,
874 HRV => ISO_NUM_HRV,
875 CUB => ISO_NUM_CUB,
876 CUW => ISO_NUM_CUW,
877 CYP => ISO_NUM_CYP,
878 CZE => ISO_NUM_CZE,
879 DNK => ISO_NUM_DNK,
880 DJI => ISO_NUM_DJI,
881 DMA => ISO_NUM_DMA,
882 DOM => ISO_NUM_DOM,
883 ECU => ISO_NUM_ECU,
884 EGY => ISO_NUM_EGY,
885 SLV => ISO_NUM_SLV,
886 GNQ => ISO_NUM_GNQ,
887 ERI => ISO_NUM_ERI,
888 EST => ISO_NUM_EST,
889 ETH => ISO_NUM_ETH,
890 FLK => ISO_NUM_FLK,
891 FRO => ISO_NUM_FRO,
892 FJI => ISO_NUM_FJI,
893 FIN => ISO_NUM_FIN,
894 FRA => ISO_NUM_FRA,
895 GUF => ISO_NUM_GUF,
896 PYF => ISO_NUM_PYF,
897 ATF => ISO_NUM_ATF,
898 GAB => ISO_NUM_GAB,
899 GMB => ISO_NUM_GMB,
900 GEO => ISO_NUM_GEO,
901 DEU => ISO_NUM_DEU,
902 GHA => ISO_NUM_GHA,
903 GIB => ISO_NUM_GIB,
904 GRC => ISO_NUM_GRC,
905 GRL => ISO_NUM_GRL,
906 GRD => ISO_NUM_GRD,
907 GLP => ISO_NUM_GLP,
908 GUM => ISO_NUM_GUM,
909 GTM => ISO_NUM_GTM,
910 GGY => ISO_NUM_GGY,
911 GIN => ISO_NUM_GIN,
912 GNB => ISO_NUM_GNB,
913 GUY => ISO_NUM_GUY,
914 HTI => ISO_NUM_HTI,
915 HMD => ISO_NUM_HMD,
916 VAT => ISO_NUM_VAT,
917 HND => ISO_NUM_HND,
918 HKG => ISO_NUM_HKG,
919 HUN => ISO_NUM_HUN,
920 ISL => ISO_NUM_ISL,
921 IND => ISO_NUM_IND,
922 IDN => ISO_NUM_IDN,
923 IRN => ISO_NUM_IRN,
924 IRQ => ISO_NUM_IRQ,
925 IRL => ISO_NUM_IRL,
926 IMN => ISO_NUM_IMN,
927 ISR => ISO_NUM_ISR,
928 ITA => ISO_NUM_ITA,
929 JAM => ISO_NUM_JAM,
930 JPN => ISO_NUM_JPN,
931 JEY => ISO_NUM_JEY,
932 JOR => ISO_NUM_JOR,
933 KAZ => ISO_NUM_KAZ,
934 KEN => ISO_NUM_KEN,
935 KIR => ISO_NUM_KIR,
936 PRK => ISO_NUM_PRK,
937 KOR => ISO_NUM_KOR,
938 KWT => ISO_NUM_KWT,
939 KGZ => ISO_NUM_KGZ,
940 LAO => ISO_NUM_LAO,
941 LVA => ISO_NUM_LVA,
942 LBN => ISO_NUM_LBN,
943 LSO => ISO_NUM_LSO,
944 LBR => ISO_NUM_LBR,
945 LBY => ISO_NUM_LBY,
946 LIE => ISO_NUM_LIE,
947 LTU => ISO_NUM_LTU,
948 LUX => ISO_NUM_LUX,
949 MAC => ISO_NUM_MAC,
950 MKD => ISO_NUM_MKD,
951 MDG => ISO_NUM_MDG,
952 MWI => ISO_NUM_MWI,
953 MYS => ISO_NUM_MYS,
954 MDV => ISO_NUM_MDV,
955 MLI => ISO_NUM_MLI,
956 MLT => ISO_NUM_MLT,
957 MHL => ISO_NUM_MHL,
958 MTQ => ISO_NUM_MTQ,
959 MRT => ISO_NUM_MRT,
960 MUS => ISO_NUM_MUS,
961 MYT => ISO_NUM_MYT,
962 MEX => ISO_NUM_MEX,
963 FSM => ISO_NUM_FSM,
964 MDA => ISO_NUM_MDA,
965 MCO => ISO_NUM_MCO,
966 MNG => ISO_NUM_MNG,
967 MNE => ISO_NUM_MNE,
968 MSR => ISO_NUM_MSR,
969 MAR => ISO_NUM_MAR,
970 MOZ => ISO_NUM_MOZ,
971 MMR => ISO_NUM_MMR,
972 NAM => ISO_NUM_NAM,
973 NRU => ISO_NUM_NRU,
974 NPL => ISO_NUM_NPL,
975 NLD => ISO_NUM_NLD,
976 NCL => ISO_NUM_NCL,
977 NZL => ISO_NUM_NZL,
978 NIC => ISO_NUM_NIC,
979 NER => ISO_NUM_NER,
980 NGA => ISO_NUM_NGA,
981 NIU => ISO_NUM_NIU,
982 NFK => ISO_NUM_NFK,
983 MNP => ISO_NUM_MNP,
984 NOR => ISO_NUM_NOR,
985 OMN => ISO_NUM_OMN,
986 PAK => ISO_NUM_PAK,
987 PLW => ISO_NUM_PLW,
988 PSE => ISO_NUM_PSE,
989 PAN => ISO_NUM_PAN,
990 PNG => ISO_NUM_PNG,
991 PRY => ISO_NUM_PRY,
992 PER => ISO_NUM_PER,
993 PHL => ISO_NUM_PHL,
994 PCN => ISO_NUM_PCN,
995 POL => ISO_NUM_POL,
996 PRT => ISO_NUM_PRT,
997 PRI => ISO_NUM_PRI,
998 QAT => ISO_NUM_QAT,
999 REU => ISO_NUM_REU,
1000 ROU => ISO_NUM_ROU,
1001 RUS => ISO_NUM_RUS,
1002 RWA => ISO_NUM_RWA,
1003 BLM => ISO_NUM_BLM,
1004 SHN => ISO_NUM_SHN,
1005 KNA => ISO_NUM_KNA,
1006 LCA => ISO_NUM_LCA,
1007 MAF => ISO_NUM_MAF,
1008 SPM => ISO_NUM_SPM,
1009 VCT => ISO_NUM_VCT,
1010 WSM => ISO_NUM_WSM,
1011 SMR => ISO_NUM_SMR,
1012 STP => ISO_NUM_STP,
1013 SAU => ISO_NUM_SAU,
1014 SEN => ISO_NUM_SEN,
1015 SRB => ISO_NUM_SRB,
1016 SYC => ISO_NUM_SYC,
1017 SLE => ISO_NUM_SLE,
1018 SGP => ISO_NUM_SGP,
1019 SXM => ISO_NUM_SXM,
1020 SVK => ISO_NUM_SVK,
1021 SVN => ISO_NUM_SVN,
1022 SLB => ISO_NUM_SLB,
1023 SOM => ISO_NUM_SOM,
1024 ZAF => ISO_NUM_ZAF,
1025 SGS => ISO_NUM_SGS,
1026 SSD => ISO_NUM_SSD,
1027 ESP => ISO_NUM_ESP,
1028 LKA => ISO_NUM_LKA,
1029 SDN => ISO_NUM_SDN,
1030 SUR => ISO_NUM_SUR,
1031 SJM => ISO_NUM_SJM,
1032 SWZ => ISO_NUM_SWZ,
1033 SWE => ISO_NUM_SWE,
1034 CHE => ISO_NUM_CHE,
1035 SYR => ISO_NUM_SYR,
1036 TWN => ISO_NUM_TWN,
1037 TJK => ISO_NUM_TJK,
1038 TZA => ISO_NUM_TZA,
1039 THA => ISO_NUM_THA,
1040 TLS => ISO_NUM_TLS,
1041 TGO => ISO_NUM_TGO,
1042 TKL => ISO_NUM_TKL,
1043 TON => ISO_NUM_TON,
1044 TTO => ISO_NUM_TTO,
1045 TUN => ISO_NUM_TUN,
1046 TUR => ISO_NUM_TUR,
1047 TKM => ISO_NUM_TKM,
1048 TCA => ISO_NUM_TCA,
1049 TUV => ISO_NUM_TUV,
1050 UGA => ISO_NUM_UGA,
1051 UKR => ISO_NUM_UKR,
1052 ARE => ISO_NUM_ARE,
1053 GBR => ISO_NUM_GBR,
1054 USA => ISO_NUM_USA,
1055 UMI => ISO_NUM_UMI,
1056 URY => ISO_NUM_URY,
1057 UZB => ISO_NUM_UZB,
1058 VUT => ISO_NUM_VUT,
1059 VEN => ISO_NUM_VEN,
1060 VNM => ISO_NUM_VNM,
1061 VGB => ISO_NUM_VGB,
1062 VIR => ISO_NUM_VIR,
1063 WLF => ISO_NUM_WLF,
1064 ESH => ISO_NUM_ESH,
1065 YEM => ISO_NUM_YEM,
1066 ZMB => ISO_NUM_ZMB,
1067 ZWE => ISO_NUM_ZWE,
1068 }
1069 }
1070
1071 pub fn alpha2(&self) -> &'static str {
1073 use self::CountryCode::*;
1074 use alpha2::*;
1075 match *self {
1076 AFG => ISO_A2_AFG,
1077 ALA => ISO_A2_ALA,
1078 ALB => ISO_A2_ALB,
1079 DZA => ISO_A2_DZA,
1080 ASM => ISO_A2_ASM,
1081 AND => ISO_A2_AND,
1082 AGO => ISO_A2_AGO,
1083 AIA => ISO_A2_AIA,
1084 ATA => ISO_A2_ATA,
1085 ATG => ISO_A2_ATG,
1086 ARG => ISO_A2_ARG,
1087 ARM => ISO_A2_ARM,
1088 ABW => ISO_A2_ABW,
1089 AUS => ISO_A2_AUS,
1090 AUT => ISO_A2_AUT,
1091 AZE => ISO_A2_AZE,
1092 BHS => ISO_A2_BHS,
1093 BHR => ISO_A2_BHR,
1094 BGD => ISO_A2_BGD,
1095 BRB => ISO_A2_BRB,
1096 BLR => ISO_A2_BLR,
1097 BEL => ISO_A2_BEL,
1098 BLZ => ISO_A2_BLZ,
1099 BEN => ISO_A2_BEN,
1100 BMU => ISO_A2_BMU,
1101 BTN => ISO_A2_BTN,
1102 BOL => ISO_A2_BOL,
1103 BES => ISO_A2_BES,
1104 BIH => ISO_A2_BIH,
1105 BWA => ISO_A2_BWA,
1106 BVT => ISO_A2_BVT,
1107 BRA => ISO_A2_BRA,
1108 IOT => ISO_A2_IOT,
1109 BRN => ISO_A2_BRN,
1110 BGR => ISO_A2_BGR,
1111 BFA => ISO_A2_BFA,
1112 BDI => ISO_A2_BDI,
1113 CPV => ISO_A2_CPV,
1114 KHM => ISO_A2_KHM,
1115 CMR => ISO_A2_CMR,
1116 CAN => ISO_A2_CAN,
1117 CYM => ISO_A2_CYM,
1118 CAF => ISO_A2_CAF,
1119 TCD => ISO_A2_TCD,
1120 CHL => ISO_A2_CHL,
1121 CHN => ISO_A2_CHN,
1122 CXR => ISO_A2_CXR,
1123 CCK => ISO_A2_CCK,
1124 COL => ISO_A2_COL,
1125 COM => ISO_A2_COM,
1126 COG => ISO_A2_COG,
1127 COD => ISO_A2_COD,
1128 COK => ISO_A2_COK,
1129 CRI => ISO_A2_CRI,
1130 CIV => ISO_A2_CIV,
1131 HRV => ISO_A2_HRV,
1132 CUB => ISO_A2_CUB,
1133 CUW => ISO_A2_CUW,
1134 CYP => ISO_A2_CYP,
1135 CZE => ISO_A2_CZE,
1136 DNK => ISO_A2_DNK,
1137 DJI => ISO_A2_DJI,
1138 DMA => ISO_A2_DMA,
1139 DOM => ISO_A2_DOM,
1140 ECU => ISO_A2_ECU,
1141 EGY => ISO_A2_EGY,
1142 SLV => ISO_A2_SLV,
1143 GNQ => ISO_A2_GNQ,
1144 ERI => ISO_A2_ERI,
1145 EST => ISO_A2_EST,
1146 ETH => ISO_A2_ETH,
1147 FLK => ISO_A2_FLK,
1148 FRO => ISO_A2_FRO,
1149 FJI => ISO_A2_FJI,
1150 FIN => ISO_A2_FIN,
1151 FRA => ISO_A2_FRA,
1152 GUF => ISO_A2_GUF,
1153 PYF => ISO_A2_PYF,
1154 ATF => ISO_A2_ATF,
1155 GAB => ISO_A2_GAB,
1156 GMB => ISO_A2_GMB,
1157 GEO => ISO_A2_GEO,
1158 DEU => ISO_A2_DEU,
1159 GHA => ISO_A2_GHA,
1160 GIB => ISO_A2_GIB,
1161 GRC => ISO_A2_GRC,
1162 GRL => ISO_A2_GRL,
1163 GRD => ISO_A2_GRD,
1164 GLP => ISO_A2_GLP,
1165 GUM => ISO_A2_GUM,
1166 GTM => ISO_A2_GTM,
1167 GGY => ISO_A2_GGY,
1168 GIN => ISO_A2_GIN,
1169 GNB => ISO_A2_GNB,
1170 GUY => ISO_A2_GUY,
1171 HTI => ISO_A2_HTI,
1172 HMD => ISO_A2_HMD,
1173 VAT => ISO_A2_VAT,
1174 HND => ISO_A2_HND,
1175 HKG => ISO_A2_HKG,
1176 HUN => ISO_A2_HUN,
1177 ISL => ISO_A2_ISL,
1178 IND => ISO_A2_IND,
1179 IDN => ISO_A2_IDN,
1180 IRN => ISO_A2_IRN,
1181 IRQ => ISO_A2_IRQ,
1182 IRL => ISO_A2_IRL,
1183 IMN => ISO_A2_IMN,
1184 ISR => ISO_A2_ISR,
1185 ITA => ISO_A2_ITA,
1186 JAM => ISO_A2_JAM,
1187 JPN => ISO_A2_JPN,
1188 JEY => ISO_A2_JEY,
1189 JOR => ISO_A2_JOR,
1190 KAZ => ISO_A2_KAZ,
1191 KEN => ISO_A2_KEN,
1192 KIR => ISO_A2_KIR,
1193 PRK => ISO_A2_PRK,
1194 KOR => ISO_A2_KOR,
1195 KWT => ISO_A2_KWT,
1196 KGZ => ISO_A2_KGZ,
1197 LAO => ISO_A2_LAO,
1198 LVA => ISO_A2_LVA,
1199 LBN => ISO_A2_LBN,
1200 LSO => ISO_A2_LSO,
1201 LBR => ISO_A2_LBR,
1202 LBY => ISO_A2_LBY,
1203 LIE => ISO_A2_LIE,
1204 LTU => ISO_A2_LTU,
1205 LUX => ISO_A2_LUX,
1206 MAC => ISO_A2_MAC,
1207 MKD => ISO_A2_MKD,
1208 MDG => ISO_A2_MDG,
1209 MWI => ISO_A2_MWI,
1210 MYS => ISO_A2_MYS,
1211 MDV => ISO_A2_MDV,
1212 MLI => ISO_A2_MLI,
1213 MLT => ISO_A2_MLT,
1214 MHL => ISO_A2_MHL,
1215 MTQ => ISO_A2_MTQ,
1216 MRT => ISO_A2_MRT,
1217 MUS => ISO_A2_MUS,
1218 MYT => ISO_A2_MYT,
1219 MEX => ISO_A2_MEX,
1220 FSM => ISO_A2_FSM,
1221 MDA => ISO_A2_MDA,
1222 MCO => ISO_A2_MCO,
1223 MNG => ISO_A2_MNG,
1224 MNE => ISO_A2_MNE,
1225 MSR => ISO_A2_MSR,
1226 MAR => ISO_A2_MAR,
1227 MOZ => ISO_A2_MOZ,
1228 MMR => ISO_A2_MMR,
1229 NAM => ISO_A2_NAM,
1230 NRU => ISO_A2_NRU,
1231 NPL => ISO_A2_NPL,
1232 NLD => ISO_A2_NLD,
1233 NCL => ISO_A2_NCL,
1234 NZL => ISO_A2_NZL,
1235 NIC => ISO_A2_NIC,
1236 NER => ISO_A2_NER,
1237 NGA => ISO_A2_NGA,
1238 NIU => ISO_A2_NIU,
1239 NFK => ISO_A2_NFK,
1240 MNP => ISO_A2_MNP,
1241 NOR => ISO_A2_NOR,
1242 OMN => ISO_A2_OMN,
1243 PAK => ISO_A2_PAK,
1244 PLW => ISO_A2_PLW,
1245 PSE => ISO_A2_PSE,
1246 PAN => ISO_A2_PAN,
1247 PNG => ISO_A2_PNG,
1248 PRY => ISO_A2_PRY,
1249 PER => ISO_A2_PER,
1250 PHL => ISO_A2_PHL,
1251 PCN => ISO_A2_PCN,
1252 POL => ISO_A2_POL,
1253 PRT => ISO_A2_PRT,
1254 PRI => ISO_A2_PRI,
1255 QAT => ISO_A2_QAT,
1256 REU => ISO_A2_REU,
1257 ROU => ISO_A2_ROU,
1258 RUS => ISO_A2_RUS,
1259 RWA => ISO_A2_RWA,
1260 BLM => ISO_A2_BLM,
1261 SHN => ISO_A2_SHN,
1262 KNA => ISO_A2_KNA,
1263 LCA => ISO_A2_LCA,
1264 MAF => ISO_A2_MAF,
1265 SPM => ISO_A2_SPM,
1266 VCT => ISO_A2_VCT,
1267 WSM => ISO_A2_WSM,
1268 SMR => ISO_A2_SMR,
1269 STP => ISO_A2_STP,
1270 SAU => ISO_A2_SAU,
1271 SEN => ISO_A2_SEN,
1272 SRB => ISO_A2_SRB,
1273 SYC => ISO_A2_SYC,
1274 SLE => ISO_A2_SLE,
1275 SGP => ISO_A2_SGP,
1276 SXM => ISO_A2_SXM,
1277 SVK => ISO_A2_SVK,
1278 SVN => ISO_A2_SVN,
1279 SLB => ISO_A2_SLB,
1280 SOM => ISO_A2_SOM,
1281 ZAF => ISO_A2_ZAF,
1282 SGS => ISO_A2_SGS,
1283 SSD => ISO_A2_SSD,
1284 ESP => ISO_A2_ESP,
1285 LKA => ISO_A2_LKA,
1286 SDN => ISO_A2_SDN,
1287 SUR => ISO_A2_SUR,
1288 SJM => ISO_A2_SJM,
1289 SWZ => ISO_A2_SWZ,
1290 SWE => ISO_A2_SWE,
1291 CHE => ISO_A2_CHE,
1292 SYR => ISO_A2_SYR,
1293 TWN => ISO_A2_TWN,
1294 TJK => ISO_A2_TJK,
1295 TZA => ISO_A2_TZA,
1296 THA => ISO_A2_THA,
1297 TLS => ISO_A2_TLS,
1298 TGO => ISO_A2_TGO,
1299 TKL => ISO_A2_TKL,
1300 TON => ISO_A2_TON,
1301 TTO => ISO_A2_TTO,
1302 TUN => ISO_A2_TUN,
1303 TUR => ISO_A2_TUR,
1304 TKM => ISO_A2_TKM,
1305 TCA => ISO_A2_TCA,
1306 TUV => ISO_A2_TUV,
1307 UGA => ISO_A2_UGA,
1308 UKR => ISO_A2_UKR,
1309 ARE => ISO_A2_ARE,
1310 GBR => ISO_A2_GBR,
1311 USA => ISO_A2_USA,
1312 UMI => ISO_A2_UMI,
1313 URY => ISO_A2_URY,
1314 UZB => ISO_A2_UZB,
1315 VUT => ISO_A2_VUT,
1316 VEN => ISO_A2_VEN,
1317 VNM => ISO_A2_VNM,
1318 VGB => ISO_A2_VGB,
1319 VIR => ISO_A2_VIR,
1320 WLF => ISO_A2_WLF,
1321 ESH => ISO_A2_ESH,
1322 YEM => ISO_A2_YEM,
1323 ZMB => ISO_A2_ZMB,
1324 ZWE => ISO_A2_ZWE,
1325 }
1326 }
1327
1328 pub fn alpha3(&self) -> &'static str {
1330 use self::CountryCode::*;
1331 use alpha3::*;
1332 match *self {
1333 AFG => ISO_A3_AFG,
1334 ALA => ISO_A3_ALA,
1335 ALB => ISO_A3_ALB,
1336 DZA => ISO_A3_DZA,
1337 ASM => ISO_A3_ASM,
1338 AND => ISO_A3_AND,
1339 AGO => ISO_A3_AGO,
1340 AIA => ISO_A3_AIA,
1341 ATA => ISO_A3_ATA,
1342 ATG => ISO_A3_ATG,
1343 ARG => ISO_A3_ARG,
1344 ARM => ISO_A3_ARM,
1345 ABW => ISO_A3_ABW,
1346 AUS => ISO_A3_AUS,
1347 AUT => ISO_A3_AUT,
1348 AZE => ISO_A3_AZE,
1349 BHS => ISO_A3_BHS,
1350 BHR => ISO_A3_BHR,
1351 BGD => ISO_A3_BGD,
1352 BRB => ISO_A3_BRB,
1353 BLR => ISO_A3_BLR,
1354 BEL => ISO_A3_BEL,
1355 BLZ => ISO_A3_BLZ,
1356 BEN => ISO_A3_BEN,
1357 BMU => ISO_A3_BMU,
1358 BTN => ISO_A3_BTN,
1359 BOL => ISO_A3_BOL,
1360 BES => ISO_A3_BES,
1361 BIH => ISO_A3_BIH,
1362 BWA => ISO_A3_BWA,
1363 BVT => ISO_A3_BVT,
1364 BRA => ISO_A3_BRA,
1365 IOT => ISO_A3_IOT,
1366 BRN => ISO_A3_BRN,
1367 BGR => ISO_A3_BGR,
1368 BFA => ISO_A3_BFA,
1369 BDI => ISO_A3_BDI,
1370 CPV => ISO_A3_CPV,
1371 KHM => ISO_A3_KHM,
1372 CMR => ISO_A3_CMR,
1373 CAN => ISO_A3_CAN,
1374 CYM => ISO_A3_CYM,
1375 CAF => ISO_A3_CAF,
1376 TCD => ISO_A3_TCD,
1377 CHL => ISO_A3_CHL,
1378 CHN => ISO_A3_CHN,
1379 CXR => ISO_A3_CXR,
1380 CCK => ISO_A3_CCK,
1381 COL => ISO_A3_COL,
1382 COM => ISO_A3_COM,
1383 COG => ISO_A3_COG,
1384 COD => ISO_A3_COD,
1385 COK => ISO_A3_COK,
1386 CRI => ISO_A3_CRI,
1387 CIV => ISO_A3_CIV,
1388 HRV => ISO_A3_HRV,
1389 CUB => ISO_A3_CUB,
1390 CUW => ISO_A3_CUW,
1391 CYP => ISO_A3_CYP,
1392 CZE => ISO_A3_CZE,
1393 DNK => ISO_A3_DNK,
1394 DJI => ISO_A3_DJI,
1395 DMA => ISO_A3_DMA,
1396 DOM => ISO_A3_DOM,
1397 ECU => ISO_A3_ECU,
1398 EGY => ISO_A3_EGY,
1399 SLV => ISO_A3_SLV,
1400 GNQ => ISO_A3_GNQ,
1401 ERI => ISO_A3_ERI,
1402 EST => ISO_A3_EST,
1403 ETH => ISO_A3_ETH,
1404 FLK => ISO_A3_FLK,
1405 FRO => ISO_A3_FRO,
1406 FJI => ISO_A3_FJI,
1407 FIN => ISO_A3_FIN,
1408 FRA => ISO_A3_FRA,
1409 GUF => ISO_A3_GUF,
1410 PYF => ISO_A3_PYF,
1411 ATF => ISO_A3_ATF,
1412 GAB => ISO_A3_GAB,
1413 GMB => ISO_A3_GMB,
1414 GEO => ISO_A3_GEO,
1415 DEU => ISO_A3_DEU,
1416 GHA => ISO_A3_GHA,
1417 GIB => ISO_A3_GIB,
1418 GRC => ISO_A3_GRC,
1419 GRL => ISO_A3_GRL,
1420 GRD => ISO_A3_GRD,
1421 GLP => ISO_A3_GLP,
1422 GUM => ISO_A3_GUM,
1423 GTM => ISO_A3_GTM,
1424 GGY => ISO_A3_GGY,
1425 GIN => ISO_A3_GIN,
1426 GNB => ISO_A3_GNB,
1427 GUY => ISO_A3_GUY,
1428 HTI => ISO_A3_HTI,
1429 HMD => ISO_A3_HMD,
1430 VAT => ISO_A3_VAT,
1431 HND => ISO_A3_HND,
1432 HKG => ISO_A3_HKG,
1433 HUN => ISO_A3_HUN,
1434 ISL => ISO_A3_ISL,
1435 IND => ISO_A3_IND,
1436 IDN => ISO_A3_IDN,
1437 IRN => ISO_A3_IRN,
1438 IRQ => ISO_A3_IRQ,
1439 IRL => ISO_A3_IRL,
1440 IMN => ISO_A3_IMN,
1441 ISR => ISO_A3_ISR,
1442 ITA => ISO_A3_ITA,
1443 JAM => ISO_A3_JAM,
1444 JPN => ISO_A3_JPN,
1445 JEY => ISO_A3_JEY,
1446 JOR => ISO_A3_JOR,
1447 KAZ => ISO_A3_KAZ,
1448 KEN => ISO_A3_KEN,
1449 KIR => ISO_A3_KIR,
1450 PRK => ISO_A3_PRK,
1451 KOR => ISO_A3_KOR,
1452 KWT => ISO_A3_KWT,
1453 KGZ => ISO_A3_KGZ,
1454 LAO => ISO_A3_LAO,
1455 LVA => ISO_A3_LVA,
1456 LBN => ISO_A3_LBN,
1457 LSO => ISO_A3_LSO,
1458 LBR => ISO_A3_LBR,
1459 LBY => ISO_A3_LBY,
1460 LIE => ISO_A3_LIE,
1461 LTU => ISO_A3_LTU,
1462 LUX => ISO_A3_LUX,
1463 MAC => ISO_A3_MAC,
1464 MKD => ISO_A3_MKD,
1465 MDG => ISO_A3_MDG,
1466 MWI => ISO_A3_MWI,
1467 MYS => ISO_A3_MYS,
1468 MDV => ISO_A3_MDV,
1469 MLI => ISO_A3_MLI,
1470 MLT => ISO_A3_MLT,
1471 MHL => ISO_A3_MHL,
1472 MTQ => ISO_A3_MTQ,
1473 MRT => ISO_A3_MRT,
1474 MUS => ISO_A3_MUS,
1475 MYT => ISO_A3_MYT,
1476 MEX => ISO_A3_MEX,
1477 FSM => ISO_A3_FSM,
1478 MDA => ISO_A3_MDA,
1479 MCO => ISO_A3_MCO,
1480 MNG => ISO_A3_MNG,
1481 MNE => ISO_A3_MNE,
1482 MSR => ISO_A3_MSR,
1483 MAR => ISO_A3_MAR,
1484 MOZ => ISO_A3_MOZ,
1485 MMR => ISO_A3_MMR,
1486 NAM => ISO_A3_NAM,
1487 NRU => ISO_A3_NRU,
1488 NPL => ISO_A3_NPL,
1489 NLD => ISO_A3_NLD,
1490 NCL => ISO_A3_NCL,
1491 NZL => ISO_A3_NZL,
1492 NIC => ISO_A3_NIC,
1493 NER => ISO_A3_NER,
1494 NGA => ISO_A3_NGA,
1495 NIU => ISO_A3_NIU,
1496 NFK => ISO_A3_NFK,
1497 MNP => ISO_A3_MNP,
1498 NOR => ISO_A3_NOR,
1499 OMN => ISO_A3_OMN,
1500 PAK => ISO_A3_PAK,
1501 PLW => ISO_A3_PLW,
1502 PSE => ISO_A3_PSE,
1503 PAN => ISO_A3_PAN,
1504 PNG => ISO_A3_PNG,
1505 PRY => ISO_A3_PRY,
1506 PER => ISO_A3_PER,
1507 PHL => ISO_A3_PHL,
1508 PCN => ISO_A3_PCN,
1509 POL => ISO_A3_POL,
1510 PRT => ISO_A3_PRT,
1511 PRI => ISO_A3_PRI,
1512 QAT => ISO_A3_QAT,
1513 REU => ISO_A3_REU,
1514 ROU => ISO_A3_ROU,
1515 RUS => ISO_A3_RUS,
1516 RWA => ISO_A3_RWA,
1517 BLM => ISO_A3_BLM,
1518 SHN => ISO_A3_SHN,
1519 KNA => ISO_A3_KNA,
1520 LCA => ISO_A3_LCA,
1521 MAF => ISO_A3_MAF,
1522 SPM => ISO_A3_SPM,
1523 VCT => ISO_A3_VCT,
1524 WSM => ISO_A3_WSM,
1525 SMR => ISO_A3_SMR,
1526 STP => ISO_A3_STP,
1527 SAU => ISO_A3_SAU,
1528 SEN => ISO_A3_SEN,
1529 SRB => ISO_A3_SRB,
1530 SYC => ISO_A3_SYC,
1531 SLE => ISO_A3_SLE,
1532 SGP => ISO_A3_SGP,
1533 SXM => ISO_A3_SXM,
1534 SVK => ISO_A3_SVK,
1535 SVN => ISO_A3_SVN,
1536 SLB => ISO_A3_SLB,
1537 SOM => ISO_A3_SOM,
1538 ZAF => ISO_A3_ZAF,
1539 SGS => ISO_A3_SGS,
1540 SSD => ISO_A3_SSD,
1541 ESP => ISO_A3_ESP,
1542 LKA => ISO_A3_LKA,
1543 SDN => ISO_A3_SDN,
1544 SUR => ISO_A3_SUR,
1545 SJM => ISO_A3_SJM,
1546 SWZ => ISO_A3_SWZ,
1547 SWE => ISO_A3_SWE,
1548 CHE => ISO_A3_CHE,
1549 SYR => ISO_A3_SYR,
1550 TWN => ISO_A3_TWN,
1551 TJK => ISO_A3_TJK,
1552 TZA => ISO_A3_TZA,
1553 THA => ISO_A3_THA,
1554 TLS => ISO_A3_TLS,
1555 TGO => ISO_A3_TGO,
1556 TKL => ISO_A3_TKL,
1557 TON => ISO_A3_TON,
1558 TTO => ISO_A3_TTO,
1559 TUN => ISO_A3_TUN,
1560 TUR => ISO_A3_TUR,
1561 TKM => ISO_A3_TKM,
1562 TCA => ISO_A3_TCA,
1563 TUV => ISO_A3_TUV,
1564 UGA => ISO_A3_UGA,
1565 UKR => ISO_A3_UKR,
1566 ARE => ISO_A3_ARE,
1567 GBR => ISO_A3_GBR,
1568 USA => ISO_A3_USA,
1569 UMI => ISO_A3_UMI,
1570 URY => ISO_A3_URY,
1571 UZB => ISO_A3_UZB,
1572 VUT => ISO_A3_VUT,
1573 VEN => ISO_A3_VEN,
1574 VNM => ISO_A3_VNM,
1575 VGB => ISO_A3_VGB,
1576 VIR => ISO_A3_VIR,
1577 WLF => ISO_A3_WLF,
1578 ESH => ISO_A3_ESH,
1579 YEM => ISO_A3_YEM,
1580 ZMB => ISO_A3_ZMB,
1581 ZWE => ISO_A3_ZWE,
1582 }
1583 }
1584
1585 pub fn for_alpha2(value: &str) -> Result<CountryCode, CountryCodeParseErr> {
1588 use CountryCode::*;
1589 use alpha2::*;
1590 match value {
1591 ISO_A2_AFG => Ok(AFG),
1592 ISO_A2_ALA => Ok(ALA),
1593 ISO_A2_ALB => Ok(ALB),
1594 ISO_A2_DZA => Ok(DZA),
1595 ISO_A2_ASM => Ok(ASM),
1596 ISO_A2_AND => Ok(AND),
1597 ISO_A2_AGO => Ok(AGO),
1598 ISO_A2_AIA => Ok(AIA),
1599 ISO_A2_ATA => Ok(ATA),
1600 ISO_A2_ATG => Ok(ATG),
1601 ISO_A2_ARG => Ok(ARG),
1602 ISO_A2_ARM => Ok(ARM),
1603 ISO_A2_ABW => Ok(ABW),
1604 ISO_A2_AUS => Ok(AUS),
1605 ISO_A2_AUT => Ok(AUT),
1606 ISO_A2_AZE => Ok(AZE),
1607 ISO_A2_BHS => Ok(BHS),
1608 ISO_A2_BHR => Ok(BHR),
1609 ISO_A2_BGD => Ok(BGD),
1610 ISO_A2_BRB => Ok(BRB),
1611 ISO_A2_BLR => Ok(BLR),
1612 ISO_A2_BEL => Ok(BEL),
1613 ISO_A2_BLZ => Ok(BLZ),
1614 ISO_A2_BEN => Ok(BEN),
1615 ISO_A2_BMU => Ok(BMU),
1616 ISO_A2_BTN => Ok(BTN),
1617 ISO_A2_BOL => Ok(BOL),
1618 ISO_A2_BES => Ok(BES),
1619 ISO_A2_BIH => Ok(BIH),
1620 ISO_A2_BWA => Ok(BWA),
1621 ISO_A2_BVT => Ok(BVT),
1622 ISO_A2_BRA => Ok(BRA),
1623 ISO_A2_IOT => Ok(IOT),
1624 ISO_A2_BRN => Ok(BRN),
1625 ISO_A2_BGR => Ok(BGR),
1626 ISO_A2_BFA => Ok(BFA),
1627 ISO_A2_BDI => Ok(BDI),
1628 ISO_A2_CPV => Ok(CPV),
1629 ISO_A2_KHM => Ok(KHM),
1630 ISO_A2_CMR => Ok(CMR),
1631 ISO_A2_CAN => Ok(CAN),
1632 ISO_A2_CYM => Ok(CYM),
1633 ISO_A2_CAF => Ok(CAF),
1634 ISO_A2_TCD => Ok(TCD),
1635 ISO_A2_CHL => Ok(CHL),
1636 ISO_A2_CHN => Ok(CHN),
1637 ISO_A2_CXR => Ok(CXR),
1638 ISO_A2_CCK => Ok(CCK),
1639 ISO_A2_COL => Ok(COL),
1640 ISO_A2_COM => Ok(COM),
1641 ISO_A2_COG => Ok(COG),
1642 ISO_A2_COD => Ok(COD),
1643 ISO_A2_COK => Ok(COK),
1644 ISO_A2_CRI => Ok(CRI),
1645 ISO_A2_CIV => Ok(CIV),
1646 ISO_A2_HRV => Ok(HRV),
1647 ISO_A2_CUB => Ok(CUB),
1648 ISO_A2_CUW => Ok(CUW),
1649 ISO_A2_CYP => Ok(CYP),
1650 ISO_A2_CZE => Ok(CZE),
1651 ISO_A2_DNK => Ok(DNK),
1652 ISO_A2_DJI => Ok(DJI),
1653 ISO_A2_DMA => Ok(DMA),
1654 ISO_A2_DOM => Ok(DOM),
1655 ISO_A2_ECU => Ok(ECU),
1656 ISO_A2_EGY => Ok(EGY),
1657 ISO_A2_SLV => Ok(SLV),
1658 ISO_A2_GNQ => Ok(GNQ),
1659 ISO_A2_ERI => Ok(ERI),
1660 ISO_A2_EST => Ok(EST),
1661 ISO_A2_ETH => Ok(ETH),
1662 ISO_A2_FLK => Ok(FLK),
1663 ISO_A2_FRO => Ok(FRO),
1664 ISO_A2_FJI => Ok(FJI),
1665 ISO_A2_FIN => Ok(FIN),
1666 ISO_A2_FRA => Ok(FRA),
1667 ISO_A2_GUF => Ok(GUF),
1668 ISO_A2_PYF => Ok(PYF),
1669 ISO_A2_ATF => Ok(ATF),
1670 ISO_A2_GAB => Ok(GAB),
1671 ISO_A2_GMB => Ok(GMB),
1672 ISO_A2_GEO => Ok(GEO),
1673 ISO_A2_DEU => Ok(DEU),
1674 ISO_A2_GHA => Ok(GHA),
1675 ISO_A2_GIB => Ok(GIB),
1676 ISO_A2_GRC => Ok(GRC),
1677 ISO_A2_GRL => Ok(GRL),
1678 ISO_A2_GRD => Ok(GRD),
1679 ISO_A2_GLP => Ok(GLP),
1680 ISO_A2_GUM => Ok(GUM),
1681 ISO_A2_GTM => Ok(GTM),
1682 ISO_A2_GGY => Ok(GGY),
1683 ISO_A2_GIN => Ok(GIN),
1684 ISO_A2_GNB => Ok(GNB),
1685 ISO_A2_GUY => Ok(GUY),
1686 ISO_A2_HTI => Ok(HTI),
1687 ISO_A2_HMD => Ok(HMD),
1688 ISO_A2_VAT => Ok(VAT),
1689 ISO_A2_HND => Ok(HND),
1690 ISO_A2_HKG => Ok(HKG),
1691 ISO_A2_HUN => Ok(HUN),
1692 ISO_A2_ISL => Ok(ISL),
1693 ISO_A2_IND => Ok(IND),
1694 ISO_A2_IDN => Ok(IDN),
1695 ISO_A2_IRN => Ok(IRN),
1696 ISO_A2_IRQ => Ok(IRQ),
1697 ISO_A2_IRL => Ok(IRL),
1698 ISO_A2_IMN => Ok(IMN),
1699 ISO_A2_ISR => Ok(ISR),
1700 ISO_A2_ITA => Ok(ITA),
1701 ISO_A2_JAM => Ok(JAM),
1702 ISO_A2_JPN => Ok(JPN),
1703 ISO_A2_JEY => Ok(JEY),
1704 ISO_A2_JOR => Ok(JOR),
1705 ISO_A2_KAZ => Ok(KAZ),
1706 ISO_A2_KEN => Ok(KEN),
1707 ISO_A2_KIR => Ok(KIR),
1708 ISO_A2_PRK => Ok(PRK),
1709 ISO_A2_KOR => Ok(KOR),
1710 ISO_A2_KWT => Ok(KWT),
1711 ISO_A2_KGZ => Ok(KGZ),
1712 ISO_A2_LAO => Ok(LAO),
1713 ISO_A2_LVA => Ok(LVA),
1714 ISO_A2_LBN => Ok(LBN),
1715 ISO_A2_LSO => Ok(LSO),
1716 ISO_A2_LBR => Ok(LBR),
1717 ISO_A2_LBY => Ok(LBY),
1718 ISO_A2_LIE => Ok(LIE),
1719 ISO_A2_LTU => Ok(LTU),
1720 ISO_A2_LUX => Ok(LUX),
1721 ISO_A2_MAC => Ok(MAC),
1722 ISO_A2_MKD => Ok(MKD),
1723 ISO_A2_MDG => Ok(MDG),
1724 ISO_A2_MWI => Ok(MWI),
1725 ISO_A2_MYS => Ok(MYS),
1726 ISO_A2_MDV => Ok(MDV),
1727 ISO_A2_MLI => Ok(MLI),
1728 ISO_A2_MLT => Ok(MLT),
1729 ISO_A2_MHL => Ok(MHL),
1730 ISO_A2_MTQ => Ok(MTQ),
1731 ISO_A2_MRT => Ok(MRT),
1732 ISO_A2_MUS => Ok(MUS),
1733 ISO_A2_MYT => Ok(MYT),
1734 ISO_A2_MEX => Ok(MEX),
1735 ISO_A2_FSM => Ok(FSM),
1736 ISO_A2_MDA => Ok(MDA),
1737 ISO_A2_MCO => Ok(MCO),
1738 ISO_A2_MNG => Ok(MNG),
1739 ISO_A2_MNE => Ok(MNE),
1740 ISO_A2_MSR => Ok(MSR),
1741 ISO_A2_MAR => Ok(MAR),
1742 ISO_A2_MOZ => Ok(MOZ),
1743 ISO_A2_MMR => Ok(MMR),
1744 ISO_A2_NAM => Ok(NAM),
1745 ISO_A2_NRU => Ok(NRU),
1746 ISO_A2_NPL => Ok(NPL),
1747 ISO_A2_NLD => Ok(NLD),
1748 ISO_A2_NCL => Ok(NCL),
1749 ISO_A2_NZL => Ok(NZL),
1750 ISO_A2_NIC => Ok(NIC),
1751 ISO_A2_NER => Ok(NER),
1752 ISO_A2_NGA => Ok(NGA),
1753 ISO_A2_NIU => Ok(NIU),
1754 ISO_A2_NFK => Ok(NFK),
1755 ISO_A2_MNP => Ok(MNP),
1756 ISO_A2_NOR => Ok(NOR),
1757 ISO_A2_OMN => Ok(OMN),
1758 ISO_A2_PAK => Ok(PAK),
1759 ISO_A2_PLW => Ok(PLW),
1760 ISO_A2_PSE => Ok(PSE),
1761 ISO_A2_PAN => Ok(PAN),
1762 ISO_A2_PNG => Ok(PNG),
1763 ISO_A2_PRY => Ok(PRY),
1764 ISO_A2_PER => Ok(PER),
1765 ISO_A2_PHL => Ok(PHL),
1766 ISO_A2_PCN => Ok(PCN),
1767 ISO_A2_POL => Ok(POL),
1768 ISO_A2_PRT => Ok(PRT),
1769 ISO_A2_PRI => Ok(PRI),
1770 ISO_A2_QAT => Ok(QAT),
1771 ISO_A2_REU => Ok(REU),
1772 ISO_A2_ROU => Ok(ROU),
1773 ISO_A2_RUS => Ok(RUS),
1774 ISO_A2_RWA => Ok(RWA),
1775 ISO_A2_BLM => Ok(BLM),
1776 ISO_A2_SHN => Ok(SHN),
1777 ISO_A2_KNA => Ok(KNA),
1778 ISO_A2_LCA => Ok(LCA),
1779 ISO_A2_MAF => Ok(MAF),
1780 ISO_A2_SPM => Ok(SPM),
1781 ISO_A2_VCT => Ok(VCT),
1782 ISO_A2_WSM => Ok(WSM),
1783 ISO_A2_SMR => Ok(SMR),
1784 ISO_A2_STP => Ok(STP),
1785 ISO_A2_SAU => Ok(SAU),
1786 ISO_A2_SEN => Ok(SEN),
1787 ISO_A2_SRB => Ok(SRB),
1788 ISO_A2_SYC => Ok(SYC),
1789 ISO_A2_SLE => Ok(SLE),
1790 ISO_A2_SGP => Ok(SGP),
1791 ISO_A2_SXM => Ok(SXM),
1792 ISO_A2_SVK => Ok(SVK),
1793 ISO_A2_SVN => Ok(SVN),
1794 ISO_A2_SLB => Ok(SLB),
1795 ISO_A2_SOM => Ok(SOM),
1796 ISO_A2_ZAF => Ok(ZAF),
1797 ISO_A2_SGS => Ok(SGS),
1798 ISO_A2_SSD => Ok(SSD),
1799 ISO_A2_ESP => Ok(ESP),
1800 ISO_A2_LKA => Ok(LKA),
1801 ISO_A2_SDN => Ok(SDN),
1802 ISO_A2_SUR => Ok(SUR),
1803 ISO_A2_SJM => Ok(SJM),
1804 ISO_A2_SWZ => Ok(SWZ),
1805 ISO_A2_SWE => Ok(SWE),
1806 ISO_A2_CHE => Ok(CHE),
1807 ISO_A2_SYR => Ok(SYR),
1808 ISO_A2_TWN => Ok(TWN),
1809 ISO_A2_TJK => Ok(TJK),
1810 ISO_A2_TZA => Ok(TZA),
1811 ISO_A2_THA => Ok(THA),
1812 ISO_A2_TLS => Ok(TLS),
1813 ISO_A2_TGO => Ok(TGO),
1814 ISO_A2_TKL => Ok(TKL),
1815 ISO_A2_TON => Ok(TON),
1816 ISO_A2_TTO => Ok(TTO),
1817 ISO_A2_TUN => Ok(TUN),
1818 ISO_A2_TUR => Ok(TUR),
1819 ISO_A2_TKM => Ok(TKM),
1820 ISO_A2_TCA => Ok(TCA),
1821 ISO_A2_TUV => Ok(TUV),
1822 ISO_A2_UGA => Ok(UGA),
1823 ISO_A2_UKR => Ok(UKR),
1824 ISO_A2_ARE => Ok(ARE),
1825 ISO_A2_GBR => Ok(GBR),
1826 ISO_A2_USA => Ok(USA),
1827 ISO_A2_UMI => Ok(UMI),
1828 ISO_A2_URY => Ok(URY),
1829 ISO_A2_UZB => Ok(UZB),
1830 ISO_A2_VUT => Ok(VUT),
1831 ISO_A2_VEN => Ok(VEN),
1832 ISO_A2_VNM => Ok(VNM),
1833 ISO_A2_VGB => Ok(VGB),
1834 ISO_A2_VIR => Ok(VIR),
1835 ISO_A2_WLF => Ok(WLF),
1836 ISO_A2_ESH => Ok(ESH),
1837 ISO_A2_YEM => Ok(YEM),
1838 ISO_A2_ZMB => Ok(ZMB),
1839 ISO_A2_ZWE => Ok(ZWE),
1840 x => Err(CountryCodeParseErr::InvalidAlpha2 {
1841 unknown: String::from(x),
1842 }),
1843 }
1844 }
1845
1846 pub fn for_alpha2_caseless(value: &str) -> Result<CountryCode, CountryCodeParseErr> {
1849 let uppercase = value.to_uppercase();
1850 CountryCode::for_alpha2(uppercase.as_ref())
1851 }
1852
1853 pub fn for_alpha3(value: &str) -> Result<CountryCode, CountryCodeParseErr> {
1856 use CountryCode::*;
1857 use alpha3::*;
1858 match value {
1859 ISO_A3_AFG => Ok(AFG),
1860 ISO_A3_ALA => Ok(ALA),
1861 ISO_A3_ALB => Ok(ALB),
1862 ISO_A3_DZA => Ok(DZA),
1863 ISO_A3_ASM => Ok(ASM),
1864 ISO_A3_AND => Ok(AND),
1865 ISO_A3_AGO => Ok(AGO),
1866 ISO_A3_AIA => Ok(AIA),
1867 ISO_A3_ATA => Ok(ATA),
1868 ISO_A3_ATG => Ok(ATG),
1869 ISO_A3_ARG => Ok(ARG),
1870 ISO_A3_ARM => Ok(ARM),
1871 ISO_A3_ABW => Ok(ABW),
1872 ISO_A3_AUS => Ok(AUS),
1873 ISO_A3_AUT => Ok(AUT),
1874 ISO_A3_AZE => Ok(AZE),
1875 ISO_A3_BHS => Ok(BHS),
1876 ISO_A3_BHR => Ok(BHR),
1877 ISO_A3_BGD => Ok(BGD),
1878 ISO_A3_BRB => Ok(BRB),
1879 ISO_A3_BLR => Ok(BLR),
1880 ISO_A3_BEL => Ok(BEL),
1881 ISO_A3_BLZ => Ok(BLZ),
1882 ISO_A3_BEN => Ok(BEN),
1883 ISO_A3_BMU => Ok(BMU),
1884 ISO_A3_BTN => Ok(BTN),
1885 ISO_A3_BOL => Ok(BOL),
1886 ISO_A3_BES => Ok(BES),
1887 ISO_A3_BIH => Ok(BIH),
1888 ISO_A3_BWA => Ok(BWA),
1889 ISO_A3_BVT => Ok(BVT),
1890 ISO_A3_BRA => Ok(BRA),
1891 ISO_A3_IOT => Ok(IOT),
1892 ISO_A3_BRN => Ok(BRN),
1893 ISO_A3_BGR => Ok(BGR),
1894 ISO_A3_BFA => Ok(BFA),
1895 ISO_A3_BDI => Ok(BDI),
1896 ISO_A3_CPV => Ok(CPV),
1897 ISO_A3_KHM => Ok(KHM),
1898 ISO_A3_CMR => Ok(CMR),
1899 ISO_A3_CAN => Ok(CAN),
1900 ISO_A3_CYM => Ok(CYM),
1901 ISO_A3_CAF => Ok(CAF),
1902 ISO_A3_TCD => Ok(TCD),
1903 ISO_A3_CHL => Ok(CHL),
1904 ISO_A3_CHN => Ok(CHN),
1905 ISO_A3_CXR => Ok(CXR),
1906 ISO_A3_CCK => Ok(CCK),
1907 ISO_A3_COL => Ok(COL),
1908 ISO_A3_COM => Ok(COM),
1909 ISO_A3_COG => Ok(COG),
1910 ISO_A3_COD => Ok(COD),
1911 ISO_A3_COK => Ok(COK),
1912 ISO_A3_CRI => Ok(CRI),
1913 ISO_A3_CIV => Ok(CIV),
1914 ISO_A3_HRV => Ok(HRV),
1915 ISO_A3_CUB => Ok(CUB),
1916 ISO_A3_CUW => Ok(CUW),
1917 ISO_A3_CYP => Ok(CYP),
1918 ISO_A3_CZE => Ok(CZE),
1919 ISO_A3_DNK => Ok(DNK),
1920 ISO_A3_DJI => Ok(DJI),
1921 ISO_A3_DMA => Ok(DMA),
1922 ISO_A3_DOM => Ok(DOM),
1923 ISO_A3_ECU => Ok(ECU),
1924 ISO_A3_EGY => Ok(EGY),
1925 ISO_A3_SLV => Ok(SLV),
1926 ISO_A3_GNQ => Ok(GNQ),
1927 ISO_A3_ERI => Ok(ERI),
1928 ISO_A3_EST => Ok(EST),
1929 ISO_A3_ETH => Ok(ETH),
1930 ISO_A3_FLK => Ok(FLK),
1931 ISO_A3_FRO => Ok(FRO),
1932 ISO_A3_FJI => Ok(FJI),
1933 ISO_A3_FIN => Ok(FIN),
1934 ISO_A3_FRA => Ok(FRA),
1935 ISO_A3_GUF => Ok(GUF),
1936 ISO_A3_PYF => Ok(PYF),
1937 ISO_A3_ATF => Ok(ATF),
1938 ISO_A3_GAB => Ok(GAB),
1939 ISO_A3_GMB => Ok(GMB),
1940 ISO_A3_GEO => Ok(GEO),
1941 ISO_A3_DEU => Ok(DEU),
1942 ISO_A3_GHA => Ok(GHA),
1943 ISO_A3_GIB => Ok(GIB),
1944 ISO_A3_GRC => Ok(GRC),
1945 ISO_A3_GRL => Ok(GRL),
1946 ISO_A3_GRD => Ok(GRD),
1947 ISO_A3_GLP => Ok(GLP),
1948 ISO_A3_GUM => Ok(GUM),
1949 ISO_A3_GTM => Ok(GTM),
1950 ISO_A3_GGY => Ok(GGY),
1951 ISO_A3_GIN => Ok(GIN),
1952 ISO_A3_GNB => Ok(GNB),
1953 ISO_A3_GUY => Ok(GUY),
1954 ISO_A3_HTI => Ok(HTI),
1955 ISO_A3_HMD => Ok(HMD),
1956 ISO_A3_VAT => Ok(VAT),
1957 ISO_A3_HND => Ok(HND),
1958 ISO_A3_HKG => Ok(HKG),
1959 ISO_A3_HUN => Ok(HUN),
1960 ISO_A3_ISL => Ok(ISL),
1961 ISO_A3_IND => Ok(IND),
1962 ISO_A3_IDN => Ok(IDN),
1963 ISO_A3_IRN => Ok(IRN),
1964 ISO_A3_IRQ => Ok(IRQ),
1965 ISO_A3_IRL => Ok(IRL),
1966 ISO_A3_IMN => Ok(IMN),
1967 ISO_A3_ISR => Ok(ISR),
1968 ISO_A3_ITA => Ok(ITA),
1969 ISO_A3_JAM => Ok(JAM),
1970 ISO_A3_JPN => Ok(JPN),
1971 ISO_A3_JEY => Ok(JEY),
1972 ISO_A3_JOR => Ok(JOR),
1973 ISO_A3_KAZ => Ok(KAZ),
1974 ISO_A3_KEN => Ok(KEN),
1975 ISO_A3_KIR => Ok(KIR),
1976 ISO_A3_PRK => Ok(PRK),
1977 ISO_A3_KOR => Ok(KOR),
1978 ISO_A3_KWT => Ok(KWT),
1979 ISO_A3_KGZ => Ok(KGZ),
1980 ISO_A3_LAO => Ok(LAO),
1981 ISO_A3_LVA => Ok(LVA),
1982 ISO_A3_LBN => Ok(LBN),
1983 ISO_A3_LSO => Ok(LSO),
1984 ISO_A3_LBR => Ok(LBR),
1985 ISO_A3_LBY => Ok(LBY),
1986 ISO_A3_LIE => Ok(LIE),
1987 ISO_A3_LTU => Ok(LTU),
1988 ISO_A3_LUX => Ok(LUX),
1989 ISO_A3_MAC => Ok(MAC),
1990 ISO_A3_MKD => Ok(MKD),
1991 ISO_A3_MDG => Ok(MDG),
1992 ISO_A3_MWI => Ok(MWI),
1993 ISO_A3_MYS => Ok(MYS),
1994 ISO_A3_MDV => Ok(MDV),
1995 ISO_A3_MLI => Ok(MLI),
1996 ISO_A3_MLT => Ok(MLT),
1997 ISO_A3_MHL => Ok(MHL),
1998 ISO_A3_MTQ => Ok(MTQ),
1999 ISO_A3_MRT => Ok(MRT),
2000 ISO_A3_MUS => Ok(MUS),
2001 ISO_A3_MYT => Ok(MYT),
2002 ISO_A3_MEX => Ok(MEX),
2003 ISO_A3_FSM => Ok(FSM),
2004 ISO_A3_MDA => Ok(MDA),
2005 ISO_A3_MCO => Ok(MCO),
2006 ISO_A3_MNG => Ok(MNG),
2007 ISO_A3_MNE => Ok(MNE),
2008 ISO_A3_MSR => Ok(MSR),
2009 ISO_A3_MAR => Ok(MAR),
2010 ISO_A3_MOZ => Ok(MOZ),
2011 ISO_A3_MMR => Ok(MMR),
2012 ISO_A3_NAM => Ok(NAM),
2013 ISO_A3_NRU => Ok(NRU),
2014 ISO_A3_NPL => Ok(NPL),
2015 ISO_A3_NLD => Ok(NLD),
2016 ISO_A3_NCL => Ok(NCL),
2017 ISO_A3_NZL => Ok(NZL),
2018 ISO_A3_NIC => Ok(NIC),
2019 ISO_A3_NER => Ok(NER),
2020 ISO_A3_NGA => Ok(NGA),
2021 ISO_A3_NIU => Ok(NIU),
2022 ISO_A3_NFK => Ok(NFK),
2023 ISO_A3_MNP => Ok(MNP),
2024 ISO_A3_NOR => Ok(NOR),
2025 ISO_A3_OMN => Ok(OMN),
2026 ISO_A3_PAK => Ok(PAK),
2027 ISO_A3_PLW => Ok(PLW),
2028 ISO_A3_PSE => Ok(PSE),
2029 ISO_A3_PAN => Ok(PAN),
2030 ISO_A3_PNG => Ok(PNG),
2031 ISO_A3_PRY => Ok(PRY),
2032 ISO_A3_PER => Ok(PER),
2033 ISO_A3_PHL => Ok(PHL),
2034 ISO_A3_PCN => Ok(PCN),
2035 ISO_A3_POL => Ok(POL),
2036 ISO_A3_PRT => Ok(PRT),
2037 ISO_A3_PRI => Ok(PRI),
2038 ISO_A3_QAT => Ok(QAT),
2039 ISO_A3_REU => Ok(REU),
2040 ISO_A3_ROU => Ok(ROU),
2041 ISO_A3_RUS => Ok(RUS),
2042 ISO_A3_RWA => Ok(RWA),
2043 ISO_A3_BLM => Ok(BLM),
2044 ISO_A3_SHN => Ok(SHN),
2045 ISO_A3_KNA => Ok(KNA),
2046 ISO_A3_LCA => Ok(LCA),
2047 ISO_A3_MAF => Ok(MAF),
2048 ISO_A3_SPM => Ok(SPM),
2049 ISO_A3_VCT => Ok(VCT),
2050 ISO_A3_WSM => Ok(WSM),
2051 ISO_A3_SMR => Ok(SMR),
2052 ISO_A3_STP => Ok(STP),
2053 ISO_A3_SAU => Ok(SAU),
2054 ISO_A3_SEN => Ok(SEN),
2055 ISO_A3_SRB => Ok(SRB),
2056 ISO_A3_SYC => Ok(SYC),
2057 ISO_A3_SLE => Ok(SLE),
2058 ISO_A3_SGP => Ok(SGP),
2059 ISO_A3_SXM => Ok(SXM),
2060 ISO_A3_SVK => Ok(SVK),
2061 ISO_A3_SVN => Ok(SVN),
2062 ISO_A3_SLB => Ok(SLB),
2063 ISO_A3_SOM => Ok(SOM),
2064 ISO_A3_ZAF => Ok(ZAF),
2065 ISO_A3_SGS => Ok(SGS),
2066 ISO_A3_SSD => Ok(SSD),
2067 ISO_A3_ESP => Ok(ESP),
2068 ISO_A3_LKA => Ok(LKA),
2069 ISO_A3_SDN => Ok(SDN),
2070 ISO_A3_SUR => Ok(SUR),
2071 ISO_A3_SJM => Ok(SJM),
2072 ISO_A3_SWZ => Ok(SWZ),
2073 ISO_A3_SWE => Ok(SWE),
2074 ISO_A3_CHE => Ok(CHE),
2075 ISO_A3_SYR => Ok(SYR),
2076 ISO_A3_TWN => Ok(TWN),
2077 ISO_A3_TJK => Ok(TJK),
2078 ISO_A3_TZA => Ok(TZA),
2079 ISO_A3_THA => Ok(THA),
2080 ISO_A3_TLS => Ok(TLS),
2081 ISO_A3_TGO => Ok(TGO),
2082 ISO_A3_TKL => Ok(TKL),
2083 ISO_A3_TON => Ok(TON),
2084 ISO_A3_TTO => Ok(TTO),
2085 ISO_A3_TUN => Ok(TUN),
2086 ISO_A3_TUR => Ok(TUR),
2087 ISO_A3_TKM => Ok(TKM),
2088 ISO_A3_TCA => Ok(TCA),
2089 ISO_A3_TUV => Ok(TUV),
2090 ISO_A3_UGA => Ok(UGA),
2091 ISO_A3_UKR => Ok(UKR),
2092 ISO_A3_ARE => Ok(ARE),
2093 ISO_A3_GBR => Ok(GBR),
2094 ISO_A3_USA => Ok(USA),
2095 ISO_A3_UMI => Ok(UMI),
2096 ISO_A3_URY => Ok(URY),
2097 ISO_A3_UZB => Ok(UZB),
2098 ISO_A3_VUT => Ok(VUT),
2099 ISO_A3_VEN => Ok(VEN),
2100 ISO_A3_VNM => Ok(VNM),
2101 ISO_A3_VGB => Ok(VGB),
2102 ISO_A3_VIR => Ok(VIR),
2103 ISO_A3_WLF => Ok(WLF),
2104 ISO_A3_ESH => Ok(ESH),
2105 ISO_A3_YEM => Ok(YEM),
2106 ISO_A3_ZMB => Ok(ZMB),
2107 ISO_A3_ZWE => Ok(ZWE),
2108 x => Err(CountryCodeParseErr::InvalidAlpha3 {
2109 unknown: String::from(x),
2110 }),
2111 }
2112 }
2113
2114 pub fn for_alpha3_caseless(value: &str) -> Result<CountryCode, CountryCodeParseErr> {
2117 let uppercase = value.to_uppercase();
2118 CountryCode::for_alpha3(uppercase.as_ref())
2119 }
2120
2121 pub fn for_id(value: u32) -> Result<CountryCode, CountryCodeParseErr> {
2123 use CountryCode::*;
2124 use numeric::*;
2125 match value {
2126 ISO_NUM_AFG => Ok(AFG),
2127 ISO_NUM_ALA => Ok(ALA),
2128 ISO_NUM_ALB => Ok(ALB),
2129 ISO_NUM_DZA => Ok(DZA),
2130 ISO_NUM_ASM => Ok(ASM),
2131 ISO_NUM_AND => Ok(AND),
2132 ISO_NUM_AGO => Ok(AGO),
2133 ISO_NUM_AIA => Ok(AIA),
2134 ISO_NUM_ATA => Ok(ATA),
2135 ISO_NUM_ATG => Ok(ATG),
2136 ISO_NUM_ARG => Ok(ARG),
2137 ISO_NUM_ARM => Ok(ARM),
2138 ISO_NUM_ABW => Ok(ABW),
2139 ISO_NUM_AUS => Ok(AUS),
2140 ISO_NUM_AUT => Ok(AUT),
2141 ISO_NUM_AZE => Ok(AZE),
2142 ISO_NUM_BHS => Ok(BHS),
2143 ISO_NUM_BHR => Ok(BHR),
2144 ISO_NUM_BGD => Ok(BGD),
2145 ISO_NUM_BRB => Ok(BRB),
2146 ISO_NUM_BLR => Ok(BLR),
2147 ISO_NUM_BEL => Ok(BEL),
2148 ISO_NUM_BLZ => Ok(BLZ),
2149 ISO_NUM_BEN => Ok(BEN),
2150 ISO_NUM_BMU => Ok(BMU),
2151 ISO_NUM_BTN => Ok(BTN),
2152 ISO_NUM_BOL => Ok(BOL),
2153 ISO_NUM_BES => Ok(BES),
2154 ISO_NUM_BIH => Ok(BIH),
2155 ISO_NUM_BWA => Ok(BWA),
2156 ISO_NUM_BVT => Ok(BVT),
2157 ISO_NUM_BRA => Ok(BRA),
2158 ISO_NUM_IOT => Ok(IOT),
2159 ISO_NUM_BRN => Ok(BRN),
2160 ISO_NUM_BGR => Ok(BGR),
2161 ISO_NUM_BFA => Ok(BFA),
2162 ISO_NUM_BDI => Ok(BDI),
2163 ISO_NUM_CPV => Ok(CPV),
2164 ISO_NUM_KHM => Ok(KHM),
2165 ISO_NUM_CMR => Ok(CMR),
2166 ISO_NUM_CAN => Ok(CAN),
2167 ISO_NUM_CYM => Ok(CYM),
2168 ISO_NUM_CAF => Ok(CAF),
2169 ISO_NUM_TCD => Ok(TCD),
2170 ISO_NUM_CHL => Ok(CHL),
2171 ISO_NUM_CHN => Ok(CHN),
2172 ISO_NUM_CXR => Ok(CXR),
2173 ISO_NUM_CCK => Ok(CCK),
2174 ISO_NUM_COL => Ok(COL),
2175 ISO_NUM_COM => Ok(COM),
2176 ISO_NUM_COG => Ok(COG),
2177 ISO_NUM_COD => Ok(COD),
2178 ISO_NUM_COK => Ok(COK),
2179 ISO_NUM_CRI => Ok(CRI),
2180 ISO_NUM_CIV => Ok(CIV),
2181 ISO_NUM_HRV => Ok(HRV),
2182 ISO_NUM_CUB => Ok(CUB),
2183 ISO_NUM_CUW => Ok(CUW),
2184 ISO_NUM_CYP => Ok(CYP),
2185 ISO_NUM_CZE => Ok(CZE),
2186 ISO_NUM_DNK => Ok(DNK),
2187 ISO_NUM_DJI => Ok(DJI),
2188 ISO_NUM_DMA => Ok(DMA),
2189 ISO_NUM_DOM => Ok(DOM),
2190 ISO_NUM_ECU => Ok(ECU),
2191 ISO_NUM_EGY => Ok(EGY),
2192 ISO_NUM_SLV => Ok(SLV),
2193 ISO_NUM_GNQ => Ok(GNQ),
2194 ISO_NUM_ERI => Ok(ERI),
2195 ISO_NUM_EST => Ok(EST),
2196 ISO_NUM_ETH => Ok(ETH),
2197 ISO_NUM_FLK => Ok(FLK),
2198 ISO_NUM_FRO => Ok(FRO),
2199 ISO_NUM_FJI => Ok(FJI),
2200 ISO_NUM_FIN => Ok(FIN),
2201 ISO_NUM_FRA => Ok(FRA),
2202 ISO_NUM_GUF => Ok(GUF),
2203 ISO_NUM_PYF => Ok(PYF),
2204 ISO_NUM_ATF => Ok(ATF),
2205 ISO_NUM_GAB => Ok(GAB),
2206 ISO_NUM_GMB => Ok(GMB),
2207 ISO_NUM_GEO => Ok(GEO),
2208 ISO_NUM_DEU => Ok(DEU),
2209 ISO_NUM_GHA => Ok(GHA),
2210 ISO_NUM_GIB => Ok(GIB),
2211 ISO_NUM_GRC => Ok(GRC),
2212 ISO_NUM_GRL => Ok(GRL),
2213 ISO_NUM_GRD => Ok(GRD),
2214 ISO_NUM_GLP => Ok(GLP),
2215 ISO_NUM_GUM => Ok(GUM),
2216 ISO_NUM_GTM => Ok(GTM),
2217 ISO_NUM_GGY => Ok(GGY),
2218 ISO_NUM_GIN => Ok(GIN),
2219 ISO_NUM_GNB => Ok(GNB),
2220 ISO_NUM_GUY => Ok(GUY),
2221 ISO_NUM_HTI => Ok(HTI),
2222 ISO_NUM_HMD => Ok(HMD),
2223 ISO_NUM_VAT => Ok(VAT),
2224 ISO_NUM_HND => Ok(HND),
2225 ISO_NUM_HKG => Ok(HKG),
2226 ISO_NUM_HUN => Ok(HUN),
2227 ISO_NUM_ISL => Ok(ISL),
2228 ISO_NUM_IND => Ok(IND),
2229 ISO_NUM_IDN => Ok(IDN),
2230 ISO_NUM_IRN => Ok(IRN),
2231 ISO_NUM_IRQ => Ok(IRQ),
2232 ISO_NUM_IRL => Ok(IRL),
2233 ISO_NUM_IMN => Ok(IMN),
2234 ISO_NUM_ISR => Ok(ISR),
2235 ISO_NUM_ITA => Ok(ITA),
2236 ISO_NUM_JAM => Ok(JAM),
2237 ISO_NUM_JPN => Ok(JPN),
2238 ISO_NUM_JEY => Ok(JEY),
2239 ISO_NUM_JOR => Ok(JOR),
2240 ISO_NUM_KAZ => Ok(KAZ),
2241 ISO_NUM_KEN => Ok(KEN),
2242 ISO_NUM_KIR => Ok(KIR),
2243 ISO_NUM_PRK => Ok(PRK),
2244 ISO_NUM_KOR => Ok(KOR),
2245 ISO_NUM_KWT => Ok(KWT),
2246 ISO_NUM_KGZ => Ok(KGZ),
2247 ISO_NUM_LAO => Ok(LAO),
2248 ISO_NUM_LVA => Ok(LVA),
2249 ISO_NUM_LBN => Ok(LBN),
2250 ISO_NUM_LSO => Ok(LSO),
2251 ISO_NUM_LBR => Ok(LBR),
2252 ISO_NUM_LBY => Ok(LBY),
2253 ISO_NUM_LIE => Ok(LIE),
2254 ISO_NUM_LTU => Ok(LTU),
2255 ISO_NUM_LUX => Ok(LUX),
2256 ISO_NUM_MAC => Ok(MAC),
2257 ISO_NUM_MKD => Ok(MKD),
2258 ISO_NUM_MDG => Ok(MDG),
2259 ISO_NUM_MWI => Ok(MWI),
2260 ISO_NUM_MYS => Ok(MYS),
2261 ISO_NUM_MDV => Ok(MDV),
2262 ISO_NUM_MLI => Ok(MLI),
2263 ISO_NUM_MLT => Ok(MLT),
2264 ISO_NUM_MHL => Ok(MHL),
2265 ISO_NUM_MTQ => Ok(MTQ),
2266 ISO_NUM_MRT => Ok(MRT),
2267 ISO_NUM_MUS => Ok(MUS),
2268 ISO_NUM_MYT => Ok(MYT),
2269 ISO_NUM_MEX => Ok(MEX),
2270 ISO_NUM_FSM => Ok(FSM),
2271 ISO_NUM_MDA => Ok(MDA),
2272 ISO_NUM_MCO => Ok(MCO),
2273 ISO_NUM_MNG => Ok(MNG),
2274 ISO_NUM_MNE => Ok(MNE),
2275 ISO_NUM_MSR => Ok(MSR),
2276 ISO_NUM_MAR => Ok(MAR),
2277 ISO_NUM_MOZ => Ok(MOZ),
2278 ISO_NUM_MMR => Ok(MMR),
2279 ISO_NUM_NAM => Ok(NAM),
2280 ISO_NUM_NRU => Ok(NRU),
2281 ISO_NUM_NPL => Ok(NPL),
2282 ISO_NUM_NLD => Ok(NLD),
2283 ISO_NUM_NCL => Ok(NCL),
2284 ISO_NUM_NZL => Ok(NZL),
2285 ISO_NUM_NIC => Ok(NIC),
2286 ISO_NUM_NER => Ok(NER),
2287 ISO_NUM_NGA => Ok(NGA),
2288 ISO_NUM_NIU => Ok(NIU),
2289 ISO_NUM_NFK => Ok(NFK),
2290 ISO_NUM_MNP => Ok(MNP),
2291 ISO_NUM_NOR => Ok(NOR),
2292 ISO_NUM_OMN => Ok(OMN),
2293 ISO_NUM_PAK => Ok(PAK),
2294 ISO_NUM_PLW => Ok(PLW),
2295 ISO_NUM_PSE => Ok(PSE),
2296 ISO_NUM_PAN => Ok(PAN),
2297 ISO_NUM_PNG => Ok(PNG),
2298 ISO_NUM_PRY => Ok(PRY),
2299 ISO_NUM_PER => Ok(PER),
2300 ISO_NUM_PHL => Ok(PHL),
2301 ISO_NUM_PCN => Ok(PCN),
2302 ISO_NUM_POL => Ok(POL),
2303 ISO_NUM_PRT => Ok(PRT),
2304 ISO_NUM_PRI => Ok(PRI),
2305 ISO_NUM_QAT => Ok(QAT),
2306 ISO_NUM_REU => Ok(REU),
2307 ISO_NUM_ROU => Ok(ROU),
2308 ISO_NUM_RUS => Ok(RUS),
2309 ISO_NUM_RWA => Ok(RWA),
2310 ISO_NUM_BLM => Ok(BLM),
2311 ISO_NUM_SHN => Ok(SHN),
2312 ISO_NUM_KNA => Ok(KNA),
2313 ISO_NUM_LCA => Ok(LCA),
2314 ISO_NUM_MAF => Ok(MAF),
2315 ISO_NUM_SPM => Ok(SPM),
2316 ISO_NUM_VCT => Ok(VCT),
2317 ISO_NUM_WSM => Ok(WSM),
2318 ISO_NUM_SMR => Ok(SMR),
2319 ISO_NUM_STP => Ok(STP),
2320 ISO_NUM_SAU => Ok(SAU),
2321 ISO_NUM_SEN => Ok(SEN),
2322 ISO_NUM_SRB => Ok(SRB),
2323 ISO_NUM_SYC => Ok(SYC),
2324 ISO_NUM_SLE => Ok(SLE),
2325 ISO_NUM_SGP => Ok(SGP),
2326 ISO_NUM_SXM => Ok(SXM),
2327 ISO_NUM_SVK => Ok(SVK),
2328 ISO_NUM_SVN => Ok(SVN),
2329 ISO_NUM_SLB => Ok(SLB),
2330 ISO_NUM_SOM => Ok(SOM),
2331 ISO_NUM_ZAF => Ok(ZAF),
2332 ISO_NUM_SGS => Ok(SGS),
2333 ISO_NUM_SSD => Ok(SSD),
2334 ISO_NUM_ESP => Ok(ESP),
2335 ISO_NUM_LKA => Ok(LKA),
2336 ISO_NUM_SDN => Ok(SDN),
2337 ISO_NUM_SUR => Ok(SUR),
2338 ISO_NUM_SJM => Ok(SJM),
2339 ISO_NUM_SWZ => Ok(SWZ),
2340 ISO_NUM_SWE => Ok(SWE),
2341 ISO_NUM_CHE => Ok(CHE),
2342 ISO_NUM_SYR => Ok(SYR),
2343 ISO_NUM_TWN => Ok(TWN),
2344 ISO_NUM_TJK => Ok(TJK),
2345 ISO_NUM_TZA => Ok(TZA),
2346 ISO_NUM_THA => Ok(THA),
2347 ISO_NUM_TLS => Ok(TLS),
2348 ISO_NUM_TGO => Ok(TGO),
2349 ISO_NUM_TKL => Ok(TKL),
2350 ISO_NUM_TON => Ok(TON),
2351 ISO_NUM_TTO => Ok(TTO),
2352 ISO_NUM_TUN => Ok(TUN),
2353 ISO_NUM_TUR => Ok(TUR),
2354 ISO_NUM_TKM => Ok(TKM),
2355 ISO_NUM_TCA => Ok(TCA),
2356 ISO_NUM_TUV => Ok(TUV),
2357 ISO_NUM_UGA => Ok(UGA),
2358 ISO_NUM_UKR => Ok(UKR),
2359 ISO_NUM_ARE => Ok(ARE),
2360 ISO_NUM_GBR => Ok(GBR),
2361 ISO_NUM_USA => Ok(USA),
2362 ISO_NUM_UMI => Ok(UMI),
2363 ISO_NUM_URY => Ok(URY),
2364 ISO_NUM_UZB => Ok(UZB),
2365 ISO_NUM_VUT => Ok(VUT),
2366 ISO_NUM_VEN => Ok(VEN),
2367 ISO_NUM_VNM => Ok(VNM),
2368 ISO_NUM_VGB => Ok(VGB),
2369 ISO_NUM_VIR => Ok(VIR),
2370 ISO_NUM_WLF => Ok(WLF),
2371 ISO_NUM_ESH => Ok(ESH),
2372 ISO_NUM_YEM => Ok(YEM),
2373 ISO_NUM_ZMB => Ok(ZMB),
2374 ISO_NUM_ZWE => Ok(ZWE),
2375 x => Err(CountryCodeParseErr::InvalidID { unknown: x }),
2376 }
2377 }
2378
2379 pub fn as_array() -> &'static [CountryCode; NUM_COUNTRY_CODES] {
2382 &sorted_arrays::CODES_SORTED_DEFAULT
2383 }
2384
2385 pub fn as_array_alpha2() -> &'static [CountryCode; NUM_COUNTRY_CODES] {
2388 &sorted_arrays::CODES_SORTED_ALPHA2
2389 }
2390
2391 pub fn as_array_alpha3() -> &'static [CountryCode; NUM_COUNTRY_CODES] {
2394 &sorted_arrays::CODES_SORTED_ALPHA3
2395 }
2396
2397 pub fn as_array_numeric() -> &'static [CountryCode; NUM_COUNTRY_CODES] {
2400 &sorted_arrays::CODES_SORTED_NUMERIC_ID
2401 }
2402
2403 pub fn iter() -> impl Iterator<Item = &'static CountryCode> {
2406 sorted_arrays::CODES_SORTED_DEFAULT.iter()
2407 }
2408
2409 pub fn iter_alpha2() -> impl Iterator<Item = &'static CountryCode> {
2412 sorted_arrays::CODES_SORTED_ALPHA2.iter()
2413 }
2414
2415 pub fn iter_alpha3() -> impl Iterator<Item = &'static CountryCode> {
2418 sorted_arrays::CODES_SORTED_ALPHA3.iter()
2419 }
2420
2421 pub fn iter_numeric() -> impl Iterator<Item = &'static CountryCode> {
2424 sorted_arrays::CODES_SORTED_NUMERIC_ID.iter()
2425 }
2426
2427 pub fn num_country_codes() -> usize {
2430 NUM_COUNTRY_CODES
2431 }
2432}
2433
2434impl Into<u32> for CountryCode {
2435 fn into(self) -> u32 {
2436 self.numeric_id()
2437 }
2438}
2439
2440impl Display for CountryCode {
2441 fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
2442 f.write_str(self.name())
2443 }
2444}
2445
2446struct CountryCodeVisitor;
2447
2448impl Serialize for CountryCode {
2449 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where
2450 S: Serializer {
2451 serializer.collect_str(self.alpha2())
2452 }
2453}
2454
2455impl<'de> Deserialize<'de> for CountryCode {
2456 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where
2457 D: Deserializer<'de> {
2458 deserializer.deserialize_str(CountryCodeVisitor)
2459 }
2460}
2461
2462impl<'de> Visitor<'de> for CountryCodeVisitor {
2463 type Value = CountryCode;
2464
2465 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
2466 write!(formatter, "an ISO 3166-1 compliant alpha-2 country code")
2467 }
2468
2469 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
2470 where
2471 E: de::Error,
2472 {
2473 match CountryCode::for_alpha2_caseless(v) {
2474 Ok(x) => Ok(x),
2475 Err(_) => Err(de::Error::invalid_value(de::Unexpected::Str(v), &self)),
2476 }
2477 }
2478
2479 fn visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E>
2480 where
2481 E: de::Error,
2482 {
2483 match CountryCode::for_alpha2_caseless(v) {
2484 Ok(x) => Ok(x),
2485 Err(_) => Err(de::Error::invalid_value(de::Unexpected::Str(v), &self)),
2486 }
2487 }
2488}