use std::fmt;
use clap::ValueEnum;
#[derive(Debug, Clone, Default, ValueEnum)]
pub enum Currency {
AlbanianLek,
AlgerianDinar,
ArgentinePeso,
ArmenianDram,
ArubanFlorin,
AustralianDollar,
AzerbaijaniManat,
BahamianDollar,
BahrainiDinar,
BelarusianRouble,
BermudianDollar,
BosniaHerzegovinaMark,
BrazilianReal,
BritishPound,
BulgarianLev,
CanadianDollar,
CFPFranc,
ChileanPeso,
ChineseYuan,
ColombianPeso,
CostaRicanColon,
CubanPeso,
CzechKoruna,
DanishKrone,
DominicanPeso,
EgyptianPound,
#[default]
Euro,
GeorgianLari,
HongKongDollar,
HungarianForint,
IcelandicKrona,
IndianRupee,
IndonesianRupiah,
IranianRial,
IsraeliNewShekel,
JamaicanDollar,
JapaneseYen,
JordanianDinar,
KazakhstaniTenge,
KuwaitiDinar,
LebanesePound,
MacedonianDenar,
MalaysianRinggit,
MexicanPeso,
MoldovanLeu,
MoroccanDirham,
NewTaiwanDollar,
NewZealandDollar,
NorwegianKrone,
OmaniRial,
PakistaniRupee,
PanamanianBalboa,
PeruvianSol,
PhilippinePeso,
PolishZloty,
QatariRiyal,
RomanianLeu,
RussianRouble,
SaudiRiyal,
SerbianDinar,
SingaporeDollar,
SouthAfricanRand,
SouthKoreanWon,
SwedishKrona,
SwissFranc,
ThaiBaht,
TurkishLira,
UkrainianHryvnia,
UnitedArabEmiratesDirham,
USDollar,
VietnameseDong,
}
impl fmt::Display for Currency {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let res = match self {
Currency::AlbanianLek => "ALL",
Currency::AlgerianDinar => "DZD",
Currency::ArgentinePeso => "ARS",
Currency::ArmenianDram => "AMD",
Currency::ArubanFlorin => "AWG",
Currency::AustralianDollar => "AUD",
Currency::AzerbaijaniManat => "AZN",
Currency::BahamianDollar => "BSD",
Currency::BahrainiDinar => "BHD",
Currency::BelarusianRouble => "BYN",
Currency::BermudianDollar => "BMD",
Currency::BosniaHerzegovinaMark => "BAM",
Currency::BrazilianReal => "BRL",
Currency::BritishPound => "GBP",
Currency::BulgarianLev => "BGN",
Currency::CanadianDollar => "CAD",
Currency::CFPFranc => "XPF",
Currency::ChileanPeso => "CLP",
Currency::ChineseYuan => "CNY",
Currency::ColombianPeso => "COP",
Currency::CostaRicanColon => "CRC",
Currency::CubanPeso => "CUP",
Currency::CzechKoruna => "CZK",
Currency::DanishKrone => "DKK",
Currency::DominicanPeso => "DOP",
Currency::EgyptianPound => "EGP",
Currency::Euro => "EUR",
Currency::GeorgianLari => "GEL",
Currency::HongKongDollar => "HKD",
Currency::HungarianForint => "HUF",
Currency::IcelandicKrona => "ISK",
Currency::IndianRupee => "INR",
Currency::IndonesianRupiah => "IDR",
Currency::IranianRial => "IRR",
Currency::IsraeliNewShekel => "ILS",
Currency::JamaicanDollar => "JMD",
Currency::JapaneseYen => "JPY",
Currency::JordanianDinar => "JOD",
Currency::KazakhstaniTenge => "KZT",
Currency::KuwaitiDinar => "KWD",
Currency::LebanesePound => "LBP",
Currency::MacedonianDenar => "MKD",
Currency::MalaysianRinggit => "MYR",
Currency::MexicanPeso => "MXN",
Currency::MoldovanLeu => "MDL",
Currency::MoroccanDirham => "MAD",
Currency::NewTaiwanDollar => "TWD",
Currency::NewZealandDollar => "NZD",
Currency::NorwegianKrone => "NOK",
Currency::OmaniRial => "OMR",
Currency::PakistaniRupee => "PKR",
Currency::PanamanianBalboa => "PAB",
Currency::PeruvianSol => "PEN",
Currency::PhilippinePeso => "PHP",
Currency::PolishZloty => "PLN",
Currency::QatariRiyal => "QAR",
Currency::RomanianLeu => "RON",
Currency::RussianRouble => "RUB",
Currency::SaudiRiyal => "SAR",
Currency::SerbianDinar => "RSD",
Currency::SingaporeDollar => "SGD",
Currency::SouthAfricanRand => "ZAR",
Currency::SouthKoreanWon => "KRW",
Currency::SwedishKrona => "SEK",
Currency::SwissFranc => "CHF",
Currency::ThaiBaht => "THB",
Currency::TurkishLira => "TRY",
Currency::UkrainianHryvnia => "UAH",
Currency::UnitedArabEmiratesDirham => "AED",
Currency::USDollar => "USD",
Currency::VietnameseDong => "VND",
};
f.write_str(res)
}
}
#[cfg(test)]
#[allow(clippy::unwrap_used)]
mod tests {
use super::*;
#[test]
fn currency_display_spot_check() {
assert_eq!(Currency::Euro.to_string(), "EUR");
assert_eq!(Currency::USDollar.to_string(), "USD");
assert_eq!(Currency::BritishPound.to_string(), "GBP");
assert_eq!(Currency::JapaneseYen.to_string(), "JPY");
assert_eq!(Currency::SwissFranc.to_string(), "CHF");
assert_eq!(Currency::AustralianDollar.to_string(), "AUD");
}
}