/*******************************************************************************
***  This file is part of Pecunia.                                           ***
***                                                                          ***
***  Copyright (C) 2017, 2018, 2019, 2020, 2021, 2023                        ***
***  John Schneiderman <Licencing _AT_ Schneiderman _DOT_ me>                ***
***                                                                          ***
***  This program is free software: you can redistribute it and/or modify it ***
***  under the terms of the GNU Lesser General Public License as published   ***
***  by the Free Software Foundation, either version 3 of the License, or    ***
***  (at your option) any later version.                                     ***
***                                                                          ***
***  This program is distributed in the hope that it will be useful, but     ***
***  WITHOUT ANY WARRANTY; without even the implied warranty of              ***
***  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                    ***
***  See the GNU Lesser General Public License for more details.             ***
***                                                                          ***
***  You should have received a copy of the GNU Lesser General Public License***
***  along with this program. If not, see <http://www.gnu.org/licenses/>.    ***
*******************************************************************************/
#ifndef PECUNIA_CURRENCY_CODES_H_
#define PECUNIA_CURRENCY_CODES_H_

//  ██████╗  ██████╗     ███╗   ██╗ ██████╗ ████████╗    ███████╗██████╗ ██╗████████╗██╗
//  ██╔══██╗██╔═══██╗    ████╗  ██║██╔═══██╗╚══██╔══╝    ██╔════╝██╔══██╗██║╚══██╔══╝██║
//  ██║  ██║██║   ██║    ██╔██╗ ██║██║   ██║   ██║       █████╗  ██║  ██║██║   ██║   ██║
//  ██║  ██║██║   ██║    ██║╚██╗██║██║   ██║   ██║       ██╔══╝  ██║  ██║██║   ██║   ╚═╝
//  ██████╔╝╚██████╔╝    ██║ ╚████║╚██████╔╝   ██║       ███████╗██████╔╝██║   ██║   ██╗
//  ╚═════╝  ╚═════╝     ╚═╝  ╚═══╝ ╚═════╝    ╚═╝       ╚══════╝╚═════╝ ╚═╝   ╚═╝   ╚═╝
//
//  ███████╗██╗██╗     ███████╗     ██████╗ ██████╗ ███╗   ██╗████████╗███████╗███╗   ██╗████████╗
//  ██╔════╝██║██║     ██╔════╝    ██╔════╝██╔═══██╗████╗  ██║╚══██╔══╝██╔════╝████╗  ██║╚══██╔══╝
//  █████╗  ██║██║     █████╗      ██║     ██║   ██║██╔██╗ ██║   ██║   █████╗  ██╔██╗ ██║   ██║
//  ██╔══╝  ██║██║     ██╔══╝      ██║     ██║   ██║██║╚██╗██║   ██║   ██╔══╝  ██║╚██╗██║   ██║
//  ██║     ██║███████╗███████╗    ╚██████╗╚██████╔╝██║ ╚████║   ██║   ███████╗██║ ╚████║   ██║
//  ╚═╝     ╚═╝╚══════╝╚══════╝     ╚═════╝ ╚═════╝ ╚═╝  ╚═══╝   ╚═╝   ╚══════╝╚═╝  ╚═══╝   ╚═╝
//
//   ██████╗██████╗ ███████╗ █████╗ ████████╗██╗ ██████╗ ███╗   ██╗    ██╗███████╗
//  ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██║██╔═══██╗████╗  ██║    ██║██╔════╝
//  ██║     ██████╔╝█████╗  ███████║   ██║   ██║██║   ██║██╔██╗ ██║    ██║███████╗
//  ██║     ██╔══██╗██╔══╝  ██╔══██║   ██║   ██║██║   ██║██║╚██╗██║    ██║╚════██║
//  ╚██████╗██║  ██║███████╗██║  ██║   ██║   ██║╚██████╔╝██║ ╚████║    ██║███████║
//   ╚═════╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝   ╚═╝   ╚═╝ ╚═════╝ ╚═╝  ╚═══╝    ╚═╝╚══════╝
//
//   █████╗ ██╗   ██╗████████╗ ██████╗ ███╗   ███╗ █████╗ ████████╗███████╗██████╗
//  ██╔══██╗██║   ██║╚══██╔══╝██╔═══██╗████╗ ████║██╔══██╗╚══██╔══╝██╔════╝██╔══██╗
//  ███████║██║   ██║   ██║   ██║   ██║██╔████╔██║███████║   ██║   █████╗  ██║  ██║
//  ██╔══██║██║   ██║   ██║   ██║   ██║██║╚██╔╝██║██╔══██║   ██║   ██╔══╝  ██║  ██║
//  ██║  ██║╚██████╔╝   ██║   ╚██████╔╝██║ ╚═╝ ██║██║  ██║   ██║   ███████╗██████╔╝██╗
//  ╚═╝  ╚═╝ ╚═════╝    ╚═╝    ╚═════╝ ╚═╝     ╚═╝╚═╝  ╚═╝   ╚═╝   ╚══════╝╚═════╝ ╚═╝
// Generated At: 2023-01-30T18:46:32.889410

