paypal_rust/resources/enums/
currency_code.rs1use 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(());
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}