poke_data/
data.rs

1use crate::collections::abilities::AbilitiesCollection;
2use crate::collections::berries::BerriesCollection;
3use crate::collections::egg_groups::EggGroupsCollection;
4use crate::collections::generations::GenerationsCollection;
5use crate::collections::item_categories::ItemCategoriesCollection;
6use crate::collections::items::ItemsCollection;
7use crate::collections::location_areas::LocationAreasCollection;
8use crate::collections::locations::LocationsCollection;
9use crate::collections::moves::MovesCollection;
10use crate::collections::pokedexes::PokedexCollection;
11use crate::collections::pokemon::PokemonCollection;
12use crate::collections::pokemon_type_efficacies::PokemonTypeEfficaciesCollection;
13use crate::collections::regions::RegionsCollection;
14use crate::collections::species::SpeciesCollection;
15use crate::collections::versions::VersionsCollection;
16use crate::INCLUDED_DATA;
17use std::path::Path;
18use unlinked::UnlinkedPokeData;
19
20pub mod link_context;
21pub mod linkable;
22pub mod unlinked;
23
24pub struct PokeData {
25    pub abilities: AbilitiesCollection,
26    pub berries: BerriesCollection,
27    pub egg_groups: EggGroupsCollection,
28    pub generations: GenerationsCollection,
29    pub items: ItemsCollection,
30    pub item_categories: ItemCategoriesCollection,
31    pub locations: LocationsCollection,
32    pub location_areas: LocationAreasCollection,
33    pub moves: MovesCollection,
34    pub pokedexes: PokedexCollection,
35    pub pokemon: PokemonCollection,
36    pub regions: RegionsCollection,
37    pub species: SpeciesCollection,
38    pub versions: VersionsCollection,
39    pub pokemon_type_efficacies: PokemonTypeEfficaciesCollection,
40}
41
42impl PokeData {
43    pub fn load() -> Result<Self, Box<dyn std::error::Error>> {
44        let decompressed_bytes = zstd::decode_all(INCLUDED_DATA)?;
45        PokeData::load_from_bytes(&decompressed_bytes)
46    }
47
48    pub fn load_from_path(compressed_data_path: &Path) -> Result<Self, Box<dyn std::error::Error>> {
49        let unlinked_data = UnlinkedPokeData::load(compressed_data_path)?;
50        Ok(unlinked_data.initialize())
51    }
52
53    pub fn load_from_bytes(bytes: &[u8]) -> Result<Self, Box<dyn std::error::Error>> {
54        let unlinked_data = UnlinkedPokeData::from_bytes(bytes)?;
55        Ok(unlinked_data.initialize())
56    }
57}