#include <array>
#include <cstdint>
#include <ostream>
#include <string>
#include <vector>

#include <pecunia_export.h> // cppcheck-suppress missingInclude


namespace pecunia
{
namespace currency
{

/**
 * @brief The unique identifier for a country's currency, monetary market, etc..
 *
 * @see ISO 4217 https://en.wikipedia.org/wiki/ISO_4217
 */
enum class PECUNIA_EXPORT Iso4217Codes : std::uint16_t
{
	/// The currency code for the "UAE Dirham" used in: UNITED ARAB EMIRATES (THE).
	AED = 784,
	/// The currency code for the "Afghani" used in: AFGHANISTAN.
	AFN = 971,
	/// The currency code for the "Lek" used in: ALBANIA.
	ALL = 8,
	/// The currency code for the "Armenian Dram" used in: ARMENIA.
	AMD = 51,
	/// The currency code for the "Netherlands Antillean Guilder" used in: CURAÇAO; SINT MAARTEN (DUTCH PART).
	ANG = 532,
	/// The currency code for the "Kwanza" used in: ANGOLA.
	AOA = 973,
	/// The currency code for the "Argentine Peso" used in: ARGENTINA.
	ARS = 32,
	/// The currency code for the "Australian Dollar" used in: AUSTRALIA; CHRISTMAS ISLAND; COCOS (KEELING) ISLANDS (THE); HEARD ISLAND AND McDONALD ISLANDS; KIRIBATI; NAURU; NORFOLK ISLAND; TUVALU.
	AUD = 36,
	/// The currency code for the "Aruban Florin" used in: ARUBA.
	AWG = 533,
	/// The currency code for the "Azerbaijan Manat" used in: AZERBAIJAN.
	AZN = 944,
	/// The currency code for the "Convertible Mark" used in: BOSNIA AND HERZEGOVINA.
	BAM = 977,
	/// The currency code for the "Barbados Dollar" used in: BARBADOS.
	BBD = 52,
	/// The currency code for the "Taka" used in: BANGLADESH.
	BDT = 50,
	/// The currency code for the "Bulgarian Lev" used in: BULGARIA.
	BGN = 975,
	/// The currency code for the "Bahraini Dinar" used in: BAHRAIN.
	BHD = 48,
	/// The currency code for the "Burundi Franc" used in: BURUNDI.
	BIF = 108,
	/// The currency code for the "Bermudian Dollar" used in: BERMUDA.
	BMD = 60,
	/// The currency code for the "Brunei Dollar" used in: BRUNEI DARUSSALAM.
	BND = 96,
	/// The currency code for the "Boliviano" used in: BOLIVIA (PLURINATIONAL STATE OF).
	BOB = 68,
	/// The currency code for the "Mvdol" used in: BOLIVIA (PLURINATIONAL STATE OF).
	BOV = 984,
	/// The currency code for the "Brazilian Real" used in: BRAZIL.
	BRL = 986,
	/// The currency code for the "Bahamian Dollar" used in: BAHAMAS (THE).
	BSD = 44,
	/// The currency code for the "Ngultrum" used in: BHUTAN.
	BTN = 64,
	/// The currency code for the "Pula" used in: BOTSWANA.
	BWP = 72,
	/// The currency code for the "Belarusian Ruble" used in: BELARUS.
	BYN = 933,
	/// The currency code for the "Belize Dollar" used in: BELIZE.
	BZD = 84,
	/// The currency code for the "Canadian Dollar" used in: CANADA.
	CAD = 124,
	/// The currency code for the "Congolese Franc" used in: CONGO (THE DEMOCRATIC REPUBLIC OF THE).
	CDF = 976,
	/// The currency code for the "WIR Euro" used in: SWITZERLAND.
	CHE = 947,
	/// The currency code for the "Swiss Franc" used in: LIECHTENSTEIN; SWITZERLAND.
	CHF = 756,
	/// The currency code for the "WIR Franc" used in: SWITZERLAND.
	CHW = 948,
	/// The currency code for the "Unidad de Fomento" used in: CHILE.
	CLF = 990,
	/// The currency code for the "Chilean Peso" used in: CHILE.
	CLP = 152,
	/// The currency code for the "Yuan Renminbi" used in: CHINA.
	CNY = 156,
	/// The currency code for the "Colombian Peso" used in: COLOMBIA.
	COP = 170,
	/// The currency code for the "Unidad de Valor Real" used in: COLOMBIA.
	COU = 970,
	/// The currency code for the "Costa Rican Colon" used in: COSTA RICA.
	CRC = 188,
	/// The currency code for the "Peso Convertible" used in: CUBA.
	CUC = 931,
	/// The currency code for the "Cuban Peso" used in: CUBA.
	CUP = 192,
	/// The currency code for the "Cabo Verde Escudo" used in: CABO VERDE.
	CVE = 132,
	/// The currency code for the "Czech Koruna" used in: CZECHIA.
	CZK = 203,
	/// The currency code for the "Djibouti Franc" used in: DJIBOUTI.
	DJF = 262,
	/// The currency code for the "Danish Krone" used in: DENMARK; FAROE ISLANDS (THE); GREENLAND.
	DKK = 208,
	/// The currency code for the "Dominican Peso" used in: DOMINICAN REPUBLIC (THE).
	DOP = 214,
	/// The currency code for the "Algerian Dinar" used in: ALGERIA.
	DZD = 12,
	/// The currency code for the "Egyptian Pound" used in: EGYPT.
	EGP = 818,
	/// The currency code for the "Nakfa" used in: ERITREA.
	ERN = 232,
	/// The currency code for the "Ethiopian Birr" used in: ETHIOPIA.
	ETB = 230,
	/// The currency code for the "Euro" used in: ANDORRA; AUSTRIA; BELGIUM; CROATIA; CYPRUS; ESTONIA; EUROPEAN UNION; FINLAND; FRANCE; FRENCH GUIANA; FRENCH SOUTHERN TERRITORIES (THE); GERMANY; GREECE; GUADELOUPE; HOLY SEE (THE); IRELAND; ITALY; LATVIA; LITHUANIA; LUXEMBOURG; MALTA; MARTINIQUE; MAYOTTE; MONACO; MONTENEGRO; NETHERLANDS (THE); PORTUGAL; RÉUNION; SAINT BARTHÉLEMY; SAINT MARTIN (FRENCH PART); SAINT PIERRE AND MIQUELON; SAN MARINO; SLOVAKIA; SLOVENIA; SPAIN; ÅLAND ISLANDS.
	EUR = 978,
	/// The currency code for the "Fiji Dollar" used in: FIJI.
	FJD = 242,
	/// The currency code for the "Falkland Islands Pound" used in: FALKLAND ISLANDS (THE) [MALVINAS].
	FKP = 238,
	/// The currency code for the "Pound Sterling" used in: GUERNSEY; ISLE OF MAN; JERSEY; UNITED KINGDOM OF GREAT BRITAIN AND NORTHERN IRELAND (THE).
	GBP = 826,
	/// The currency code for the "Lari" used in: GEORGIA.
	GEL = 981,
	/// The currency code for the "Ghana Cedi" used in: GHANA.
	GHS = 936,
	/// The currency code for the "Gibraltar Pound" used in: GIBRALTAR.
	GIP = 292,
	/// The currency code for the "Dalasi" used in: GAMBIA (THE).
	GMD = 270,
	/// The currency code for the "Guinean Franc" used in: GUINEA.
	GNF = 324,
	/// The currency code for the "Quetzal" used in: GUATEMALA.
	GTQ = 320,
	/// The currency code for the "Guyana Dollar" used in: GUYANA.
	GYD = 328,
	/// The currency code for the "Hong Kong Dollar" used in: HONG KONG.
	HKD = 344,
	/// The currency code for the "Lempira" used in: HONDURAS.
	HNL = 340,
	/// The currency code for the "Gourde" used in: HAITI.
	HTG = 332,
	/// The currency code for the "Forint" used in: HUNGARY.
	HUF = 348,
	/// The currency code for the "Rupiah" used in: INDONESIA.
	IDR = 360,
	/// The currency code for the "New Israeli Sheqel" used in: ISRAEL.
	ILS = 376,
	/// The currency code for the "Indian Rupee" used in: BHUTAN; INDIA.
	INR = 356,
	/// The currency code for the "Iraqi Dinar" used in: IRAQ.
	IQD = 368,
	/// The currency code for the "Iranian Rial" used in: IRAN (ISLAMIC REPUBLIC OF).
	IRR = 364,
	/// The currency code for the "Iceland Krona" used in: ICELAND.
	ISK = 352,
	/// The currency code for the "Jamaican Dollar" used in: JAMAICA.
	JMD = 388,
	/// The currency code for the "Jordanian Dinar" used in: JORDAN.
	JOD = 400,
	/// The currency code for the "Yen" used in: JAPAN.
	JPY = 392,
	/// The currency code for the "Kenyan Shilling" used in: KENYA.
	KES = 404,
	/// The currency code for the "Som" used in: KYRGYZSTAN.
	KGS = 417,
	/// The currency code for the "Riel" used in: CAMBODIA.
	KHR = 116,
	/// The currency code for the "Comorian Franc " used in: COMOROS (THE).
	KMF = 174,
	/// The currency code for the "North Korean Won" used in: KOREA (THE DEMOCRATIC PEOPLE’S REPUBLIC OF).
	KPW = 408,
	/// The currency code for the "Won" used in: KOREA (THE REPUBLIC OF).
	KRW = 410,
	/// The currency code for the "Kuwaiti Dinar" used in: KUWAIT.
	KWD = 414,
	/// The currency code for the "Cayman Islands Dollar" used in: CAYMAN ISLANDS (THE).
	KYD = 136,
	/// The currency code for the "Tenge" used in: KAZAKHSTAN.
	KZT = 398,
	/// The currency code for the "Lao Kip" used in: LAO PEOPLE’S DEMOCRATIC REPUBLIC (THE).
	LAK = 418,
	/// The currency code for the "Lebanese Pound" used in: LEBANON.
	LBP = 422,
	/// The currency code for the "Sri Lanka Rupee" used in: SRI LANKA.
	LKR = 144,
	/// The currency code for the "Liberian Dollar" used in: LIBERIA.
	LRD = 430,
	/// The currency code for the "Loti" used in: LESOTHO.
	LSL = 426,
	/// The currency code for the "Libyan Dinar" used in: LIBYA.
	LYD = 434,
	/// The currency code for the "Moroccan Dirham" used in: MOROCCO; WESTERN SAHARA.
	MAD = 504,
	/// The currency code for the "Moldovan Leu" used in: MOLDOVA (THE REPUBLIC OF).
	MDL = 498,
	/// The currency code for the "Malagasy Ariary" used in: MADAGASCAR.
	MGA = 969,
	/// The currency code for the "Denar" used in: NORTH MACEDONIA.
	MKD = 807,
	/// The currency code for the "Kyat" used in: MYANMAR.
	MMK = 104,
	/// The currency code for the "Tugrik" used in: MONGOLIA.
	MNT = 496,
	/// The currency code for the "Pataca" used in: MACAO.
	MOP = 446,
	/// The currency code for the "Ouguiya" used in: MAURITANIA.
	MRU = 929,
	/// The currency code for the "Mauritius Rupee" used in: MAURITIUS.
	MUR = 480,
	/// The currency code for the "Rufiyaa" used in: MALDIVES.
	MVR = 462,
	/// The currency code for the "Malawi Kwacha" used in: MALAWI.
	MWK = 454,
	/// The currency code for the "Mexican Peso" used in: MEXICO.
	MXN = 484,
	/// The currency code for the "Mexican Unidad de Inversion (UDI)" used in: MEXICO.
	MXV = 979,
	/// The currency code for the "Malaysian Ringgit" used in: MALAYSIA.
	MYR = 458,
	/// The currency code for the "Mozambique Metical" used in: MOZAMBIQUE.
	MZN = 943,
	/// The currency code for the "Namibia Dollar" used in: NAMIBIA.
	NAD = 516,
	/// The currency code for the "Naira" used in: NIGERIA.
	NGN = 566,
	/// The currency code for the "Cordoba Oro" used in: NICARAGUA.
	NIO = 558,
	/// The currency code for the "Norwegian Krone" used in: BOUVET ISLAND; NORWAY; SVALBARD AND JAN MAYEN.
	NOK = 578,
	/// The currency code for the "Nepalese Rupee" used in: NEPAL.
	NPR = 524,
	/// The currency code for the "New Zealand Dollar" used in: COOK ISLANDS (THE); NEW ZEALAND; NIUE; PITCAIRN; TOKELAU.
	NZD = 554,
	/// The currency code for the "Rial Omani" used in: OMAN.
	OMR = 512,
	/// The currency code for the "Balboa" used in: PANAMA.
	PAB = 590,
	/// The currency code for the "Sol" used in: PERU.
	PEN = 604,
	/// The currency code for the "Kina" used in: PAPUA NEW GUINEA.
	PGK = 598,
	/// The currency code for the "Philippine Peso" used in: PHILIPPINES (THE).
	PHP = 608,
	/// The currency code for the "Pakistan Rupee" used in: PAKISTAN.
	PKR = 586,
	/// The currency code for the "Zloty" used in: POLAND.
	PLN = 985,
	/// The currency code for the "Guarani" used in: PARAGUAY.
	PYG = 600,
	/// The currency code for the "Qatari Rial" used in: QATAR.
	QAR = 634,
	/// The currency code for the "Romanian Leu" used in: ROMANIA.
	RON = 946,
	/// The currency code for the "Serbian Dinar" used in: SERBIA.
	RSD = 941,
	/// The currency code for the "Russian Ruble" used in: RUSSIAN FEDERATION (THE).
	RUB = 643,
	/// The currency code for the "Rwanda Franc" used in: RWANDA.
	RWF = 646,
	/// The currency code for the "Saudi Riyal" used in: SAUDI ARABIA.
	SAR = 682,
	/// The currency code for the "Solomon Islands Dollar" used in: SOLOMON ISLANDS.
	SBD = 90,
	/// The currency code for the "Seychelles Rupee" used in: SEYCHELLES.
	SCR = 690,
	/// The currency code for the "Sudanese Pound" used in: SUDAN (THE).
	SDG = 938,
	/// The currency code for the "Swedish Krona" used in: SWEDEN.
	SEK = 752,
	/// The currency code for the "Singapore Dollar" used in: SINGAPORE.
	SGD = 702,
	/// The currency code for the "Saint Helena Pound" used in: SAINT HELENA, ASCENSION AND TRISTAN DA CUNHA.
	SHP = 654,
	/// The currency code for the "Leone" used in: SIERRA LEONE.
	SLE = 925,
	/// The currency code for the "Leone" used in: SIERRA LEONE.
	SLL = 694,
	/// The currency code for the "Somali Shilling" used in: SOMALIA.
	SOS = 706,
	/// The currency code for the "Surinam Dollar" used in: SURINAME.
	SRD = 968,
	/// The currency code for the "South Sudanese Pound" used in: SOUTH SUDAN.
	SSP = 728,
	/// The currency code for the "Dobra" used in: SAO TOME AND PRINCIPE.
	STN = 930,
	/// The currency code for the "El Salvador Colon" used in: EL SALVADOR.
	SVC = 222,
	/// The currency code for the "Syrian Pound" used in: SYRIAN ARAB REPUBLIC.
	SYP = 760,
	/// The currency code for the "Lilangeni" used in: ESWATINI.
	SZL = 748,
	/// The currency code for the "Baht" used in: THAILAND.
	THB = 764,
	/// The currency code for the "Somoni" used in: TAJIKISTAN.
	TJS = 972,
	/// The currency code for the "Turkmenistan New Manat" used in: TURKMENISTAN.
	TMT = 934,
	/// The currency code for the "Tunisian Dinar" used in: TUNISIA.
	TND = 788,
	/// The currency code for the "Pa’anga" used in: TONGA.
	TOP = 776,
	/// The currency code for the "Turkish Lira" used in: TÜRKİYE.
	TRY = 949,
	/// The currency code for the "Trinidad and Tobago Dollar" used in: TRINIDAD AND TOBAGO.
	TTD = 780,
	/// The currency code for the "New Taiwan Dollar" used in: TAIWAN (PROVINCE OF CHINA).
	TWD = 901,
	/// The currency code for the "Tanzanian Shilling" used in: TANZANIA, UNITED REPUBLIC OF.
	TZS = 834,
	/// The currency code for the "Hryvnia" used in: UKRAINE.
	UAH = 980,
	/// The currency code for the "Uganda Shilling" used in: UGANDA.
	UGX = 800,
	/// The currency code for the "US Dollar" used in: AMERICAN SAMOA; BONAIRE, SINT EUSTATIUS AND SABA; BRITISH INDIAN OCEAN TERRITORY (THE); ECUADOR; EL SALVADOR; GUAM; HAITI; MARSHALL ISLANDS (THE); MICRONESIA (FEDERATED STATES OF); NORTHERN MARIANA ISLANDS (THE); PALAU; PANAMA; PUERTO RICO; TIMOR-LESTE; TURKS AND CAICOS ISLANDS (THE); UNITED STATES MINOR OUTLYING ISLANDS (THE); UNITED STATES OF AMERICA (THE); VIRGIN ISLANDS (BRITISH); VIRGIN ISLANDS (U.S.).
	USD = 840,
	/// The currency code for the "US Dollar (Next day)" used in: UNITED STATES OF AMERICA (THE).
	USN = 997,
	/// The currency code for the "Uruguay Peso en Unidades Indexadas (UI)" used in: URUGUAY.
	UYI = 940,
	/// The currency code for the "Peso Uruguayo" used in: URUGUAY.
	UYU = 858,
	/// The currency code for the "Unidad Previsional" used in: URUGUAY.
	UYW = 927,
	/// The currency code for the "Uzbekistan Sum" used in: UZBEKISTAN.
	UZS = 860,
	/// The currency code for the "Bolívar Soberano" used in: VENEZUELA (BOLIVARIAN REPUBLIC OF).
	VED = 926,
	/// The currency code for the "Bolívar Soberano" used in: VENEZUELA (BOLIVARIAN REPUBLIC OF).
	VES = 928,
	/// The currency code for the "Dong" used in: VIET NAM.
	VND = 704,
	/// The currency code for the "Vatu" used in: VANUATU.
	VUV = 548,
	/// The currency code for the "Tala" used in: SAMOA.
	WST = 882,
	/// The currency code for the "CFA Franc BEAC" used in: CAMEROON; CENTRAL AFRICAN REPUBLIC (THE); CHAD; CONGO (THE); EQUATORIAL GUINEA; GABON.
	XAF = 950,
	/// The currency code for the "Silver" used in: ZZ11_Silver.
	XAG = 961,
	/// The currency code for the "Gold" used in: ZZ08_Gold.
	XAU = 959,
	/// The currency code for the "Bond Markets Unit European Composite Unit (EURCO)" used in: ZZ01_Bond Markets Unit European_EURCO.
	XBA = 955,
	/// The currency code for the "Bond Markets Unit European Monetary Unit (E.M.U.-6)" used in: ZZ02_Bond Markets Unit European_EMU-6.
	XBB = 956,
	/// The currency code for the "Bond Markets Unit European Unit of Account 9 (E.U.A.-9)" used in: ZZ03_Bond Markets Unit European_EUA-9.
	XBC = 957,
	/// The currency code for the "Bond Markets Unit European Unit of Account 17 (E.U.A.-17)" used in: ZZ04_Bond Markets Unit European_EUA-17.
	XBD = 958,
	/// The currency code for the "East Caribbean Dollar" used in: ANGUILLA; ANTIGUA AND BARBUDA; DOMINICA; GRENADA; MONTSERRAT; SAINT KITTS AND NEVIS; SAINT LUCIA; SAINT VINCENT AND THE GRENADINES.
	XCD = 951,
	/// The currency code for the "SDR (Special Drawing Right)" used in: INTERNATIONAL MONETARY FUND (IMF) .
	XDR = 960,
	/// The currency code for the "CFA Franc BCEAO" used in: BENIN; BURKINA FASO; CÔTE D'IVOIRE; GUINEA-BISSAU; MALI; NIGER (THE); SENEGAL; TOGO.
	XOF = 952,
	/// The currency code for the "Palladium" used in: ZZ09_Palladium.
	XPD = 964,
	/// The currency code for the "CFP Franc" used in: FRENCH POLYNESIA; NEW CALEDONIA; WALLIS AND FUTUNA.
	XPF = 953,
	/// The currency code for the "Platinum" used in: ZZ10_Platinum.
	XPT = 962,
	/// The currency code for the "Sucre" used in: SISTEMA UNITARIO DE COMPENSACION REGIONAL DE PAGOS "SUCRE".
	XSU = 994,
	/// The currency code for the "Codes specifically reserved for testing purposes" used in: ZZ06_Testing_Code.
	XTS = 963,
	/// The currency code for the "ADB Unit of Account" used in: MEMBER COUNTRIES OF THE AFRICAN DEVELOPMENT BANK GROUP.
	XUA = 965,
	/// The currency code for the "The codes assigned for transactions where no currency is involved" used in: ZZ07_No_Currency.
	XXX = 999,
	/// The currency code for the "Yemeni Rial" used in: YEMEN.
	YER = 886,
	/// The currency code for the "Rand" used in: LESOTHO; NAMIBIA; SOUTH AFRICA.
	ZAR = 710,
	/// The currency code for the "Zambian Kwacha" used in: ZAMBIA.
	ZMW = 967,
	/// The currency code for the "Zimbabwe Dollar" used in: ZIMBABWE.
	ZWL = 932,
};

/**
 * @brief Converts from a strongly-typed ISO code to a weak string form.
 *
 * @param[in] code The country's monetary unit whose ISO code is to be converted.
 *
 * @return The weak type form of the ISO code.
 */
PECUNIA_EXPORT std::string toStdString(const Iso4217Codes& code);
/**
 * @brief Converts from a weakly-typed ISO code to the strongly-typed form. The code must be all
 * upper-cased for the match to be performed.
 *
 * @exception std::runtime_error When the supplied weak code does not match any known strong code.
 *
 * @param[in] code The country's monetary unit whose ISO code is to be converted.
 *
 * @return The strong type form of the ISO code.
 */
PECUNIA_EXPORT Iso4217Codes toIso4217Code(const std::string& code);
/**
 * @brief Provides the native currency symbol used by a currency code. N.B. currency symbols are
 * shared by others and are therefore cannot be unique.
 *
 * @note Currently not all codes are supported.
 *
 * @param[in] code The country's monetary unit whose currency symbol is desired.
 *
 * @return The string representation of the currency symbol.
 */
PECUNIA_EXPORT std::string currencySymbol(const Iso4217Codes& code);
/**
 * @brief Provides the number of digits used by the minor currency unit using the currency's
 * ISO exponent.
 *
 * @param[in] code The country's monetary unit whose number of digits is desired.
 *
 * @return The number of digits used by the minor currency unit.
 */
PECUNIA_EXPORT std::uint8_t minorUnitDigits(const Iso4217Codes& code);
/**
 * @brief Calculates the currency factor between the major unit and the minor unit accounting for
 * the system precision of the minor monetary unit. The precision is in terms of how many extra
 * digits to add for the minor unit, e.g. USD starts with 2 and a precision of 2 would provide
 * for a total precision of 4 digits.
 *
 * @param[in] code The country's monetary unit to calculate the ratio for.
 *
 * @return The multiplicative factor between the major and minor unit with a supplied precision.
 */
PECUNIA_EXPORT std::int32_t minorUnitPrecisionFactor(const Iso4217Codes& code);
/**
* @brief Performs the stream insertion for displaying the currency code in the ISO-4217 form.
*
* @param stream The stream into which the code should be inserted.
* @param code The code that will be inserted.
*
* @return The same stream that was supplied, but now containing the code.
*/
PECUNIA_EXPORT std::ostream& operator<<(std::ostream& stream, const Iso4217Codes& code);
/**
 * @brief Looks-up the countries which are using a given currency.
 *
 * @param code The code of the currency to look-up for all the countries.
 *
 * @return All the countries found.
 */
PECUNIA_EXPORT std::vector<std::string> countriesUsing(const Iso4217Codes& code);
/**
 * @brief Looks-up the name of a currency using a given currency code.
 *
 * @param code The code of the currency to look-up for its name.
 *
 * @return The name of the currency in English.
 */
PECUNIA_EXPORT std::string currencyName(const Iso4217Codes& code);

/// The total number of currency codes supported.
constexpr std::uint8_t numberOfIso4217Codes{180};
/// A container of every currency code supported. The codes are all other codes in alphabetical
/// order.
extern PECUNIA_EXPORT const std::array<Iso4217Codes, numberOfIso4217Codes> allIso4217Codes;

}}

#endif
