use super::{
contests::{ContestEffect, ContestType, SuperContestEffect},
games::{Generation, VersionGroup},
pokemon::{AbilityEffectChange, Pokemon, Stat, Type},
resource::{
ApiResource, Description, MachineVersionDetail, Name, NamedApiResource, VerboseEffect,
},
utility::Language,
};
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct Move {
pub id: Option<i64>,
pub name: Option<String>,
pub accuracy: Option<i64>,
pub effect_chance: Option<i64>,
pub pp: Option<i64>,
pub priority: Option<i64>,
pub power: Option<i64>,
pub contest_combos: Option<ContestComboSets>,
pub contest_type: Option<NamedApiResource<ContestType>>,
pub contest_effect: Option<ApiResource<ContestEffect>>,
pub damage_class: Option<NamedApiResource<MoveDamageClass>>,
pub effect_entries: Option<Vec<VerboseEffect>>,
pub effect_changes: Option<Vec<AbilityEffectChange>>,
pub learned_by_pokemon: Option<Vec<NamedApiResource<Pokemon>>>,
pub flavor_text_entries: Option<Vec<MoveFlavorText>>,
pub generation: Option<NamedApiResource<Generation>>,
pub machines: Option<Vec<MachineVersionDetail>>,
pub meta: Option<MoveMetaData>,
pub names: Option<Vec<Name>>,
pub past_values: Option<Vec<PastMoveStatValues>>,
pub stat_changes: Option<Vec<MoveStatChange>>,
pub super_contest_effect: Option<ApiResource<SuperContestEffect>>,
pub target: Option<NamedApiResource<MoveTarget>>,
#[serde(rename = "type")]
pub type_: Option<NamedApiResource<Type>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct ContestComboSets {
pub normal: Option<ContestComboDetail>,
#[serde(rename = "super")]
pub super_: Option<ContestComboDetail>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct ContestComboDetail {
pub use_before: Option<Vec<NamedApiResource<Move>>>,
pub use_after: Option<Vec<NamedApiResource<Move>>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct MoveFlavorText {
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 MoveMetaData {
pub ailment: Option<NamedApiResource<MoveAilment>>,
pub category: Option<NamedApiResource<MoveCategory>>,
pub min_hits: Option<i64>,
pub max_hits: Option<i64>,
pub min_turns: Option<i64>,
pub max_turns: Option<i64>,
pub drain: Option<i64>,
pub healing: Option<i64>,
pub crit_rate: Option<i64>,
pub ailment_chance: Option<i64>,
pub flinch_chance: Option<i64>,
pub stat_chance: Option<i64>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct MoveStatChange {
pub change: Option<i64>,
pub stat: Option<NamedApiResource<Stat>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct PastMoveStatValues {
pub accuracy: Option<i64>,
pub effect_chance: Option<i64>,
pub power: Option<i64>,
pub pp: Option<i64>,
pub effect_entries: Option<Vec<VerboseEffect>>,
#[serde(rename = "type")]
pub type_: Option<NamedApiResource<Type>>,
pub version_group: Option<NamedApiResource<VersionGroup>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct MoveAilment {
pub id: Option<i64>,
pub name: Option<String>,
pub moves: Option<Vec<NamedApiResource<Move>>>,
pub names: Option<Vec<Name>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct MoveBattleStyle {
pub id: Option<i64>,
pub name: Option<String>,
pub names: Option<Vec<Name>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct MoveCategory {
pub id: Option<i64>,
pub name: Option<String>,
pub moves: Option<Vec<NamedApiResource<Move>>>,
pub descriptions: Option<Vec<Description>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct MoveDamageClass {
pub id: Option<i64>,
pub name: Option<String>,
pub descriptions: Option<Vec<Description>>,
pub moves: Option<Vec<NamedApiResource<Move>>>,
pub names: Option<Vec<Name>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct MoveLearnMethod {
pub id: Option<i64>,
pub name: Option<String>,
pub descriptions: Option<Vec<Description>>,
pub names: Option<Vec<Name>>,
pub version_groups: Option<Vec<NamedApiResource<VersionGroup>>>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, serde::Deserialize)]
pub struct MoveTarget {
pub id: Option<i64>,
pub name: Option<String>,
pub descriptions: Option<Vec<Description>>,
pub moves: Option<Vec<Name>>,
pub names: Option<Vec<Name>>,
}