mod constants {
pub const EURO_DASH_CURRENCY_SIGN: char = '₠';
pub const COLON_SIGN: char = '₡';
pub const CRUZEIRO_SIGN: char = '₢';
pub const FRENCH_FRANC_SIGN: char = '₣';
pub const LIRA_SIGN: char = '₤';
pub const MILL_SIGN: char = '₥';
pub const NAIRA_SIGN: char = '₦';
pub const PESETA_SIGN: char = '₧';
pub const RUPEE_SIGN: char = '₨';
pub const WON_SIGN: char = '₩';
pub const NEW_SHEQEL_SIGN: char = '₪';
pub const DONG_SIGN: char = '₫';
pub const EURO_SIGN: char = '€';
pub const KIP_SIGN: char = '₭';
pub const TUGRIK_SIGN: char = '₮';
pub const DRACHMA_SIGN: char = '₯';
pub const GERMAN_PENNY_SIGN: char = '₰';
pub const PESO_SIGN: char = '₱';
pub const GUARANI_SIGN: char = '₲';
pub const AUSTRAL_SIGN: char = '₳';
pub const HRYVNIA_SIGN: char = '₴';
pub const CEDI_SIGN: char = '₵';
pub const LIVRE_TOURNOIS_SIGN: char = '₶';
pub const SPESMILO_SIGN: char = '₷';
pub const TENGE_SIGN: char = '₸';
pub const INDIAN_RUPEE_SIGN: char = '₹';
pub const TURKISH_LIRA_SIGN: char = '₺';
pub const NORDIC_MARK_SIGN: char = '₻';
pub const MANAT_SIGN: char = '₼';
pub const RUBLE_SIGN: char = '₽';
pub const LARI_SIGN: char = '₾';
pub const BITCOIN_SIGN: char = '₿';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum CurrencySymbols {
EuroDashCurrencySign,
ColonSign,
CruzeiroSign,
FrenchFrancSign,
LiraSign,
MillSign,
NairaSign,
PesetaSign,
RupeeSign,
WonSign,
NewSheqelSign,
DongSign,
EuroSign,
KipSign,
TugrikSign,
DrachmaSign,
GermanPennySign,
PesoSign,
GuaraniSign,
AustralSign,
HryvniaSign,
CediSign,
LivreTournoisSign,
SpesmiloSign,
TengeSign,
IndianRupeeSign,
TurkishLiraSign,
NordicMarkSign,
ManatSign,
RubleSign,
LariSign,
BitcoinSign,
}
impl Into<char> for CurrencySymbols {
fn into(self) -> char {
use constants::*;
match self {
CurrencySymbols::EuroDashCurrencySign => EURO_DASH_CURRENCY_SIGN,
CurrencySymbols::ColonSign => COLON_SIGN,
CurrencySymbols::CruzeiroSign => CRUZEIRO_SIGN,
CurrencySymbols::FrenchFrancSign => FRENCH_FRANC_SIGN,
CurrencySymbols::LiraSign => LIRA_SIGN,
CurrencySymbols::MillSign => MILL_SIGN,
CurrencySymbols::NairaSign => NAIRA_SIGN,
CurrencySymbols::PesetaSign => PESETA_SIGN,
CurrencySymbols::RupeeSign => RUPEE_SIGN,
CurrencySymbols::WonSign => WON_SIGN,
CurrencySymbols::NewSheqelSign => NEW_SHEQEL_SIGN,
CurrencySymbols::DongSign => DONG_SIGN,
CurrencySymbols::EuroSign => EURO_SIGN,
CurrencySymbols::KipSign => KIP_SIGN,
CurrencySymbols::TugrikSign => TUGRIK_SIGN,
CurrencySymbols::DrachmaSign => DRACHMA_SIGN,
CurrencySymbols::GermanPennySign => GERMAN_PENNY_SIGN,
CurrencySymbols::PesoSign => PESO_SIGN,
CurrencySymbols::GuaraniSign => GUARANI_SIGN,
CurrencySymbols::AustralSign => AUSTRAL_SIGN,
CurrencySymbols::HryvniaSign => HRYVNIA_SIGN,
CurrencySymbols::CediSign => CEDI_SIGN,
CurrencySymbols::LivreTournoisSign => LIVRE_TOURNOIS_SIGN,
CurrencySymbols::SpesmiloSign => SPESMILO_SIGN,
CurrencySymbols::TengeSign => TENGE_SIGN,
CurrencySymbols::IndianRupeeSign => INDIAN_RUPEE_SIGN,
CurrencySymbols::TurkishLiraSign => TURKISH_LIRA_SIGN,
CurrencySymbols::NordicMarkSign => NORDIC_MARK_SIGN,
CurrencySymbols::ManatSign => MANAT_SIGN,
CurrencySymbols::RubleSign => RUBLE_SIGN,
CurrencySymbols::LariSign => LARI_SIGN,
CurrencySymbols::BitcoinSign => BITCOIN_SIGN,
}
}
}
impl std::convert::TryFrom<char> for CurrencySymbols {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
EURO_DASH_CURRENCY_SIGN => Ok(CurrencySymbols::EuroDashCurrencySign),
COLON_SIGN => Ok(CurrencySymbols::ColonSign),
CRUZEIRO_SIGN => Ok(CurrencySymbols::CruzeiroSign),
FRENCH_FRANC_SIGN => Ok(CurrencySymbols::FrenchFrancSign),
LIRA_SIGN => Ok(CurrencySymbols::LiraSign),
MILL_SIGN => Ok(CurrencySymbols::MillSign),
NAIRA_SIGN => Ok(CurrencySymbols::NairaSign),
PESETA_SIGN => Ok(CurrencySymbols::PesetaSign),
RUPEE_SIGN => Ok(CurrencySymbols::RupeeSign),
WON_SIGN => Ok(CurrencySymbols::WonSign),
NEW_SHEQEL_SIGN => Ok(CurrencySymbols::NewSheqelSign),
DONG_SIGN => Ok(CurrencySymbols::DongSign),
EURO_SIGN => Ok(CurrencySymbols::EuroSign),
KIP_SIGN => Ok(CurrencySymbols::KipSign),
TUGRIK_SIGN => Ok(CurrencySymbols::TugrikSign),
DRACHMA_SIGN => Ok(CurrencySymbols::DrachmaSign),
GERMAN_PENNY_SIGN => Ok(CurrencySymbols::GermanPennySign),
PESO_SIGN => Ok(CurrencySymbols::PesoSign),
GUARANI_SIGN => Ok(CurrencySymbols::GuaraniSign),
AUSTRAL_SIGN => Ok(CurrencySymbols::AustralSign),
HRYVNIA_SIGN => Ok(CurrencySymbols::HryvniaSign),
CEDI_SIGN => Ok(CurrencySymbols::CediSign),
LIVRE_TOURNOIS_SIGN => Ok(CurrencySymbols::LivreTournoisSign),
SPESMILO_SIGN => Ok(CurrencySymbols::SpesmiloSign),
TENGE_SIGN => Ok(CurrencySymbols::TengeSign),
INDIAN_RUPEE_SIGN => Ok(CurrencySymbols::IndianRupeeSign),
TURKISH_LIRA_SIGN => Ok(CurrencySymbols::TurkishLiraSign),
NORDIC_MARK_SIGN => Ok(CurrencySymbols::NordicMarkSign),
MANAT_SIGN => Ok(CurrencySymbols::ManatSign),
RUBLE_SIGN => Ok(CurrencySymbols::RubleSign),
LARI_SIGN => Ok(CurrencySymbols::LariSign),
BITCOIN_SIGN => Ok(CurrencySymbols::BitcoinSign),
_ => Err(()),
}
}
}
impl Into<u32> for CurrencySymbols {
fn into(self) -> u32 {
let c: char = self.into();
let hex = c
.escape_unicode()
.to_string()
.replace("\\u{", "")
.replace("}", "");
u32::from_str_radix(&hex, 16).unwrap()
}
}
impl std::convert::TryFrom<u32> for CurrencySymbols {
type Error = ();
fn try_from(u: u32) -> Result<Self, Self::Error> {
if let Ok(c) = char::try_from(u) {
Self::try_from(c)
} else {
Err(())
}
}
}
impl Iterator for CurrencySymbols {
type Item = Self;
fn next(&mut self) -> Option<Self> {
let index: u32 = (*self).into();
use std::convert::TryFrom;
Self::try_from(index + 1).ok()
}
}
impl CurrencySymbols {
pub fn new() -> Self {
CurrencySymbols::EuroDashCurrencySign
}
pub fn name(&self) -> &str {
match self {
CurrencySymbols::EuroDashCurrencySign => "euro-currency sign",
CurrencySymbols::ColonSign => "colon sign",
CurrencySymbols::CruzeiroSign => "cruzeiro sign",
CurrencySymbols::FrenchFrancSign => "french franc sign",
CurrencySymbols::LiraSign => "lira sign",
CurrencySymbols::MillSign => "mill sign",
CurrencySymbols::NairaSign => "naira sign",
CurrencySymbols::PesetaSign => "peseta sign",
CurrencySymbols::RupeeSign => "rupee sign",
CurrencySymbols::WonSign => "won sign",
CurrencySymbols::NewSheqelSign => "new sheqel sign",
CurrencySymbols::DongSign => "dong sign",
CurrencySymbols::EuroSign => "euro sign",
CurrencySymbols::KipSign => "kip sign",
CurrencySymbols::TugrikSign => "tugrik sign",
CurrencySymbols::DrachmaSign => "drachma sign",
CurrencySymbols::GermanPennySign => "german penny sign",
CurrencySymbols::PesoSign => "peso sign",
CurrencySymbols::GuaraniSign => "guarani sign",
CurrencySymbols::AustralSign => "austral sign",
CurrencySymbols::HryvniaSign => "hryvnia sign",
CurrencySymbols::CediSign => "cedi sign",
CurrencySymbols::LivreTournoisSign => "livre tournois sign",
CurrencySymbols::SpesmiloSign => "spesmilo sign",
CurrencySymbols::TengeSign => "tenge sign",
CurrencySymbols::IndianRupeeSign => "indian rupee sign",
CurrencySymbols::TurkishLiraSign => "turkish lira sign",
CurrencySymbols::NordicMarkSign => "nordic mark sign",
CurrencySymbols::ManatSign => "manat sign",
CurrencySymbols::RubleSign => "ruble sign",
CurrencySymbols::LariSign => "lari sign",
CurrencySymbols::BitcoinSign => "bitcoin sign",
}
}
}