skinport 0.1.1

Skinport API wrapper for Rust
Documentation
use serde::{Deserialize, Deserializer, Serializer};

#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub enum Currency {
    Unknown,
    AUD,
    BRL,
    CAD,
    CHF,
    CNY,
    CZK,
    DKK,
    EUR,
    GBP,
    HRK,
    NOK,
    PLN,
    RUB,
    SEK,
    TRY,
    USD,
}

impl std::fmt::Display for Currency {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        let str_fmt = match self {
            Currency::AUD => "AUD",
            Currency::BRL => "BRL",
            Currency::CAD => "CAD",
            Currency::CHF => "CHF",
            Currency::CNY => "CNY",
            Currency::CZK => "CZK",
            Currency::DKK => "DKK",
            Currency::EUR => "EUR",
            Currency::GBP => "GBP",
            Currency::HRK => "HRK",
            Currency::NOK => "NOK",
            Currency::PLN => "PLN",
            Currency::RUB => "RUB",
            Currency::SEK => "SEK",
            Currency::TRY => "TRY",
            Currency::USD => "USD",
            Self::Unknown => "Unknown",
        };

        write!(f, "{}", str_fmt)
    }
}

impl Currency {
    pub(crate) fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: Serializer,
    {
        serializer.serialize_str(&self.to_string())
    }

    pub(crate) fn deserialize<'de, D>(deserializer: D) -> Result<Self, D::Error>
    where
        D: Deserializer<'de>,
    {
        let currency_str = String::deserialize(deserializer)?;

        let currency = match currency_str.to_uppercase().as_str() {
            "AUD" => Currency::AUD,
            "BRL" => Currency::BRL,
            "CAD" => Currency::CAD,
            "CHF" => Currency::CHF,
            "CNY" => Currency::CNY,
            "CZK" => Currency::CZK,
            "DKK" => Currency::DKK,
            "EUR" => Currency::EUR,
            "GBP" => Currency::GBP,
            "HRK" => Currency::HRK,
            "NOK" => Currency::NOK,
            "PLN" => Currency::PLN,
            "RUB" => Currency::RUB,
            "SEK" => Currency::SEK,
            "TRY" => Currency::TRY,
            "USD" => Currency::USD,
            _ => Self::Unknown,
        };

        Ok(currency)
    }
}