poke_data/data/
link_context.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::data::PokeData;
17use crate::data_structures::entity_collection::EntityCollection;
18use crate::models::ability::{Ability, AbilityId};
19use crate::models::berry::{Berry, BerryId};
20use crate::models::berry_firmness::{BerryFirmness, BerryFirmnessId};
21use crate::models::berry_flavor::{BerryFlavor, BerryFlavorId};
22use crate::models::color::{Color, ColorId};
23use crate::models::contest_effect::{ContestEffect, ContestEffectId};
24use crate::models::contest_type::{ContestType, ContestTypeId};
25use crate::models::damage_class::{DamageClass, DamageClassId};
26use crate::models::egg_group::{EggGroup, EggGroupId};
27use crate::models::encounter::{Encounter, EncounterId};
28use crate::models::encounter_condition::{EncounterCondition, EncounterConditionId};
29use crate::models::encounter_condition_value::{
30    EncounterConditionValue, EncounterConditionValueId,
31};
32use crate::models::encounter_method::{EncounterMethod, EncounterMethodId};
33use crate::models::evolution_trigger::{EvolutionTrigger, EvolutionTriggerId};
34use crate::models::generation::{Generation, GenerationId};
35use crate::models::growth_rate::{GrowthRate, GrowthRateId};
36use crate::models::habitat::{Habitat, HabitatId};
37use crate::models::item::{Item, ItemId};
38use crate::models::item_category::{ItemCategory, ItemCategoryId};
39use crate::models::item_flag::{ItemFlag, ItemFlagId};
40use crate::models::item_fling_effect::{ItemFlingEffect, ItemFlingEffectId};
41use crate::models::item_pocket::{ItemPocket, ItemPocketId};
42use crate::models::location::{Location, LocationId};
43use crate::models::location_area::{LocationArea, LocationAreaId};
44use crate::models::pokedex::{Pokedex, PokedexId};
45use crate::models::pokemon::{Pokemon, PokemonId};
46use crate::models::pokemon_form::{PokemonForm, PokemonFormId};
47use crate::models::pokemon_move::{PokemonMove, PokemonMoveId};
48use crate::models::pokemon_move_ailment::{PokemonMoveAilment, PokemonMoveAilmentId};
49use crate::models::pokemon_move_category::{PokemonMoveCategory, PokemonMoveCategoryId};
50use crate::models::pokemon_move_effect::{PokemonMoveEffect, PokemonMoveEffectId};
51use crate::models::pokemon_move_flag::{PokemonMoveFlag, PokemonMoveFlagId};
52use crate::models::pokemon_move_method::{PokemonMoveMethod, PokemonMoveMethodId};
53use crate::models::pokemon_move_target::{PokemonMoveTarget, PokemonMoveTargetId};
54use crate::models::pokemon_type::{PokemonType, PokemonTypeId};
55use crate::models::region::{Region, RegionId};
56use crate::models::shape::{Shape, ShapeId};
57use crate::models::species::{Species, SpeciesId};
58use crate::models::super_contest_effect::{SuperContestEffect, SuperContestEffectId};
59use crate::models::version::{Version, VersionId};
60use crate::models::version_group::{VersionGroup, VersionGroupId};
61use std::collections::HashMap;
62use std::sync::Arc;
63
64#[derive(Default)]
65pub struct LinkContext {
66    pub abilities: HashMap<AbilityId, Arc<Ability>>,
67    pub berries: HashMap<BerryId, Arc<Berry>>,
68    pub berry_firmnesses: HashMap<BerryFirmnessId, Arc<BerryFirmness>>,
69    pub berry_flavors: HashMap<BerryFlavorId, Arc<BerryFlavor>>,
70    pub colors: HashMap<ColorId, Arc<Color>>,
71    pub contest_effects: HashMap<ContestEffectId, Arc<ContestEffect>>,
72    pub contest_types: HashMap<ContestTypeId, Arc<ContestType>>,
73    pub damage_classes: HashMap<DamageClassId, Arc<DamageClass>>,
74    pub encounters: HashMap<EncounterId, Arc<Encounter>>,
75    pub encounter_conditions: HashMap<EncounterConditionId, Arc<EncounterCondition>>,
76    pub encounter_condition_values:
77        HashMap<EncounterConditionValueId, Arc<EncounterConditionValue>>,
78    pub encounter_methods: HashMap<EncounterMethodId, Arc<EncounterMethod>>,
79    pub egg_groups: HashMap<EggGroupId, Arc<EggGroup>>,
80    pub evolution_triggers: HashMap<EvolutionTriggerId, Arc<EvolutionTrigger>>,
81    pub generations: HashMap<GenerationId, Arc<Generation>>,
82    pub growth_rates: HashMap<GrowthRateId, Arc<GrowthRate>>,
83    pub habitats: HashMap<HabitatId, Arc<Habitat>>,
84    pub items: HashMap<ItemId, Arc<Item>>,
85    pub item_categories: HashMap<ItemCategoryId, Arc<ItemCategory>>,
86    pub item_flags: HashMap<ItemFlagId, Arc<ItemFlag>>,
87    pub item_fling_effects: HashMap<ItemFlingEffectId, Arc<ItemFlingEffect>>,
88    pub item_pockets: HashMap<ItemPocketId, Arc<ItemPocket>>,
89    pub locations: HashMap<LocationId, Arc<Location>>,
90    pub location_areas: HashMap<LocationAreaId, Arc<LocationArea>>,
91    pub moves: HashMap<PokemonMoveId, Arc<PokemonMove>>,
92    pub move_ailments: HashMap<PokemonMoveAilmentId, Arc<PokemonMoveAilment>>,
93    pub move_categories: HashMap<PokemonMoveCategoryId, Arc<PokemonMoveCategory>>,
94    pub move_effects: HashMap<PokemonMoveEffectId, Arc<PokemonMoveEffect>>,
95    pub move_flags: HashMap<PokemonMoveFlagId, Arc<PokemonMoveFlag>>,
96    pub move_methods: HashMap<PokemonMoveMethodId, Arc<PokemonMoveMethod>>,
97    pub move_targets: HashMap<PokemonMoveTargetId, Arc<PokemonMoveTarget>>,
98    pub pokedexes: HashMap<PokedexId, Arc<Pokedex>>,
99    pub pokemon: HashMap<PokemonId, Arc<Pokemon>>,
100    pub pokemon_forms: HashMap<PokemonFormId, Arc<PokemonForm>>,
101    pub pokemon_types: HashMap<PokemonTypeId, Arc<PokemonType>>,
102    pub pokemon_type_efficacies: PokemonTypeEfficaciesCollection,
103    pub regions: HashMap<RegionId, Arc<Region>>,
104    pub shapes: HashMap<ShapeId, Arc<Shape>>,
105    pub species: HashMap<SpeciesId, Arc<Species>>,
106    pub super_contest_effects: HashMap<SuperContestEffectId, Arc<SuperContestEffect>>,
107    pub versions: HashMap<VersionId, Arc<Version>>,
108    pub version_groups: HashMap<VersionGroupId, Arc<VersionGroup>>,
109}
110
111impl LinkContext {
112    pub fn build_data(self) -> PokeData {
113        PokeData {
114            abilities: AbilitiesCollection::new(&self),
115            berries: BerriesCollection::new(&self),
116            egg_groups: EggGroupsCollection::new(&self),
117            generations: GenerationsCollection::new(&self),
118            items: ItemsCollection::new(&self),
119            item_categories: ItemCategoriesCollection::new(&self),
120            locations: LocationsCollection::new(&self),
121            location_areas: LocationAreasCollection::new(&self),
122            moves: MovesCollection::new(&self),
123            pokedexes: PokedexCollection::new(&self),
124            pokemon: PokemonCollection::new(&self),
125            regions: RegionsCollection::new(&self),
126            species: SpeciesCollection::new(&self),
127            versions: VersionsCollection::new(&self),
128            pokemon_type_efficacies: self.pokemon_type_efficacies,
129        }
130    }
131}