paypal_rust/resources/enums/
currency_code.rs

1use std::str::FromStr;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Copy, Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
6pub enum CurrencyCode {
7    #[serde(rename = "AUD")]
8    AustralianDollar,
9    #[serde(rename = "BRL")]
10    BrazilianReal,
11    #[serde(rename = "CAD")]
12    CanadianDollar,
13    #[serde(rename = "CNY")]
14    ChineseRenmenbi,
15    #[serde(rename = "CZK")]
16    CzechKoruna,
17    #[serde(rename = "DKK")]
18    DanishKrone,
19    #[default]
20    #[serde(rename = "EUR")]
21    Euro,
22    #[serde(rename = "HKD")]
23    HongKongDollar,
24    #[serde(rename = "HUF")]
25    HungarianForint,
26    #[serde(rename = "ILS")]
27    IsraeliNewShekel,
28    #[serde(rename = "JPY")]
29    JapaneseYen,
30    #[serde(rename = "MYR")]
31    MalaysianRinggit,
32    #[serde(rename = "MXN")]
33    MexicanPeso,
34    #[serde(rename = "TWD")]
35    NewTaiwanDollar,
36    #[serde(rename = "NZD")]
37    NewZealandDollar,
38    #[serde(rename = "NOK")]
39    Norwegiankrone,
40    #[serde(rename = "PHP")]
41    PhilippinePeso,
42    #[serde(rename = "PLN")]
43    PolishZloty,
44    #[serde(rename = "GBP")]
45    PoundSterling,
46    #[serde(rename = "RUB")]
47    RussianRuble,
48    #[serde(rename = "SGD")]
49    SingaporeDollar,
50    #[serde(rename = "SEK")]
51    SwedishKrona,
52    #[serde(rename = "CHF")]
53    SwissFranc,
54    #[serde(rename = "THB")]
55    ThaiBaht,
56    #[serde(rename = "USD")]
57    UnitedStatesDollar,
58}
59
60impl CurrencyCode {
61    pub const fn as_str(self) -> &'static str {
62        match self {
63            Self::AustralianDollar => "AUD",
64            Self::BrazilianReal => "BRL",
65            Self::CanadianDollar => "CAD",
66            Self::ChineseRenmenbi => "CNY",
67            Self::CzechKoruna => "CZK",
68            Self::DanishKrone => "DKK",
69            Self::Euro => "EUR",
70            Self::HongKongDollar => "HKD",
71            Self::HungarianForint => "HUF",
72            Self::IsraeliNewShekel => "ILS",
73            Self::JapaneseYen => "JPY",
74            Self::MalaysianRinggit => "MYR",
75            Self::MexicanPeso => "MXN",
76            Self::NewTaiwanDollar => "TWD",
77            Self::NewZealandDollar => "NZD",
78            Self::Norwegiankrone => "NOK",
79            Self::PhilippinePeso => "PHP",
80            Self::PolishZloty => "PLN",
81            Self::PoundSterling => "GBP",
82            Self::RussianRuble => "RUB",
83            Self::SingaporeDollar => "SGD",
84            Self::SwedishKrona => "SEK",
85            Self::SwissFranc => "CHF",
86            Self::ThaiBaht => "THB",
87            Self::UnitedStatesDollar => "USD",
88        }
89    }
90}
91
92impl AsRef<str> for CurrencyCode {
93    fn as_ref(&self) -> &str {
94        self.as_str()
95    }
96}
97
98impl std::fmt::Display for CurrencyCode {
99    fn fmt(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
100        self.as_str().fmt(formatter)
101    }
102}
103
104impl FromStr for CurrencyCode {
105    type Err = ParseCurrencyCodeError;
106    fn from_str(s: &str) -> Result<Self, Self::Err> {
107        match s {
108            "AUD" => Ok(Self::AustralianDollar),
109            "BRL" => Ok(Self::BrazilianReal),
110            "CAD" => Ok(Self::CanadianDollar),
111            "CNY" => Ok(Self::ChineseRenmenbi),
112            "CZK" => Ok(Self::CzechKoruna),
113            "DKK" => Ok(Self::DanishKrone),
114            "EUR" => Ok(Self::Euro),
115            "HKD" => Ok(Self::HongKongDollar),
116            "HUF" => Ok(Self::HungarianForint),
117            "ILS" => Ok(Self::IsraeliNewShekel),
118            "JPY" => Ok(Self::JapaneseYen),
119            "MYR" => Ok(Self::MalaysianRinggit),
120            "MXN" => Ok(Self::MexicanPeso),
121            "TWD" => Ok(Self::NewTaiwanDollar),
122            "NZD" => Ok(Self::NewZealandDollar),
123            "NOK" => Ok(Self::Norwegiankrone),
124            "PHP" => Ok(Self::PhilippinePeso),
125            "PLN" => Ok(Self::PolishZloty),
126            "GBP" => Ok(Self::PoundSterling),
127            "RUB" => Ok(Self::RussianRuble),
128            "SGD" => Ok(Self::SingaporeDollar),
129            "SEK" => Ok(Self::SwedishKrona),
130            "CHF" => Ok(Self::SwissFranc),
131            "THB" => Ok(Self::ThaiBaht),
132            "USD" => Ok(Self::UnitedStatesDollar),
133            _ => Err(ParseCurrencyCodeError(())),
134        }
135    }
136}
137
138#[derive(Debug)]
139pub struct ParseCurrencyCodeError(/* private */ ());
140
141impl std::fmt::Display for ParseCurrencyCodeError {
142    fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
143        "invalid currency code".fmt(formatter)
144    }
145}
146
147impl std::error::Error for ParseCurrencyCodeError {
148    fn description(&self) -> &str {
149        "invalid currency code"
150    }
151}