defmodule CountryCodeConverter do @moduledoc """ CountryCodeConverter is a module for converting iso2 / iso3 / ioc country codes. It can get a country codes for some particular iso code: iex> {:ok, countries} = CountryCodeConverter.countries(:iso2) iex> Enum.member?(countries, "BR") true You can also convert one code to another: iex> CountryCodeConverter.convert(:iso2, "BR") {:ok, %{iso2: "BR", iso3: "BRA", ioc: "BRA"}} """ @iso2 %{ "TW" => {"TPE", "TWN"}, "AF" => {"AFG", "AFG"}, "AL" => {"ALB", "ALB"}, "DZ" => {"ALG", "DZA"}, "AS" => {"ASA", "ASM"}, "AD" => {"AND", "AND"}, "AO" => {"ANG", "AGO"}, "AI" => {"AIA", "AIA"}, "AQ" => {nil, "ATA"}, "AG" => {"ANT", "ATG"}, "AR" => {"ARG", "ARG"}, "AM" => {"ARM", "ARM"}, "AW" => {"ARU", "ABW"}, "AU" => {"AUS", "AUS"}, "AT" => {"AUT", "AUT"}, "AZ" => {"AZE", "AZE"}, "BS" => {"BAH", "BHS"}, "BH" => {"BRN", "BHR"}, "BD" => {"BAN", "BGD"}, "BB" => {"BAR", "BRB"}, "BY" => {"BLR", "BLR"}, "BE" => {"BEL", "BEL"}, "BZ" => {"BIZ", "BLZ"}, "BJ" => {"BEN", "BEN"}, "BM" => {"BER", "BMU"}, "BT" => {"BHU", "BTN"}, "BO" => {"BOL", "BOL"}, "BQ" => {"AHO", "BES"}, "BA" => {"BIH", "BIH"}, "BW" => {"BOT", "BWA"}, "BV" => {nil, "BVT"}, "BR" => {"BRA", "BRA"}, "IO" => {nil, "IOT"}, "VG" => {"IVB", "VGB"}, "BN" => {"BRU", "BRN"}, "BG" => {"BUL", "BGR"}, "BF" => {"BUR", "BFA"}, "BI" => {"BDI", "BDI"}, "CV" => {"CPV", "CPV"}, "KH" => {"CAM", "KHM"}, "CM" => {"CMR", "CMR"}, "CA" => {"CAN", "CAN"}, "KY" => {"CAY", "CYM"}, "CF" => {"CAF", "CAF"}, "TD" => {"CHA", "TCD"}, "CL" => {"CHI", "CHL"}, "CN" => {"CHN", "CHN"}, "HK" => {"HKG", "HKG"}, "MO" => {"MAC", "MAC"}, "CX" => {nil, "CXR"}, "CC" => {nil, "CCK"}, "CO" => {"COL", "COL"}, "KM" => {"COM", "COM"}, "CG" => {"CGO", "COG"}, "CK" => {"COK", "COK"}, "CR" => {"CRC", "CRI"}, "HR" => {"CRO", "HRV"}, "CU" => {"CUB", "CUB"}, "CW" => {nil, "CUW"}, "CY" => {"CYP", "CYP"}, "CZ" => {"CZE", "CZE"}, "CI" => {"CIV", "CIV"}, "KP" => {"PRK", "PRK"}, "CD" => {"COD", "COD"}, "DK" => {"DEN", "DNK"}, "DJ" => {"DJI", "DJI"}, "DM" => {"DMA", "DMA"}, "DO" => {"DOM", "DOM"}, "EC" => {"ECU", "ECU"}, "EG" => {"EGY", "EGY"}, "SV" => {"ESA", "SLV"}, "GQ" => {"GEQ", "GNQ"}, "ER" => {"ERI", "ERI"}, "EE" => {"EST", "EST"}, "ET" => {"ETH", "ETH"}, "FK" => {"FLK", "FLK"}, "FO" => {"FAR", "FRO"}, "FJ" => {"FIJ", "FJI"}, "FI" => {"FIN", "FIN"}, "FR" => {"FRA", "FRA"}, "GF" => {"FGU", "GUF"}, "PF" => {"FPO", "PYF"}, "TF" => {nil, "ATF"}, "GA" => {"GAB", "GAB"}, "GM" => {"GAM", "GMB"}, "GE" => {"GEO", "GEO"}, "DE" => {"GER", "DEU"}, "GH" => {"GHA", "GHA"}, "GI" => {"GIB", "GIB"}, "GR" => {"GRE", "GRC"}, "GL" => {"GRL", "GRL"}, "GD" => {"GRN", "GRD"}, "GP" => {"GUD", "GLP"}, "GU" => {"GUM", "GUM"}, "GT" => {"GUA", "GTM"}, "GG" => {nil, "GGY"}, "GN" => {"GUI", "GIN"}, "GW" => {"GBS", "GNB"}, "GY" => {"GUY", "GUY"}, "HT" => {"HAI", "HTI"}, "HM" => {nil, "HMD"}, "VA" => {nil, "VAT"}, "HN" => {"HON", "HND"}, "HU" => {"HUN", "HUN"}, "IS" => {"ISL", "ISL"}, "IN" => {"IND", "IND"}, "ID" => {"INA", "IDN"}, "IR" => {"IRI", "IRN"}, "IQ" => {"IRQ", "IRQ"}, "IE" => {"IRL", "IRL"}, "IM" => {nil, "IMN"}, "IL" => {"ISR", "ISR"}, "IT" => {"ITA", "ITA"}, "JM" => {"JAM", "JAM"}, "JP" => {"JPN", "JPN"}, "JE" => {nil, "JEY"}, "JO" => {"JOR", "JOR"}, "KZ" => {"KAZ", "KAZ"}, "KE" => {"KEN", "KEN"}, "KI" => {"KIR", "KIR"}, "KW" => {"KUW", "KWT"}, "KG" => {"KGZ", "KGZ"}, "LA" => {"LAO", "LAO"}, "LV" => {"LAT", "LVA"}, "LB" => {"LIB", "LBN"}, "LS" => {"LES", "LSO"}, "LR" => {"LBR", "LBR"}, "LY" => {"LBA", "LBY"}, "LI" => {"LIE", "LIE"}, "LT" => {"LTU", "LTU"}, "LU" => {"LUX", "LUX"}, "MG" => {"MAD", "MDG"}, "MW" => {"MAW", "MWI"}, "MY" => {"MAS", "MYS"}, "MV" => {"MDV", "MDV"}, "ML" => {"MLI", "MLI"}, "MT" => {"MLT", "MLT"}, "MH" => {"MSH", "MHL"}, "MQ" => {"MRT", "MTQ"}, "MR" => {"MTN", "MRT"}, "MU" => {"MRI", "MUS"}, "YT" => {"MAY", "MYT"}, "MX" => {"MEX", "MEX"}, "FM" => {"FSM", "FSM"}, "MC" => {"MON", "MCO"}, "MN" => {"MGL", "MNG"}, "ME" => {"MGO", "MNE"}, "MS" => {"MNT", "MSR"}, "MA" => {"MAR", "MAR"}, "MZ" => {"MOZ", "MOZ"}, "MM" => {"MYA", "MMR"}, "NA" => {"NAM", "NAM"}, "NR" => {"NRU", "NRU"}, "NP" => {"NEP", "NPL"}, "NL" => {"NED", "NLD"}, "NC" => {"NCD", "NCL"}, "NZ" => {"NZL", "NZL"}, "NI" => {"NCA", "NIC"}, "NE" => {"NIG", "NER"}, "NG" => {"NGR", "NGA"}, "NU" => {"NIU", "NIU"}, "NF" => {"NFI", "NFK"}, "MP" => {"NMA", "MNP"}, "NO" => {"NOR", "NOR"}, "OM" => {"OMA", "OMN"}, "PK" => {"PAK", "PAK"}, "PW" => {"PLW", "PLW"}, "PA" => {"PAN", "PAN"}, "PG" => {"PNG", "PNG"}, "PY" => {"PAR", "PRY"}, "PE" => {"PER", "PER"}, "PH" => {"PHI", "PHL"}, "PN" => {nil, "PCN"}, "PL" => {"POL", "POL"}, "PT" => {"POR", "PRT"}, "PR" => {"PUR", "PRI"}, "QA" => {"QAT", "QAT"}, "KR" => {"KOR", "KOR"}, "MD" => {"MDA", "MDA"}, "RO" => {"ROU", "ROU"}, "RU" => {"RUS", "RUS"}, "RW" => {"RWA", "RWA"}, "RE" => {"REU", "REU"}, "BL" => {nil, "BLM"}, "SH" => {"HEL", "SHN"}, "KN" => {"SKN", "KNA"}, "LC" => {"LCA", "LCA"}, "MF" => {nil, "MAF"}, "PM" => {"SPM", "SPM"}, "VC" => {"VIN", "VCT"}, "WS" => {"SAM", "WSM"}, "SM" => {"SMR", "SMR"}, "ST" => {"STP", "STP"}, "SA" => {"KSA", "SAU"}, "SN" => {"SEN", "SEN"}, "RS" => {"SRB", "SRB"}, "SC" => {"SEY", "SYC"}, "SL" => {"SLE", "SLE"}, "SG" => {"SIN", "SGP"}, "SX" => {nil, "SXM"}, "SK" => {"SVK", "SVK"}, "SI" => {"SLO", "SVN"}, "SB" => {"SOL", "SLB"}, "SO" => {"SOM", "SOM"}, "ZA" => {"RSA", "ZAF"}, "GS" => {nil, "SGS"}, "SS" => {nil, "SSD"}, "ES" => {"ESP", "ESP"}, "LK" => {"SRI", "LKA"}, "PS" => {"PLE", "PSE"}, "SD" => {"SUD", "SDN"}, "SR" => {"SUR", "SUR"}, "SJ" => {nil, "SJM"}, "SZ" => {"SWZ", "SWZ"}, "SE" => {"SWE", "SWE"}, "CH" => {"SUI", "CHE"}, "SY" => {"SYR", "SYR"}, "TJ" => {"TJK", "TJK"}, "TH" => {"THA", "THA"}, "MK" => {"MKD", "MKD"}, "TL" => {"TLS", "TLS"}, "TG" => {"TOG", "TGO"}, "TK" => {nil, "TKL"}, "TO" => {"TGA", "TON"}, "TT" => {"TTO", "TTO"}, "TN" => {"TUN", "TUN"}, "TR" => {"TUR", "TUR"}, "TM" => {"TKM", "TKM"}, "TC" => {"TKS", "TCA"}, "TV" => {"TUV", "TUV"}, "UG" => {"UGA", "UGA"}, "UA" => {"UKR", "UKR"}, "AE" => {"UAE", "ARE"}, "GB" => {"GBR", "GBR"}, "TZ" => {"TAN", "TZA"}, "UM" => {nil, "UMI"}, "VI" => {"ISV", "VIR"}, "US" => {"USA", "USA"}, "UY" => {"URU", "URY"}, "UZ" => {"UZB", "UZB"}, "VU" => {"VAN", "VUT"}, "VE" => {"VEN", "VEN"}, "VN" => {"VIE", "VNM"}, "WF" => {"WAF", "WLF"}, "EH" => {nil, "ESH"}, "YE" => {"YEM", "YEM"}, "ZM" => {"ZAM", "ZMB"}, "ZW" => {"ZIM", "ZWE"}, "AX" => {nil, "ALA"} } @iso3 %{ "TWN" => {"TPE", "TW"}, "AFG" => {"AFG", "AF"}, "ALB" => {"ALB", "AL"}, "DZA" => {"ALG", "DZ"}, "ASM" => {"ASA", "AS"}, "AND" => {"AND", "AD"}, "AGO" => {"ANG", "AO"}, "AIA" => {"AIA", "AI"}, "ATA" => {nil, "AQ"}, "ATG" => {"ANT", "AG"}, "ARG" => {"ARG", "AR"}, "ARM" => {"ARM", "AM"}, "ABW" => {"ARU", "AW"}, "AUS" => {"AUS", "AU"}, "AUT" => {"AUT", "AT"}, "AZE" => {"AZE", "AZ"}, "BHS" => {"BAH", "BS"}, "BHR" => {"BRN", "BH"}, "BGD" => {"BAN", "BD"}, "BRB" => {"BAR", "BB"}, "BLR" => {"BLR", "BY"}, "BEL" => {"BEL", "BE"}, "BLZ" => {"BIZ", "BZ"}, "BEN" => {"BEN", "BJ"}, "BMU" => {"BER", "BM"}, "BTN" => {"BHU", "BT"}, "BOL" => {"BOL", "BO"}, "BES" => {"AHO", "BQ"}, "BIH" => {"BIH", "BA"}, "BWA" => {"BOT", "BW"}, "BVT" => {nil, "BV"}, "BRA" => {"BRA", "BR"}, "IOT" => {nil, "IO"}, "VGB" => {"IVB", "VG"}, "BRN" => {"BRU", "BN"}, "BGR" => {"BUL", "BG"}, "BFA" => {"BUR", "BF"}, "BDI" => {"BDI", "BI"}, "CPV" => {"CPV", "CV"}, "KHM" => {"CAM", "KH"}, "CMR" => {"CMR", "CM"}, "CAN" => {"CAN", "CA"}, "CYM" => {"CAY", "KY"}, "CAF" => {"CAF", "CF"}, "TCD" => {"CHA", "TD"}, "CHL" => {"CHI", "CL"}, "CHN" => {"CHN", "CN"}, "HKG" => {"HKG", "HK"}, "MAC" => {"MAC", "MO"}, "CXR" => {nil, "CX"}, "CCK" => {nil, "CC"}, "COL" => {"COL", "CO"}, "COM" => {"COM", "KM"}, "COG" => {"CGO", "CG"}, "COK" => {"COK", "CK"}, "CRI" => {"CRC", "CR"}, "HRV" => {"CRO", "HR"}, "CUB" => {"CUB", "CU"}, "CUW" => {nil, "CW"}, "CYP" => {"CYP", "CY"}, "CZE" => {"CZE", "CZ"}, "CIV" => {"CIV", "CI"}, "PRK" => {"PRK", "KP"}, "COD" => {"COD", "CD"}, "DNK" => {"DEN", "DK"}, "DJI" => {"DJI", "DJ"}, "DMA" => {"DMA", "DM"}, "DOM" => {"DOM", "DO"}, "ECU" => {"ECU", "EC"}, "EGY" => {"EGY", "EG"}, "SLV" => {"ESA", "SV"}, "GNQ" => {"GEQ", "GQ"}, "ERI" => {"ERI", "ER"}, "EST" => {"EST", "EE"}, "ETH" => {"ETH", "ET"}, "FLK" => {"FLK", "FK"}, "FRO" => {"FAR", "FO"}, "FJI" => {"FIJ", "FJ"}, "FIN" => {"FIN", "FI"}, "FRA" => {"FRA", "FR"}, "GUF" => {"FGU", "GF"}, "PYF" => {"FPO", "PF"}, "ATF" => {nil, "TF"}, "GAB" => {"GAB", "GA"}, "GMB" => {"GAM", "GM"}, "GEO" => {"GEO", "GE"}, "DEU" => {"GER", "DE"}, "GHA" => {"GHA", "GH"}, "GIB" => {"GIB", "GI"}, "GRC" => {"GRE", "GR"}, "GRL" => {"GRL", "GL"}, "GRD" => {"GRN", "GD"}, "GLP" => {"GUD", "GP"}, "GUM" => {"GUM", "GU"}, "GTM" => {"GUA", "GT"}, "GGY" => {nil, "GG"}, "GIN" => {"GUI", "GN"}, "GNB" => {"GBS", "GW"}, "GUY" => {"GUY", "GY"}, "HTI" => {"HAI", "HT"}, "HMD" => {nil, "HM"}, "VAT" => {nil, "VA"}, "HND" => {"HON", "HN"}, "HUN" => {"HUN", "HU"}, "ISL" => {"ISL", "IS"}, "IND" => {"IND", "IN"}, "IDN" => {"INA", "ID"}, "IRN" => {"IRI", "IR"}, "IRQ" => {"IRQ", "IQ"}, "IRL" => {"IRL", "IE"}, "IMN" => {nil, "IM"}, "ISR" => {"ISR", "IL"}, "ITA" => {"ITA", "IT"}, "JAM" => {"JAM", "JM"}, "JPN" => {"JPN", "JP"}, "JEY" => {nil, "JE"}, "JOR" => {"JOR", "JO"}, "KAZ" => {"KAZ", "KZ"}, "KEN" => {"KEN", "KE"}, "KIR" => {"KIR", "KI"}, "KWT" => {"KUW", "KW"}, "KGZ" => {"KGZ", "KG"}, "LAO" => {"LAO", "LA"}, "LVA" => {"LAT", "LV"}, "LBN" => {"LIB", "LB"}, "LSO" => {"LES", "LS"}, "LBR" => {"LBR", "LR"}, "LBY" => {"LBA", "LY"}, "LIE" => {"LIE", "LI"}, "LTU" => {"LTU", "LT"}, "LUX" => {"LUX", "LU"}, "MDG" => {"MAD", "MG"}, "MWI" => {"MAW", "MW"}, "MYS" => {"MAS", "MY"}, "MDV" => {"MDV", "MV"}, "MLI" => {"MLI", "ML"}, "MLT" => {"MLT", "MT"}, "MHL" => {"MSH", "MH"}, "MTQ" => {"MRT", "MQ"}, "MRT" => {"MTN", "MR"}, "MUS" => {"MRI", "MU"}, "MYT" => {"MAY", "YT"}, "MEX" => {"MEX", "MX"}, "FSM" => {"FSM", "FM"}, "MCO" => {"MON", "MC"}, "MNG" => {"MGL", "MN"}, "MNE" => {"MGO", "ME"}, "MSR" => {"MNT", "MS"}, "MAR" => {"MAR", "MA"}, "MOZ" => {"MOZ", "MZ"}, "MMR" => {"MYA", "MM"}, "NAM" => {"NAM", "NA"}, "NRU" => {"NRU", "NR"}, "NPL" => {"NEP", "NP"}, "NLD" => {"NED", "NL"}, "NCL" => {"NCD", "NC"}, "NZL" => {"NZL", "NZ"}, "NIC" => {"NCA", "NI"}, "NER" => {"NIG", "NE"}, "NGA" => {"NGR", "NG"}, "NIU" => {"NIU", "NU"}, "NFK" => {"NFI", "NF"}, "MNP" => {"NMA", "MP"}, "NOR" => {"NOR", "NO"}, "OMN" => {"OMA", "OM"}, "PAK" => {"PAK", "PK"}, "PLW" => {"PLW", "PW"}, "PAN" => {"PAN", "PA"}, "PNG" => {"PNG", "PG"}, "PRY" => {"PAR", "PY"}, "PER" => {"PER", "PE"}, "PHL" => {"PHI", "PH"}, "PCN" => {nil, "PN"}, "POL" => {"POL", "PL"}, "PRT" => {"POR", "PT"}, "PRI" => {"PUR", "PR"}, "QAT" => {"QAT", "QA"}, "KOR" => {"KOR", "KR"}, "MDA" => {"MDA", "MD"}, "ROU" => {"ROU", "RO"}, "RUS" => {"RUS", "RU"}, "RWA" => {"RWA", "RW"}, "REU" => {"REU", "RE"}, "BLM" => {nil, "BL"}, "SHN" => {"HEL", "SH"}, "KNA" => {"SKN", "KN"}, "LCA" => {"LCA", "LC"}, "MAF" => {nil, "MF"}, "SPM" => {"SPM", "PM"}, "VCT" => {"VIN", "VC"}, "WSM" => {"SAM", "WS"}, "SMR" => {"SMR", "SM"}, "STP" => {"STP", "ST"}, "SAU" => {"KSA", "SA"}, "SEN" => {"SEN", "SN"}, "SRB" => {"SRB", "RS"}, "SYC" => {"SEY", "SC"}, "SLE" => {"SLE", "SL"}, "SGP" => {"SIN", "SG"}, "SXM" => {nil, "SX"}, "SVK" => {"SVK", "SK"}, "SVN" => {"SLO", "SI"}, "SLB" => {"SOL", "SB"}, "SOM" => {"SOM", "SO"}, "ZAF" => {"RSA", "ZA"}, "SGS" => {nil, "GS"}, "SSD" => {nil, "SS"}, "ESP" => {"ESP", "ES"}, "LKA" => {"SRI", "LK"}, "PSE" => {"PLE", "PS"}, "SDN" => {"SUD", "SD"}, "SUR" => {"SUR", "SR"}, "SJM" => {nil, "SJ"}, "SWZ" => {"SWZ", "SZ"}, "SWE" => {"SWE", "SE"}, "CHE" => {"SUI", "CH"}, "SYR" => {"SYR", "SY"}, "TJK" => {"TJK", "TJ"}, "THA" => {"THA", "TH"}, "MKD" => {"MKD", "MK"}, "TLS" => {"TLS", "TL"}, "TGO" => {"TOG", "TG"}, "TKL" => {nil, "TK"}, "TON" => {"TGA", "TO"}, "TTO" => {"TTO", "TT"}, "TUN" => {"TUN", "TN"}, "TUR" => {"TUR", "TR"}, "TKM" => {"TKM", "TM"}, "TCA" => {"TKS", "TC"}, "TUV" => {"TUV", "TV"}, "UGA" => {"UGA", "UG"}, "UKR" => {"UKR", "UA"}, "ARE" => {"UAE", "AE"}, "GBR" => {"GBR", "GB"}, "TZA" => {"TAN", "TZ"}, "UMI" => {nil, "UM"}, "VIR" => {"ISV", "VI"}, "USA" => {"USA", "US"}, "URY" => {"URU", "UY"}, "UZB" => {"UZB", "UZ"}, "VUT" => {"VAN", "VU"}, "VEN" => {"VEN", "VE"}, "VNM" => {"VIE", "VN"}, "WLF" => {"WAF", "WF"}, "ESH" => {nil, "EH"}, "YEM" => {"YEM", "YE"}, "ZMB" => {"ZAM", "ZM"}, "ZWE" => {"ZIM", "ZW"}, "ALA" => {nil, "AX"} } @ioc %{ "TPE" => {"TW", "TWN"}, "AFG" => {"AF", "AFG"}, "ALB" => {"AL", "ALB"}, "ALG" => {"DZ", "DZA"}, "ASA" => {"AS", "ASM"}, "AND" => {"AD", "AND"}, "ANG" => {"AO", "AGO"}, "AIA" => {"AI", "AIA"}, "ANT" => {"AG", "ATG"}, "ARG" => {"AR", "ARG"}, "ARM" => {"AM", "ARM"}, "ARU" => {"AW", "ABW"}, "AUS" => {"AU", "AUS"}, "AUT" => {"AT", "AUT"}, "AZE" => {"AZ", "AZE"}, "BAH" => {"BS", "BHS"}, "BRN" => {"BH", "BHR"}, "BAN" => {"BD", "BGD"}, "BAR" => {"BB", "BRB"}, "BLR" => {"BY", "BLR"}, "BEL" => {"BE", "BEL"}, "BIZ" => {"BZ", "BLZ"}, "BEN" => {"BJ", "BEN"}, "BER" => {"BM", "BMU"}, "BHU" => {"BT", "BTN"}, "BOL" => {"BO", "BOL"}, "AHO" => {"BQ", "BES"}, "BIH" => {"BA", "BIH"}, "BOT" => {"BW", "BWA"}, "BRA" => {"BR", "BRA"}, "IVB" => {"VG", "VGB"}, "BRU" => {"BN", "BRN"}, "BUL" => {"BG", "BGR"}, "BUR" => {"BF", "BFA"}, "BDI" => {"BI", "BDI"}, "CPV" => {"CV", "CPV"}, "CAM" => {"KH", "KHM"}, "CMR" => {"CM", "CMR"}, "CAN" => {"CA", "CAN"}, "CAY" => {"KY", "CYM"}, "CAF" => {"CF", "CAF"}, "CHA" => {"TD", "TCD"}, "CHI" => {"CL", "CHL"}, "CHN" => {"CN", "CHN"}, "HKG" => {"HK", "HKG"}, "MAC" => {"MO", "MAC"}, "COL" => {"CO", "COL"}, "COM" => {"KM", "COM"}, "CGO" => {"CG", "COG"}, "COK" => {"CK", "COK"}, "CRC" => {"CR", "CRI"}, "CRO" => {"HR", "HRV"}, "CUB" => {"CU", "CUB"}, "CYP" => {"CY", "CYP"}, "CZE" => {"CZ", "CZE"}, "CIV" => {"CI", "CIV"}, "PRK" => {"KP", "PRK"}, "COD" => {"CD", "COD"}, "DEN" => {"DK", "DNK"}, "DJI" => {"DJ", "DJI"}, "DMA" => {"DM", "DMA"}, "DOM" => {"DO", "DOM"}, "ECU" => {"EC", "ECU"}, "EGY" => {"EG", "EGY"}, "ESA" => {"SV", "SLV"}, "GEQ" => {"GQ", "GNQ"}, "ERI" => {"ER", "ERI"}, "EST" => {"EE", "EST"}, "ETH" => {"ET", "ETH"}, "FLK" => {"FK", "FLK"}, "FAR" => {"FO", "FRO"}, "FIJ" => {"FJ", "FJI"}, "FIN" => {"FI", "FIN"}, "FRA" => {"FR", "FRA"}, "FGU" => {"GF", "GUF"}, "FPO" => {"PF", "PYF"}, "GAB" => {"GA", "GAB"}, "GAM" => {"GM", "GMB"}, "GEO" => {"GE", "GEO"}, "GER" => {"DE", "DEU"}, "GHA" => {"GH", "GHA"}, "GIB" => {"GI", "GIB"}, "GRE" => {"GR", "GRC"}, "GRL" => {"GL", "GRL"}, "GRN" => {"GD", "GRD"}, "GUD" => {"GP", "GLP"}, "GUM" => {"GU", "GUM"}, "GUA" => {"GT", "GTM"}, "GUI" => {"GN", "GIN"}, "GBS" => {"GW", "GNB"}, "GUY" => {"GY", "GUY"}, "HAI" => {"HT", "HTI"}, "HON" => {"HN", "HND"}, "HUN" => {"HU", "HUN"}, "ISL" => {"IS", "ISL"}, "IND" => {"IN", "IND"}, "INA" => {"ID", "IDN"}, "IRI" => {"IR", "IRN"}, "IRQ" => {"IQ", "IRQ"}, "IRL" => {"IE", "IRL"}, "ISR" => {"IL", "ISR"}, "ITA" => {"IT", "ITA"}, "JAM" => {"JM", "JAM"}, "JPN" => {"JP", "JPN"}, "JOR" => {"JO", "JOR"}, "KAZ" => {"KZ", "KAZ"}, "KEN" => {"KE", "KEN"}, "KIR" => {"KI", "KIR"}, "KUW" => {"KW", "KWT"}, "KGZ" => {"KG", "KGZ"}, "LAO" => {"LA", "LAO"}, "LAT" => {"LV", "LVA"}, "LIB" => {"LB", "LBN"}, "LES" => {"LS", "LSO"}, "LBR" => {"LR", "LBR"}, "LBA" => {"LY", "LBY"}, "LIE" => {"LI", "LIE"}, "LTU" => {"LT", "LTU"}, "LUX" => {"LU", "LUX"}, "MAD" => {"MG", "MDG"}, "MAW" => {"MW", "MWI"}, "MAS" => {"MY", "MYS"}, "MDV" => {"MV", "MDV"}, "MLI" => {"ML", "MLI"}, "MLT" => {"MT", "MLT"}, "MSH" => {"MH", "MHL"}, "MRT" => {"MQ", "MTQ"}, "MTN" => {"MR", "MRT"}, "MRI" => {"MU", "MUS"}, "MAY" => {"YT", "MYT"}, "MEX" => {"MX", "MEX"}, "FSM" => {"FM", "FSM"}, "MON" => {"MC", "MCO"}, "MGL" => {"MN", "MNG"}, "MGO" => {"ME", "MNE"}, "MNT" => {"MS", "MSR"}, "MAR" => {"MA", "MAR"}, "MOZ" => {"MZ", "MOZ"}, "MYA" => {"MM", "MMR"}, "NAM" => {"NA", "NAM"}, "NRU" => {"NR", "NRU"}, "NEP" => {"NP", "NPL"}, "NED" => {"NL", "NLD"}, "NCD" => {"NC", "NCL"}, "NZL" => {"NZ", "NZL"}, "NCA" => {"NI", "NIC"}, "NIG" => {"NE", "NER"}, "NGR" => {"NG", "NGA"}, "NIU" => {"NU", "NIU"}, "NFI" => {"NF", "NFK"}, "NMA" => {"MP", "MNP"}, "NOR" => {"NO", "NOR"}, "OMA" => {"OM", "OMN"}, "PAK" => {"PK", "PAK"}, "PLW" => {"PW", "PLW"}, "PAN" => {"PA", "PAN"}, "PNG" => {"PG", "PNG"}, "PAR" => {"PY", "PRY"}, "PER" => {"PE", "PER"}, "PHI" => {"PH", "PHL"}, "POL" => {"PL", "POL"}, "POR" => {"PT", "PRT"}, "PUR" => {"PR", "PRI"}, "QAT" => {"QA", "QAT"}, "KOR" => {"KR", "KOR"}, "MDA" => {"MD", "MDA"}, "ROU" => {"RO", "ROU"}, "RUS" => {"RU", "RUS"}, "RWA" => {"RW", "RWA"}, "REU" => {"RE", "REU"}, "HEL" => {"SH", "SHN"}, "SKN" => {"KN", "KNA"}, "LCA" => {"LC", "LCA"}, "SPM" => {"PM", "SPM"}, "VIN" => {"VC", "VCT"}, "SAM" => {"WS", "WSM"}, "SMR" => {"SM", "SMR"}, "STP" => {"ST", "STP"}, "KSA" => {"SA", "SAU"}, "SEN" => {"SN", "SEN"}, "SRB" => {"RS", "SRB"}, "SEY" => {"SC", "SYC"}, "SLE" => {"SL", "SLE"}, "SIN" => {"SG", "SGP"}, "SVK" => {"SK", "SVK"}, "SLO" => {"SI", "SVN"}, "SOL" => {"SB", "SLB"}, "SOM" => {"SO", "SOM"}, "RSA" => {"ZA", "ZAF"}, "ESP" => {"ES", "ESP"}, "SRI" => {"LK", "LKA"}, "PLE" => {"PS", "PSE"}, "SUD" => {"SD", "SDN"}, "SUR" => {"SR", "SUR"}, "SWZ" => {"SZ", "SWZ"}, "SWE" => {"SE", "SWE"}, "SUI" => {"CH", "CHE"}, "SYR" => {"SY", "SYR"}, "TJK" => {"TJ", "TJK"}, "THA" => {"TH", "THA"}, "MKD" => {"MK", "MKD"}, "TLS" => {"TL", "TLS"}, "TOG" => {"TG", "TGO"}, "TGA" => {"TO", "TON"}, "TTO" => {"TT", "TTO"}, "TUN" => {"TN", "TUN"}, "TUR" => {"TR", "TUR"}, "TKM" => {"TM", "TKM"}, "TKS" => {"TC", "TCA"}, "TUV" => {"TV", "TUV"}, "UGA" => {"UG", "UGA"}, "UKR" => {"UA", "UKR"}, "UAE" => {"AE", "ARE"}, "GBR" => {"GB", "GBR"}, "TAN" => {"TZ", "TZA"}, "ISV" => {"VI", "VIR"}, "USA" => {"US", "USA"}, "URU" => {"UY", "URY"}, "UZB" => {"UZ", "UZB"}, "VAN" => {"VU", "VUT"}, "VEN" => {"VE", "VEN"}, "VIE" => {"VN", "VNM"}, "WAF" => {"WF", "WLF"}, "YEM" => {"YE", "YEM"}, "ZAM" => {"ZM", "ZMB"}, "ZIM" => {"ZW", "ZWE"} } @iso2_countries Map.keys(@iso2) @iso3_countries Map.keys(@iso3) @ioc_countries Map.keys(@ioc) @type code() :: :iso2 | :iso3 | :ioc @type res() :: %{iso2: binary(), iso3: binary(), ioc: binary()} @doc """ Return a country list for a given iso code. Returns `{:ok, [binary()]}` or `{:error, binary()}`. ## Parameters - iso: ISO code, can be one of [:iso2, :iso3, :ioc] ## Examples iex> {:ok, countries} = CountryCodeConverter.countries(:iso2) iex> Enum.member?(countries, "BR") true """ @spec countries(code()) :: {:ok, [binary()]} | {:error, binary()} def countries(:iso2), do: {:ok, @iso2_countries} def countries(:iso3), do: {:ok, @iso3_countries} def countries(:ioc), do: {:ok, @ioc_countries} def countries(iso), do: {:error, "unknown country iso code type: #{iso}"} @doc """ Converts provided code to all 3 types: iso2, iso3 and ioc. Returns `{:ok, %{iso2: binary(), iso3: binary(), ioc: binary()}}` or `{:error, binary()}`. ## Parameters - iso: ISO code, can be one of [:iso2, :iso3, :ioc] - code: code of country in provided ISO, in e.g. ("BRA") ## Examples iex> CountryCodeConverter.convert(:iso2, "BR") {:ok, %{iso2: "BR", iso3: "BRA", ioc: "BRA"}} """ @spec convert(code(), binary()) :: {:ok, res()} | {:error, binary()} def convert(:iso2, code), do: do_covert(@iso2, code, [:ioc, :iso3, :iso2]) def convert(:iso3, code), do: do_covert(@iso3, code, [:ioc, :iso2, :iso3]) def convert(:ioc, code), do: do_covert(@ioc, code, [:iso2, :iso3, :ioc]) def convert(iso, _), do: {:error, "unknown country iso code type: #{iso}"} defp do_covert(m, code, codes) do case Map.get(m, code) do nil -> {:error, "uknown country code #{code}"} {a, b} -> res = Map.new(Enum.zip(codes, [a, b, code])) {:ok, res} end end end