pokeapi_client/
species.rs

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}