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}