pokerust 0.3.1

Pokeapi wrapper
Documentation
use serde::{Deserialize, Serialize};

use super::berries::BerryFlavor;
use super::moves::Move;
use super::resource_lists::{APIResourceList, NamedAPIResourceList};
use super::utility::{Effect, FlavorText, Language, NamedAPIResource};

use crate::{impl_id, impl_id_and_named, set_endpoint};

/// <https://pokeapi.co/docs/v2#contests-section>
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "deny_unknown_fields", serde(deny_unknown_fields))]
#[non_exhaustive]
pub struct ContestType {
    pub id: i16,
    pub name: String,
    pub berry_flavor: NamedAPIResource<BerryFlavor>,
    pub names: Vec<ContestName>,
}

/// <https://pokeapi.co/docs/v2#contestname>
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "deny_unknown_fields", serde(deny_unknown_fields))]
#[non_exhaustive]
pub struct ContestName {
    pub name: String,
    pub color: String,
    pub language: NamedAPIResource<Language>,
}

/// <https://pokeapi.co/docs/v2#contest-effects>
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "deny_unknown_fields", serde(deny_unknown_fields))]
#[non_exhaustive]
pub struct ContestEffect {
    pub id: i16,
    pub appeal: u8,
    pub jam: u8,
    pub effect_entries: Vec<Effect>,
    pub flavor_text_entries: Vec<FlavorText>,
}

/// <https://pokeapi.co/docs/v2#super-contest-effects>
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "deny_unknown_fields", serde(deny_unknown_fields))]
#[non_exhaustive]
pub struct SuperContestEffect {
    pub id: i16,
    pub appeal: u8,
    pub flavor_text_entries: Vec<FlavorText>,
    pub moves: Vec<NamedAPIResource<Move>>,
}

set_endpoint!(ContestEffect, APIResourceList, "contest-effect");
set_endpoint!(SuperContestEffect, APIResourceList, "super-contest-effect");
set_endpoint!(ContestType, NamedAPIResourceList, "contest-type");

impl_id!(ContestEffect);
impl_id!(SuperContestEffect);
impl_id_and_named!(ContestType);