valorant_api 0.3.14

A library for interacting with the ingame Valorant-API.
Documentation
use std::fmt::Display;
use std::str::FromStr;

use serde::{Deserialize, Serialize};
use uuid::Uuid;

#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Clone)]
#[serde(rename_all = "PascalCase")]
pub enum KillFinishingDamageType {
    Melee,
    Weapon,
    Ability,
    Bomb,
    Fall,
}

impl Display for KillFinishingDamageType {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            Self::Melee => write!(f, "Melee"),
            Self::Weapon => write!(f, "Weapon"),
            Self::Ability => write!(f, "Ability"),
            Self::Bomb => write!(f, "Bomb"),
            Self::Fall => write!(f, "Fall"),
        }
    }
}

impl FromStr for KillFinishingDamageType {
    type Err = ();

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            "Melee" => Ok(Self::Melee),
            "Weapon" => Ok(Self::Weapon),
            "Ability" => Ok(Self::Ability),
            "Bomb" => Ok(Self::Bomb),
            "Fall" => Ok(Self::Fall),
            _ => Err(()),
        }
    }
}

#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Clone)]
#[serde(rename_all = "PascalCase")]
pub enum KillFinishingDamageItemAbility {
    Ability1,
    Ability2,
    GrenadeAbility,
    Ultimate,
}

impl Display for KillFinishingDamageItemAbility {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            Self::Ability1 => write!(f, "Ability1"),
            Self::Ability2 => write!(f, "Ability2"),
            Self::GrenadeAbility => write!(f, "GrenadeAbility"),
            Self::Ultimate => write!(f, "Ultimate"),
        }
    }
}

impl FromStr for KillFinishingDamageItemAbility {
    type Err = ();

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            "Ability1" => Ok(Self::Ability1),
            "Ability2" => Ok(Self::Ability2),
            "GrenadeAbility" => Ok(Self::GrenadeAbility),
            "Ultimate" => Ok(Self::Ultimate),
            _ => Err(()),
        }
    }
}

#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Clone)]
#[serde(untagged)]
pub enum KillFinishingDamageItem {
    Weapon(Uuid),
    Ability(KillFinishingDamageItemAbility),
    Unknown(String),
}

impl Display for KillFinishingDamageItem {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            Self::Weapon(uuid) => write!(f, "{uuid}"),
            Self::Ability(ability) => write!(f, "{ability}"),
            Self::Unknown(s) => write!(f, "{s}"),
        }
    }
}

impl FromStr for KillFinishingDamageItem {
    type Err = ();

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        if let Ok(uuid) = Uuid::parse_str(s) {
            return Ok(Self::Weapon(uuid));
        }

        match s {
            "Ability1" => Ok(Self::Ability(KillFinishingDamageItemAbility::Ability1)),
            "Ability2" => Ok(Self::Ability(KillFinishingDamageItemAbility::Ability2)),
            "GrenadeAbility" => Ok(Self::Ability(
                KillFinishingDamageItemAbility::GrenadeAbility,
            )),
            "Ultimate" => Ok(Self::Ability(KillFinishingDamageItemAbility::Ultimate)),
            _ => Ok(Self::Unknown(s.to_string())),
        }
    }
}