#[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 {
match self {
CurrencySymbols::EuroDashCurrencySign => '₠',
CurrencySymbols::ColonSign => '₡',
CurrencySymbols::CruzeiroSign => '₢',
CurrencySymbols::FrenchFrancSign => '₣',
CurrencySymbols::LiraSign => '₤',
CurrencySymbols::MillSign => '₥',
CurrencySymbols::NairaSign => '₦',
CurrencySymbols::PesetaSign => '₧',
CurrencySymbols::RupeeSign => '₨',
CurrencySymbols::WonSign => '₩',
CurrencySymbols::NewSheqelSign => '₪',
CurrencySymbols::DongSign => '₫',
CurrencySymbols::EuroSign => '€',
CurrencySymbols::KipSign => '₭',
CurrencySymbols::TugrikSign => '₮',
CurrencySymbols::DrachmaSign => '₯',
CurrencySymbols::GermanPennySign => '₰',
CurrencySymbols::PesoSign => '₱',
CurrencySymbols::GuaraniSign => '₲',
CurrencySymbols::AustralSign => '₳',
CurrencySymbols::HryvniaSign => '₴',
CurrencySymbols::CediSign => '₵',
CurrencySymbols::LivreTournoisSign => '₶',
CurrencySymbols::SpesmiloSign => '₷',
CurrencySymbols::TengeSign => '₸',
CurrencySymbols::IndianRupeeSign => '₹',
CurrencySymbols::TurkishLiraSign => '₺',
CurrencySymbols::NordicMarkSign => '₻',
CurrencySymbols::ManatSign => '₼',
CurrencySymbols::RubleSign => '₽',
CurrencySymbols::LariSign => '₾',
CurrencySymbols::BitcoinSign => '₿',
}
}
}
impl std::convert::TryFrom<char> for CurrencySymbols {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'₠' => Ok(CurrencySymbols::EuroDashCurrencySign),
'₡' => Ok(CurrencySymbols::ColonSign),
'₢' => Ok(CurrencySymbols::CruzeiroSign),
'₣' => Ok(CurrencySymbols::FrenchFrancSign),
'₤' => Ok(CurrencySymbols::LiraSign),
'₥' => Ok(CurrencySymbols::MillSign),
'₦' => Ok(CurrencySymbols::NairaSign),
'₧' => Ok(CurrencySymbols::PesetaSign),
'₨' => Ok(CurrencySymbols::RupeeSign),
'₩' => Ok(CurrencySymbols::WonSign),
'₪' => Ok(CurrencySymbols::NewSheqelSign),
'₫' => Ok(CurrencySymbols::DongSign),
'€' => Ok(CurrencySymbols::EuroSign),
'₭' => Ok(CurrencySymbols::KipSign),
'₮' => Ok(CurrencySymbols::TugrikSign),
'₯' => Ok(CurrencySymbols::DrachmaSign),
'₰' => Ok(CurrencySymbols::GermanPennySign),
'₱' => Ok(CurrencySymbols::PesoSign),
'₲' => Ok(CurrencySymbols::GuaraniSign),
'₳' => Ok(CurrencySymbols::AustralSign),
'₴' => Ok(CurrencySymbols::HryvniaSign),
'₵' => Ok(CurrencySymbols::CediSign),
'₶' => Ok(CurrencySymbols::LivreTournoisSign),
'₷' => Ok(CurrencySymbols::SpesmiloSign),
'₸' => Ok(CurrencySymbols::TengeSign),
'₹' => Ok(CurrencySymbols::IndianRupeeSign),
'₺' => Ok(CurrencySymbols::TurkishLiraSign),
'₻' => Ok(CurrencySymbols::NordicMarkSign),
'₼' => Ok(CurrencySymbols::ManatSign),
'₽' => Ok(CurrencySymbols::RubleSign),
'₾' => Ok(CurrencySymbols::LariSign),
'₿' => 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) -> String {
let s = std::format!("CurrencySymbols{:#?}", self);
string_morph::to_sentence_case(&s)
}
}