1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4impl SpeciesResponse {
5 pub fn get_name<'a>(&'a self, language: &'static str) -> Option<&'a str> {
6 self.names
7 .iter()
8 .find(|n| n.language.name == language)
9 .map(|n| n.name.as_str())
10 }
11
12 pub fn get_description(&self, language: &'static str) -> Option<String> {
13 self.flavor_text_entries
14 .iter()
15 .find(|t| t.language.name == language)
16 .map(|t| {
17 t.flavor_text
18 .replace("\n.", ".")
19 .replace("\n", " ")
20 .replace(".\u{000c}", ". ")
21 .replace('\u{000c}', "")
22 })
23 }
24}
25
26#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
27#[serde(rename_all = "camelCase")]
28pub struct SpeciesResponse {
29 #[serde(rename = "base_happiness")]
30 pub base_happiness: Option<i64>,
31 #[serde(rename = "capture_rate")]
32 pub capture_rate: i64,
33 pub color: super::Resource,
34 #[serde(rename = "egg_groups")]
35 pub egg_groups: Vec<super::Resource>,
36 #[serde(rename = "evolution_chain")]
37 pub evolution_chain: EvolutionChain,
38 #[serde(rename = "evolves_from_species")]
39 pub evolves_from_species: Value,
40 #[serde(rename = "flavor_text_entries")]
41 pub flavor_text_entries: Vec<FlavorTextEntry>,
42 #[serde(rename = "form_descriptions")]
43 pub form_descriptions: Vec<Value>,
44 #[serde(rename = "forms_switchable")]
45 pub forms_switchable: bool,
46 #[serde(rename = "gender_rate")]
47 pub gender_rate: i64,
48 pub genera: Vec<Genera>,
49 pub generation: super::Resource,
50 #[serde(rename = "growth_rate")]
51 pub growth_rate: super::Resource,
52 pub habitat: Option<super::Resource>,
53 #[serde(rename = "has_gender_differences")]
54 pub has_gender_differences: bool,
55 #[serde(rename = "hatch_counter")]
56 pub hatch_counter: Option<i64>,
57 pub id: i64,
58 #[serde(rename = "is_baby")]
59 pub is_baby: bool,
60 #[serde(rename = "is_legendary")]
61 pub is_legendary: bool,
62 #[serde(rename = "is_mythical")]
63 pub is_mythical: bool,
64 pub name: String,
65 pub names: Vec<Name>,
66 pub order: i64,
67 #[serde(rename = "pal_park_encounters")]
68 pub pal_park_encounters: Vec<PalParkEncounter>,
69 #[serde(rename = "pokedex_numbers")]
70 pub pokedex_numbers: Vec<PokedexNumber>,
71 pub shape: Option<super::Resource>,
72 pub varieties: Vec<Variety>,
73}
74
75#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
76#[serde(rename_all = "camelCase")]
77pub struct EvolutionChain {
78 pub url: String,
79}
80
81#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
82#[serde(rename_all = "camelCase")]
83pub struct FlavorTextEntry {
84 #[serde(rename = "flavor_text")]
85 pub flavor_text: String,
86 pub language: super::Resource,
87 pub version: super::Resource,
88}
89
90#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
91#[serde(rename_all = "camelCase")]
92pub struct Genera {
93 pub genus: String,
94 pub language: super::Resource,
95}
96
97#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
98#[serde(rename_all = "camelCase")]
99pub struct Name {
100 pub language: super::Resource,
101 pub name: String,
102}
103
104#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
105#[serde(rename_all = "camelCase")]
106pub struct PalParkEncounter {
107 pub area: super::Resource,
108 #[serde(rename = "base_score")]
109 pub base_score: i64,
110 pub rate: i64,
111}
112
113#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
114#[serde(rename_all = "camelCase")]
115pub struct PokedexNumber {
116 #[serde(rename = "entry_number")]
117 pub entry_number: i64,
118 pub pokedex: super::Resource,
119}
120
121#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
122#[serde(rename_all = "camelCase")]
123pub struct Variety {
124 #[serde(rename = "is_default")]
125 pub is_default: bool,
126 pub pokemon: super::Resource,
127}