1use pokeapi_macro::pokeapi_struct;
4
5use crate::{
6 APIResource, AbilityEffectChange, ContestEffect, ContestType, Description, Generation,
7 Language, MachineVersionDetail, Name, NamedAPIResource, Stat, SuperContestEffect, Type,
8 VerboseEffect, VersionGroup,
9};
10
11#[pokeapi_struct]
12struct Move {
13 id: i32,
14 name: String,
15 accuracy: i32,
16 effect_chance: i32,
17 pp: i32,
18 priority: i32,
19 power: i32,
20 contest_combos: ContestComboSets,
21 contest_type: NamedAPIResource<ContestType>,
22 contest_effect: APIResource<ContestEffect>,
23 damage_class: NamedAPIResource<MoveDamageClass>,
24 effect_entries: Vec<VerboseEffect>,
25 effect_changes: Vec<AbilityEffectChange>,
26 flavor_text_entries: Vec<MoveFlavorText>,
27 generation: NamedAPIResource<Generation>,
28 machines: Vec<MachineVersionDetail>,
29 meta: MoveMetaData,
30 names: Vec<Name>,
31 past_values: Vec<PastMoveStatValues>,
32 stat_changes: Vec<MoveStatChange>,
33 super_contest_effect: APIResource<SuperContestEffect>,
34 target: NamedAPIResource<MoveTarget>,
35 #[serde(rename = "type")]
36 type_: NamedAPIResource<Type>,
37}
38
39#[pokeapi_struct]
40struct ContestComboSets {
41 normal: ContestComboDetail,
42 #[serde(rename = "super")]
43 super_: ContestComboDetail,
44}
45
46#[pokeapi_struct]
47struct ContestComboDetail {
48 use_before: Vec<NamedAPIResource<Move>>,
49 use_after: Vec<NamedAPIResource<Move>>,
50}
51
52#[pokeapi_struct]
53struct MoveFlavorText {
54 flavor_text: String,
55 language: NamedAPIResource<Language>,
56 version_group: NamedAPIResource<VersionGroup>,
57}
58
59#[pokeapi_struct]
60struct MoveMetaData {
61 ailment: NamedAPIResource<MoveAilment>,
62 category: NamedAPIResource<MoveCategory>,
63 min_hits: i32,
64 max_hits: i32,
65 min_turns: i32,
66 max_turns: i32,
67 drain: i32,
68 healing: i32,
69 crit_rate: i32,
70 ailment_chance: i32,
71 flinch_chance: i32,
72 stat_chance: i32,
73}
74
75#[pokeapi_struct]
76struct MoveStatChange {
77 change: i32,
78 stat: NamedAPIResource<Stat>,
79}
80
81#[pokeapi_struct]
82struct PastMoveStatValues {
83 accuracy: i32,
84 effect_chance: i32,
85 power: i32,
86 pp: i32,
87 effect_entries: Vec<VerboseEffect>,
88 #[serde(rename = "type")]
89 type_: NamedAPIResource<Type>,
90 version_group: NamedAPIResource<VersionGroup>,
91}
92
93#[pokeapi_struct]
94struct MoveAilment {
95 id: i32,
96 name: String,
97 moves: Vec<NamedAPIResource<Move>>,
98 names: Vec<Name>,
99}
100
101#[pokeapi_struct]
102struct MoveBattleStyle {
103 id: i32,
104 name: String,
105 names: Vec<Name>,
106}
107
108#[pokeapi_struct]
109struct MoveCategory {
110 id: i32,
111 name: String,
112 moves: Vec<NamedAPIResource<Move>>,
113 descriptions: Vec<Description>,
114}
115
116#[pokeapi_struct]
117struct MoveDamageClass {
118 id: i32,
119 name: String,
120 descriptions: Vec<Description>,
121 moves: Vec<NamedAPIResource<Move>>,
122 names: Vec<Name>,
123}
124
125#[pokeapi_struct]
126struct MoveLearnMethod {
127 id: i32,
128 name: String,
129 descriptions: Vec<Description>,
130 names: Vec<Name>,
131 version_groups: Vec<NamedAPIResource<VersionGroup>>,
132}
133
134#[pokeapi_struct]
135struct MoveTarget {
136 id: i32,
137 name: String,
138 descriptions: Vec<Description>,
139 moves: Vec<NamedAPIResource<Move>>,
140 names: Vec<Name>,
141}