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}