use serde::{Deserialize, Serialize};
use strum::{Display, EnumIter, EnumString, IntoStaticStr};
#[derive(
Debug,
Clone,
Copy,
Serialize,
Deserialize,
EnumString,
Display,
IntoStaticStr,
EnumIter,
PartialEq,
Eq,
Hash,
)]
#[strum(serialize_all = "UPPERCASE")]
#[serde(rename_all = "UPPERCASE")]
pub enum CountryCode {
AD,
AE,
AF,
AL,
AM,
AO,
AR,
AS,
AT,
AU,
AZ,
BA,
BD,
BE,
BF,
BG,
BH,
BI,
BJ,
BN,
BO,
BR,
BS,
BT,
BW,
BY,
BZ,
CA,
CD,
CF,
CG,
CH,
CI,
CL,
CM,
CN,
CO,
CR,
CU,
CV,
CY,
CZ,
DE,
DJ,
DK,
DM,
DO,
DZ,
EC,
EE,
EG,
EH,
ER,
ES,
ET,
FI,
FJ,
FM,
FR,
GA,
GB,
GD,
GE,
GH,
GM,
GN,
GQ,
GR,
GT,
GW,
GY,
HK,
HN,
HR,
HT,
HU,
ID,
IE,
IL,
IN,
IQ,
IR,
IS,
IT,
JM,
JO,
JP,
KE,
KG,
KH,
KI,
KM,
KN,
KR,
KW,
KZ,
LA,
LB,
LC,
LK,
LR,
LS,
LT,
LU,
LV,
LY,
MA,
MC,
MD,
ME,
MG,
MH,
MK,
ML,
MM,
MN,
MO,
MR,
MT,
MU,
MV,
MW,
MX,
MY,
MZ,
NA,
NE,
NG,
NI,
NL,
NO,
NP,
NR,
NU,
NZ,
OM,
PA,
PE,
PG,
PH,
PK,
PL,
PR,
PS,
PT,
PW,
PY,
QA,
RE,
RO,
RS,
RU,
RW,
SA,
SB,
SC,
SD,
SE,
SG,
SI,
SK,
SL,
SM,
SN,
SO,
SR,
SS,
ST,
SV,
SY,
SZ,
TD,
TG,
TH,
TJ,
TL,
TM,
TN,
TO,
TR,
TT,
TV,
TZ,
UA,
UG,
US,
UY,
UZ,
VC,
VE,
VN,
VU,
WS,
YE,
YT,
ZA,
ZM,
ZW,
}
#[test]
fn test_country_code_serialization() {
let json = r#""US""#;
let code: CountryCode = serde_json::from_str(json).expect("Failed to deserialize");
assert_eq!(code, CountryCode::US);
assert_eq!(code.to_string().to_lowercase(), "us");
}