use super::{
berries::BerryFlavor,
evolution::EvolutionChain,
games::{Generation, Version, VersionGroup},
items::Item,
locations::{LocationArea, PalParkArea},
moves::{Move, MoveBattleStyle, MoveDamageClass, MoveLearnMethod},
resource::{
ApiResource, Description, Effect, FlavorText, GenerationGameIndex, Name, NamedApiResource,
VerboseEffect, VersionEncounterDetail, VersionGameIndex,
},
utility::Language,
};
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct Ability {
pub id: Option<i64>,
pub name: Option<String>,
pub is_main_series: Option<bool>,
pub generation: Option<NamedApiResource<Generation>>,
pub names: Option<Vec<Name>>,
pub effect_entries: Option<Vec<VerboseEffect>>,
pub effect_changes: Option<Vec<AbilityEffectChange>>,
pub flavor_text_entries: Option<Vec<AbilityFlavorText>>,
pub pokemon: Option<Vec<AbilityPokemon>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct AbilityEffectChange {
pub effect_entries: Option<Vec<Effect>>,
pub version_group: Option<NamedApiResource<VersionGroup>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct AbilityFlavorText {
pub flavor_text: Option<String>,
pub language: Option<NamedApiResource<Language>>,
pub version_group: Option<NamedApiResource<VersionGroup>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct AbilityPokemon {
pub is_hidden: Option<bool>,
pub slot: Option<i64>,
pub pokemon: Option<NamedApiResource<Pokemon>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct Characteristic {
pub id: Option<i64>,
pub gene_modulo: Option<i64>,
pub possible_values: Option<Vec<i64>>,
pub descriptions: Option<Vec<Description>>,
pub highest_stat: Option<NamedApiResource<Stat>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct EggGroup {
pub id: Option<i64>,
pub name: Option<String>,
pub names: Option<Vec<Name>>,
pub pokemon_species: Option<Vec<NamedApiResource<PokemonSpecies>>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct Gender {
pub id: Option<i64>,
pub name: Option<String>,
pub pokemon_species_details: Option<Vec<PokemonSpeciesGender>>,
pub required_for_evolution: Option<Vec<NamedApiResource<PokemonSpecies>>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonSpeciesGender {
pub rate: Option<i64>,
pub pokemon_species: Option<NamedApiResource<PokemonSpecies>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct GrowthRate {
pub id: Option<i64>,
pub name: Option<String>,
pub formula: Option<String>,
pub descriptions: Option<Vec<Description>>,
pub levels: Option<Vec<GrowthRateExperienceLevel>>,
pub pokemon_species: Option<Vec<NamedApiResource<PokemonSpecies>>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct GrowthRateExperienceLevel {
pub level: Option<i64>,
pub experience: Option<i64>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct Nature {
pub id: Option<i64>,
pub name: Option<String>,
pub decreased_stat: Option<NamedApiResource<Stat>>,
pub increased_stat: Option<NamedApiResource<Stat>>,
pub hates_flavor: Option<NamedApiResource<BerryFlavor>>,
pub likes_flavor: Option<NamedApiResource<BerryFlavor>>,
pub pokeathlon_stat_changes: Option<Vec<NatureStatChange>>,
pub move_battle_style_preferences: Option<Vec<MoveBattleStylePreference>>,
pub names: Option<Vec<Name>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct NatureStatChange {
pub max_change: Option<i64>,
pub pokeathlon_stat: Option<NamedApiResource<PokeathlonStat>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct MoveBattleStylePreference {
pub low_hp_preference: Option<i64>,
pub high_hp_preference: Option<i64>,
pub move_battle_style: Option<NamedApiResource<MoveBattleStyle>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokeathlonStat {
pub id: Option<i64>,
pub name: Option<String>,
pub names: Option<Vec<Name>>,
pub affecting_natures: Option<NaturePokeathlonStatAffectSets>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct NaturePokeathlonStatAffectSets {
pub increase: Option<Vec<NaturePokeathlonStatAffect>>,
pub decrease: Option<Vec<NaturePokeathlonStatAffect>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct NaturePokeathlonStatAffect {
pub max_change: Option<i64>,
pub nature: Option<NamedApiResource<Nature>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct Pokemon {
pub id: Option<i64>,
pub name: Option<String>,
pub base_experience: Option<i64>,
pub height: Option<i64>,
pub is_default: Option<bool>,
pub order: Option<i64>,
pub weight: Option<i64>,
pub abilities: Option<Vec<PokemonAbility>>,
pub forms: Option<Vec<NamedApiResource<PokemonForm>>>,
pub game_indices: Option<Vec<VersionGameIndex>>,
pub held_items: Option<Vec<PokemonHeldItem>>,
pub location_area_encounters: Option<String>,
pub moves: Option<Vec<PokemonMove>>,
pub past_types: Option<Vec<PokemonTypePast>>,
pub sprites: Option<PokemonSprites>,
pub species: Option<NamedApiResource<PokemonSpecies>>,
pub stats: Option<Vec<PokemonStat>>,
pub types: Option<Vec<PokemonType>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonAbility {
pub is_hidden: Option<bool>,
pub slot: Option<i64>,
pub ability: Option<NamedApiResource<Ability>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonType {
pub slot: Option<i64>,
#[serde(rename = "type")]
pub type_: Option<NamedApiResource<Type>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonTypePast {
pub generation: Option<NamedApiResource<Generation>>,
pub types: Option<Vec<PokemonType>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonHeldItem {
pub item: Option<NamedApiResource<Item>>,
pub version_details: Option<Vec<PokemonHeldItemVersion>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonHeldItemVersion {
pub version: Option<NamedApiResource<Version>>,
pub rarity: Option<i64>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonMove {
#[serde(rename = "move")]
pub move_: Option<NamedApiResource<Move>>,
pub version_group_details: Option<Vec<PokemonMoveVersion>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonMoveVersion {
pub move_learn_method: Option<NamedApiResource<MoveLearnMethod>>,
pub version_group: Option<NamedApiResource<VersionGroup>>,
pub level_learned_at: Option<i64>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonStat {
pub stat: Option<NamedApiResource<Stat>>,
pub effort: Option<i64>,
pub base_stat: Option<i64>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonSprites {
pub front_default: Option<String>,
pub front_shiny: Option<String>,
pub front_female: Option<String>,
pub front_shiny_female: Option<String>,
pub back_default: Option<String>,
pub back_shiny: Option<String>,
pub back_female: Option<String>,
pub back_shiny_female: Option<String>,
pub other: Option<OtherSprites>,
pub versions: Option<VersionsSprites>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct OtherSprites {
pub dream_world: Option<DreamWorldSprites>,
#[serde(rename = "official-artwork")]
pub official_artwork: Option<OfficialArtworkSprites>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct DreamWorldSprites {
pub front_default: Option<String>,
pub front_female: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct OfficialArtworkSprites {
pub front_default: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct VersionsSprites {
#[serde(rename = "generation-i")]
pub generation_i: Option<GenerationISprites>,
#[serde(rename = "generation-i")]
pub generation_ii: Option<GenerationIISprites>,
#[serde(rename = "generation-iii")]
pub generation_iii: Option<GenerationIIISprites>,
#[serde(rename = "generation-iv")]
pub generation_iv: Option<GenerationIVSprites>,
#[serde(rename = "generation-v")]
pub generation_v: Option<GenerationVSprites>,
#[serde(rename = "generation-vi")]
pub generation_vi: Option<GenerationVISprites>,
#[serde(rename = "generation-vii")]
pub generation_vii: Option<GenerationVIISprites>,
#[serde(rename = "generation-viii")]
pub generation_viii: Option<GenerationVIIISprites>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct GenerationISprites {
#[serde(rename = "red-blue")]
pub red_blue: Option<RedBlueSprites>,
pub yellow: Option<YellowSprites>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct RedBlueSprites {
pub back_default: Option<String>,
pub back_gray: Option<String>,
pub front_default: Option<String>,
pub front_gray: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct YellowSprites {
pub back_default: Option<String>,
pub back_gray: Option<String>,
pub front_default: Option<String>,
pub front_gray: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct GenerationIISprites {
pub crystal: Option<CrystalSprites>,
pub gold: Option<GoldSprites>,
pub silver: Option<SilverSprites>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct CrystalSprites {
pub back_default: Option<String>,
pub back_shiny: Option<String>,
pub front_default: Option<String>,
pub front_shiny: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct GoldSprites {
pub back_default: Option<String>,
pub back_shiny: Option<String>,
pub front_default: Option<String>,
pub front_shiny: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct SilverSprites {
pub back_default: Option<String>,
pub back_shiny: Option<String>,
pub front_default: Option<String>,
pub front_shiny: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct GenerationIIISprites {
pub emerald: Option<EmeraldSprites>,
#[serde(rename = "firered-leafgreen")]
pub firered_leafgreen: Option<FireredLeafgreenSprites>,
#[serde(rename = "ruby-sapphire")]
pub ruby_sapphire: Option<RubySapphireSprites>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct EmeraldSprites {
pub front_default: Option<String>,
pub front_shiny: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct FireredLeafgreenSprites {
pub back_default: Option<String>,
pub back_shiny: Option<String>,
pub front_default: Option<String>,
pub front_shiny: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct RubySapphireSprites {
pub back_default: Option<String>,
pub back_shiny: Option<String>,
pub front_default: Option<String>,
pub front_shiny: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct GenerationIVSprites {
#[serde(rename = "diamond-pearl")]
pub diamond_pearl: Option<DiamondPearlSprites>,
pub platinum: Option<PlatinumSprites>,
#[serde(rename = "heartgold-soulsilver")]
pub heartgold_soulsilver: Option<HeartgoldSoulsilverSprites>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct DiamondPearlSprites {
pub back_default: Option<String>,
pub back_female: Option<String>,
pub back_shiny: Option<String>,
pub back_shiny_female: Option<String>,
pub front_default: Option<String>,
pub front_female: Option<String>,
pub front_shiny: Option<String>,
pub front_shiny_female: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PlatinumSprites {
pub back_default: Option<String>,
pub back_female: Option<String>,
pub back_shiny: Option<String>,
pub back_shiny_female: Option<String>,
pub front_default: Option<String>,
pub front_female: Option<String>,
pub front_shiny: Option<String>,
pub front_shiny_female: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct HeartgoldSoulsilverSprites {
pub back_default: Option<String>,
pub back_female: Option<String>,
pub back_shiny: Option<String>,
pub back_shiny_female: Option<String>,
pub front_default: Option<String>,
pub front_female: Option<String>,
pub front_shiny: Option<String>,
pub front_shiny_female: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct GenerationVSprites {
#[serde(rename = "black-white")]
pub black_white: Option<BlackWhiteSprites>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct BlackWhiteSprites {
pub animated: Option<BlackWhiteAnimatedSprites>,
pub back_default: Option<String>,
pub back_female: Option<String>,
pub back_shiny: Option<String>,
pub back_shiny_female: Option<String>,
pub front_default: Option<String>,
pub front_female: Option<String>,
pub front_shiny: Option<String>,
pub front_shiny_female: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct BlackWhiteAnimatedSprites {
pub back_default: Option<String>,
pub back_female: Option<String>,
pub back_shiny: Option<String>,
pub back_shiny_female: Option<String>,
pub front_default: Option<String>,
pub front_female: Option<String>,
pub front_shiny: Option<String>,
pub front_shiny_female: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct GenerationVISprites {
#[serde(rename = "omegaruby-alphasapphire")]
pub omegaruby_alphasapphire: Option<OmegarubyAlphasapphireSprites>,
#[serde(rename = "x-y")]
pub x_y: Option<XYSprites>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct OmegarubyAlphasapphireSprites {
pub front_default: Option<String>,
pub front_female: Option<String>,
pub front_shiny: Option<String>,
pub front_shiny_female: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct XYSprites {
pub front_default: Option<String>,
pub front_female: Option<String>,
pub front_shiny: Option<String>,
pub front_shiny_female: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct GenerationVIISprites {
pub icons: Option<IconsSprites>,
#[serde(rename = "ultra-sun-ultra-moon")]
pub ultrasun_ultramoon: Option<UltrasunUltramoonSprites>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct IconsSprites {
pub front_default: Option<String>,
pub front_female: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct UltrasunUltramoonSprites {
pub front_default: Option<String>,
pub front_female: Option<String>,
pub front_shiny: Option<String>,
pub front_shiny_female: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct GenerationVIIISprites {
pub icons: Option<IconsSprites>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct LocationAreaEncounter {
pub location_area: Option<NamedApiResource<LocationArea>>,
pub version_details: Option<Vec<VersionEncounterDetail>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonColor {
pub id: Option<i64>,
pub name: Option<String>,
pub names: Option<Vec<Name>>,
pub pokemon_species: Option<Vec<NamedApiResource<PokemonSpecies>>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonForm {
pub id: Option<i64>,
pub name: Option<String>,
pub order: Option<i64>,
pub form_order: Option<i64>,
pub is_default: Option<bool>,
pub is_battle_only: Option<bool>,
pub is_mega: Option<bool>,
pub form_name: Option<String>,
pub pokemon: Option<NamedApiResource<Pokemon>>,
pub types: Option<Vec<PokemonFormType>>,
pub sprites: Option<PokemonFormSprites>,
pub version_group: Option<NamedApiResource<VersionGroup>>,
pub names: Option<Vec<Name>>,
pub form_names: Option<Vec<Name>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonFormType {
pub slot: Option<i64>,
#[serde(rename = "type")]
pub type_: Option<NamedApiResource<Type>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonFormSprites {
pub back_default: Option<String>,
pub back_female: Option<String>,
pub back_shiny: Option<String>,
pub back_shiny_female: Option<String>,
pub front_default: Option<String>,
pub front_female: Option<String>,
pub front_shiny: Option<String>,
pub front_shiny_female: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonHabitat {
pub id: Option<i64>,
pub name: Option<String>,
pub names: Option<Vec<Name>>,
pub pokemon_species: Option<Vec<NamedApiResource<PokemonSpecies>>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonShape {
pub id: Option<i64>,
pub name: Option<String>,
pub awesome_names: Option<Vec<AwesomeName>>,
pub names: Option<Vec<Name>>,
pub pokemon_species: Option<Vec<NamedApiResource<PokemonSpecies>>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct AwesomeName {
pub awesome_name: Option<String>,
pub language: Option<NamedApiResource<Language>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonSpecies {
pub id: Option<i64>,
pub name: Option<String>,
pub order: Option<i64>,
pub gender_rate: Option<i64>,
pub capture_rate: Option<i64>,
pub base_hapiness: Option<i64>,
pub is_baby: Option<bool>,
pub is_legendary: Option<bool>,
pub is_mythical: Option<bool>,
pub hatch_counter: Option<i64>,
pub has_gender_differences: Option<bool>,
pub forms_switchable: Option<bool>,
pub growth_rate: Option<NamedApiResource<GrowthRate>>,
pub pokedex_numbers: Option<Vec<PokemonSpeciesDexEntry>>,
pub egg_groups: Option<Vec<NamedApiResource<EggGroup>>>,
pub color: Option<NamedApiResource<PokemonColor>>,
pub shape: Option<NamedApiResource<PokemonShape>>,
pub evolves_from_species: Option<NamedApiResource<PokemonSpecies>>,
pub evolution_chain: Option<ApiResource<EvolutionChain>>,
pub habitat: Option<NamedApiResource<PokemonHabitat>>,
pub generation: Option<NamedApiResource<Generation>>,
pub names: Option<Vec<Name>>,
pub pal_park_encounters: Option<Vec<PalParkEncounterArea>>,
pub flavor_text_entries: Option<Vec<FlavorText>>,
pub form_descriptions: Option<Vec<Description>>,
pub genera: Option<Vec<Genus>>,
pub varieties: Option<Vec<PokemonSpeciesVariety>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct Genus {
pub genus: Option<String>,
pub language: Option<NamedApiResource<Language>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonSpeciesDexEntry {
pub entry_number: Option<i64>,
pub pokedex: Option<NamedApiResource<Language>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PalParkEncounterArea {
pub base_score: Option<i64>,
pub rate: Option<i64>,
pub area: Option<NamedApiResource<PalParkArea>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PokemonSpeciesVariety {
pub is_default: Option<bool>,
pub pokemon: Option<NamedApiResource<Pokemon>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct Stat {
pub id: Option<i64>,
pub name: Option<String>,
pub game_index: Option<i64>,
pub is_battle_only: Option<bool>,
pub affecting_moves: Option<MoveStatAffectSets>,
pub affecting_natures: Option<NatureStatAffectSets>,
pub characteristics: Option<Vec<ApiResource<Characteristic>>>,
pub move_damage_class: Option<NamedApiResource<MoveDamageClass>>,
pub names: Option<Vec<Name>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct MoveStatAffectSets {
pub increase: Option<Vec<MoveStatAffect>>,
pub decrease: Option<Vec<MoveStatAffect>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct MoveStatAffect {
pub change: Option<i64>,
#[serde(rename = "move")]
pub move_: Option<NamedApiResource<Move>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct NatureStatAffectSets {
pub increase: Option<Vec<NamedApiResource<Nature>>>,
pub decrease: Option<Vec<NamedApiResource<Nature>>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct Type {
pub id: Option<i64>,
pub name: Option<String>,
pub damage_relations: Option<TypeRelations>,
pub past_damage_relations: Option<Vec<TypeRelationsPast>>,
pub game_indices: Option<Vec<GenerationGameIndex>>,
pub generation: Option<NamedApiResource<Generation>>,
pub move_damage_class: Option<NamedApiResource<MoveDamageClass>>,
pub names: Option<Vec<Name>>,
pub pokemon: Option<Vec<TypePokemon>>,
pub moves: Option<Vec<NamedApiResource<Move>>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct TypePokemon {
pub slot: Option<i64>,
pub pokemon: Option<NamedApiResource<Pokemon>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct TypeRelations {
pub no_damage_to: Option<Vec<NamedApiResource<Type>>>,
pub half_damage_to: Option<Vec<NamedApiResource<Type>>>,
pub double_damage_to: Option<Vec<NamedApiResource<Type>>>,
pub no_damage_from: Option<Vec<NamedApiResource<Type>>>,
pub half_damage_from: Option<Vec<NamedApiResource<Type>>>,
pub double_damage_from: Option<Vec<NamedApiResource<Type>>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct TypeRelationsPast {
pub generation: Option<NamedApiResource<Generation>>,
pub damage_relations: Option<TypeRelations>,
}