1use std::sync::LazyLock;
2
3use crate::helpers::TigerHashMap;
4use crate::scopes::{ArgumentValue, Scopes};
5
6#[inline]
7pub fn scope_to_scope(name: &str) -> Option<(Scopes, Scopes)> {
8 SCOPE_TO_SCOPE_MAP.get(name).copied()
9}
10
11static SCOPE_TO_SCOPE_MAP: LazyLock<TigerHashMap<&'static str, (Scopes, Scopes)>> =
12 LazyLock::new(|| {
13 let mut hash = TigerHashMap::default();
14 for (from, s, to) in SCOPE_TO_SCOPE.iter().copied() {
15 hash.insert(s, (from, to));
16 }
17 hash
18 });
19
20const SCOPE_TO_SCOPE: &[(Scopes, &str, Scopes)] = &[
24 (Scopes::Accolade, "acclaimed_knight", Scopes::Character),
25 (Scopes::Character, "accolade", Scopes::Accolade),
26 (Scopes::Accolade, "accolade_owner", Scopes::Character),
27 (Scopes::Accolade, "accolade_successor", Scopes::Character),
28 (Scopes::Activity, "activity_host", Scopes::Character),
29 (Scopes::Activity, "activity_location", Scopes::Province),
30 (Scopes::Activity, "activity_type", Scopes::ActivityType),
31 (Scopes::Character, "administrative_contract", Scopes::VassalContract),
32 (Scopes::Character, "administrative_obligation", Scopes::VassalObligationLevel),
33 (Scopes::Army, "army_commander", Scopes::Character),
34 (Scopes::Army, "army_owner", Scopes::Character),
35 (Scopes::Artifact, "artifact_age", Scopes::Value),
36 (Scopes::Artifact, "artifact_owner", Scopes::Character),
37 (Scopes::Character, "assigned_tax_slot", Scopes::TaxSlot),
38 (Scopes::LandedTitle.union(Scopes::Province), "barony", Scopes::LandedTitle),
39 (Scopes::LandedTitle.union(Scopes::Province), "barony_controller", Scopes::Character),
40 (Scopes::Character, "betrothed", Scopes::Character),
41 (Scopes::Culture, "calc_culture_dominant_faith", Scopes::Faith),
42 (Scopes::Culture, "calc_culture_dominant_religion", Scopes::Religion),
43 (Scopes::Character, "capital_barony", Scopes::LandedTitle),
44 (Scopes::Character, "capital_county", Scopes::LandedTitle),
45 (Scopes::Character, "capital_province", Scopes::Province),
46 (Scopes::LandedTitle, "capital_vassal", Scopes::LandedTitle),
47 (Scopes::War, "casus_belli", Scopes::CasusBelli),
48 (Scopes::War.union(Scopes::CasusBelli), "claimant", Scopes::Character),
49 (Scopes::CombatSide, "combat", Scopes::Combat),
50 (Scopes::Combat, "combat_attacker", Scopes::CombatSide),
51 (Scopes::Combat, "combat_defender", Scopes::CombatSide),
52 (Scopes::Combat, "combat_war", Scopes::War),
53 (Scopes::Character, "commanding_army", Scopes::Army),
54 (Scopes::Value, "compare_value", Scopes::Value), (Scopes::Character, "concubinist", Scopes::Character),
56 (Scopes::Character, "confederation", Scopes::Confederation),
57 (Scopes::Confederation, "confederation_type", Scopes::ConfederationType),
58 (Scopes::ProjectContribution, "contributor", Scopes::Character),
59 (Scopes::Character, "council_owner", Scopes::Character),
60 (Scopes::Character, "council_task", Scopes::CouncilTask), (Scopes::CouncilTask, "councillor", Scopes::Character),
62 (Scopes::Character, "councillor_task_target", Scopes::all()), (Scopes::LandedTitle.union(Scopes::Province), "county", Scopes::LandedTitle),
64 (Scopes::LandedTitle.union(Scopes::Province), "county_controller", Scopes::Character),
65 (Scopes::Character, "court_owner", Scopes::Character),
66 (Scopes::Artifact, "creator", Scopes::Character),
67 (
68 Scopes::Character.union(Scopes::LandedTitle).union(Scopes::Province),
69 "culture",
70 Scopes::Culture,
71 ),
72 (Scopes::Culture, "culture_head", Scopes::Character),
73 (Scopes::LandedTitle, "current_heir", Scopes::Character),
74 (Scopes::TravelPlan, "current_location", Scopes::Province),
75 (Scopes::Legend, "current_or_last_legend_owner", Scopes::Character),
76 (Scopes::Character, "current_travel_plan", Scopes::TravelPlan),
77 (Scopes::LandedTitle, "de_facto_liege", Scopes::LandedTitle),
78 (Scopes::LandedTitle, "de_jure_liege", Scopes::LandedTitle),
79 (Scopes::Character, "default_location", Scopes::Province),
80 (Scopes::TravelPlan, "departure_location", Scopes::Province),
81 (Scopes::Character, "designated_diarch", Scopes::Character),
82 (Scopes::Character, "designated_heir", Scopes::Character),
83 (Scopes::Character, "diarch", Scopes::Character),
84 (Scopes::Character, "diarchy_successor", Scopes::Character),
85 (Scopes::Character, "domicile", Scopes::Domicile),
86 (Scopes::Domicile, "domicile_culture", Scopes::Culture),
87 (Scopes::Domicile, "domicile_faith", Scopes::Faith),
88 (Scopes::Domicile, "domicile_location", Scopes::Province),
89 (Scopes::LandedTitle.union(Scopes::Province), "duchy", Scopes::LandedTitle),
90 (Scopes::Dynasty, "dynasty_founder", Scopes::Character),
91 (Scopes::None, "dummy_female", Scopes::Character),
92 (Scopes::None, "dummy_male", Scopes::Character),
93 (Scopes::Dynasty, "dynast", Scopes::Character),
94 (Scopes::Character, "dynasty", Scopes::Dynasty),
95 (Scopes::LandedTitle.union(Scopes::Province), "empire", Scopes::LandedTitle),
96 (Scopes::Character, "employer", Scopes::Character),
97 (Scopes::CombatSide, "enemy_side", Scopes::CombatSide),
98 (Scopes::EpidemicType, "epidemic_trait", Scopes::Trait),
99 (Scopes::Epidemic, "epidemic_type", Scopes::EpidemicType),
100 (Scopes::Faction, "faction_leader", Scopes::Character),
101 (Scopes::Faction, "faction_target", Scopes::Character),
102 (Scopes::Faction, "faction_war", Scopes::War),
103 (
104 Scopes::Character
105 .union(Scopes::LandedTitle)
106 .union(Scopes::Province)
107 .union(Scopes::GreatHolyWar),
108 "faith",
109 Scopes::Faith,
110 ),
111 (Scopes::Character, "father", Scopes::Character),
112 (Scopes::TravelPlan, "final_destination_province", Scopes::Province),
113 (Scopes::Faith, "founder", Scopes::Character),
114 (Scopes::Accolade, "founder_culture", Scopes::Culture),
115 (Scopes::Accolade, "founder_dynasty", Scopes::Dynasty),
116 (Scopes::Accolade, "founder_faith", Scopes::Faith),
117 (Scopes::Accolade, "founder_house", Scopes::DynastyHouse),
118 (Scopes::Character, "ghw_beneficiary", Scopes::Character),
119 (Scopes::GreatHolyWar, "ghw_designated_winner", Scopes::Character),
120 (Scopes::GreatHolyWar, "ghw_target_character", Scopes::Character),
121 (Scopes::GreatHolyWar, "ghw_target_title", Scopes::LandedTitle),
122 (Scopes::GreatHolyWar, "ghw_title_recipient", Scopes::Character),
123 (Scopes::GreatHolyWar, "ghw_war", Scopes::War),
124 (Scopes::GreatHolyWar, "ghw_war_declarer", Scopes::Character),
125 (Scopes::Character, "government_type", Scopes::GovernmentType),
126 (Scopes::Faith, "great_holy_war", Scopes::GreatHolyWar),
127 (Scopes::ProjectContribution, "great_project", Scopes::GreatProject),
128 (Scopes::GreatProject, "great_project_founder", Scopes::Character),
129 (Scopes::GreatProject, "great_project_location", Scopes::Province),
130 (Scopes::GreatProject, "great_project_owner", Scopes::Character),
131 (Scopes::LandedTitle.union(Scopes::Province), "hegemony", Scopes::LandedTitle),
134 (Scopes::LandedTitle, "holder", Scopes::Character),
135 (Scopes::Province, "holding_type", Scopes::HoldingType),
136 (Scopes::HolyOrder, "holy_order_patron", Scopes::Character),
137 (Scopes::Character, "home_court", Scopes::Character),
138 (Scopes::Character, "host", Scopes::Character),
139 (Scopes::Character, "house", Scopes::DynastyHouse),
140 (Scopes::DynastyHouse, "house_aspiration", Scopes::HouseAspiration),
141 (Scopes::DynastyHouse, "house_confederation", Scopes::Confederation),
142 (Scopes::DynastyHouse, "house_dynasty", Scopes::Dynasty),
143 (Scopes::DynastyHouse, "house_founder", Scopes::Character),
144 (Scopes::DynastyHouse, "house_head", Scopes::Character),
145 (Scopes::Character, "imprisoner", Scopes::Character),
146 (Scopes::Accolade, "initial_type", Scopes::AccoladeType),
147 (Scopes::Character, "inspiration", Scopes::Inspiration),
148 (Scopes::Inspiration, "inspiration_owner", Scopes::Character),
149 (Scopes::Inspiration, "inspiration_sponsor", Scopes::Character),
150 (Scopes::Character, "intent_target", Scopes::Character),
151 (Scopes::Character, "involved_activity", Scopes::Activity),
152 (Scopes::Army, "involved_combat_side", Scopes::CombatSide),
153 (Scopes::Character, "joined_faction", Scopes::Faction),
154 (Scopes::Character, "killer", Scopes::Character),
155 (Scopes::LandedTitle.union(Scopes::Province), "kingdom", Scopes::LandedTitle),
156 (Scopes::Character, "knight_army", Scopes::Army),
157 (Scopes::DynastyHouse, "last_house_head", Scopes::Character),
158 (Scopes::Character, "last_played_character", Scopes::Character),
159 (Scopes::HolyOrder, "leader", Scopes::Character),
160 (Scopes::Confederation, "leading_house", Scopes::DynastyHouse),
161 (Scopes::Legend, "legend_owner", Scopes::Character),
162 (Scopes::Legend, "legend_protagonist", Scopes::Character),
163 (Scopes::Legend, "legend_type", Scopes::LegendType),
164 (Scopes::LandedTitle, "lessee", Scopes::Character),
165 (Scopes::LandedTitle, "lessee_title", Scopes::LandedTitle),
166 (Scopes::Character, "liege", Scopes::Character),
167 (Scopes::Character, "liege_or_court_owner", Scopes::Character),
168 (Scopes::Character.union(Scopes::Combat).union(Scopes::Army), "location", Scopes::Province),
169 (Scopes::Character, "matchmaker", Scopes::Character),
170 (Scopes::MercenaryCompany, "mercenary_company_leader", Scopes::Character),
171 (Scopes::CharacterMemory, "memory_owner", Scopes::Character),
172 (Scopes::Character, "mother", Scopes::Character),
173 (Scopes::TravelPlan, "next_destination_province", Scopes::Province),
175 (Scopes::TravelPlan, "next_location", Scopes::Province),
176 (Scopes::None, "no", Scopes::Bool),
177 (Scopes::Character, "obedience_target", Scopes::Character),
178 (Scopes::Epidemic, "outbreak_province", Scopes::Province),
179 (Scopes::Character, "overlord", Scopes::Character),
180 (Scopes::Domicile, "owner", Scopes::Character),
181 (Scopes::SituationParticipantGroup, "participant_group_situation", Scopes::Situation),
182 (Scopes::SituationParticipantGroup, "participant_group_sub_region", Scopes::SituationSubRegion),
183 (Scopes::Character, "player_heir", Scopes::Character),
184 (Scopes::Character, "pregnancy_assumed_father", Scopes::Character),
185 (Scopes::Character, "pregnancy_real_father", Scopes::Character),
186 (Scopes::LandedTitle, "previous_holder", Scopes::Character),
188 (Scopes::Artifact, "previous_owner", Scopes::Character),
189 (Scopes::Artifact, "previous_owner_level_2", Scopes::Character),
190 (Scopes::Artifact, "previous_owner_level_3", Scopes::Character),
191 (Scopes::War.union(Scopes::CasusBelli), "primary_attacker", Scopes::Character),
192 (Scopes::War.union(Scopes::CasusBelli), "primary_defender", Scopes::Character),
193 (Scopes::Character, "primary_heir", Scopes::Character),
194 (Scopes::Character, "primary_partner", Scopes::Character),
195 (Scopes::Character, "primary_spouse", Scopes::Character),
196 (Scopes::Character, "primary_title", Scopes::LandedTitle),
197 (Scopes::Character, "promoted_legend", Scopes::Legend),
198 (Scopes::Province, "province_owner", Scopes::Character),
199 (Scopes::Character, "real_father", Scopes::Character),
200 (Scopes::Character, "real_mother", Scopes::Character),
201 (Scopes::Character, "realm_priest", Scopes::Character),
202 (
203 Scopes::Character
204 .union(Scopes::LandedTitle)
205 .union(Scopes::Province)
206 .union(Scopes::Faith)
207 .union(Scopes::GreatHolyWar),
208 "religion",
209 Scopes::Religion,
210 ),
211 (Scopes::Faith, "religious_head", Scopes::Character),
212 (Scopes::Faith, "religious_head_title", Scopes::LandedTitle),
213 (Scopes::Regiment, "regiment_controller", Scopes::Character),
214 (Scopes::Regiment, "regiment_controlling_title", Scopes::LandedTitle),
215 (Scopes::Regiment, "regiment_owner", Scopes::Character),
216 (Scopes::Regiment, "regiment_owning_title", Scopes::LandedTitle),
217 (Scopes::Regiment, "regiment_station", Scopes::Province),
218 (Scopes::TaskContract, "scheme", Scopes::Scheme),
220 (Scopes::Scheme, "scheme_artifact", Scopes::Artifact),
221 (Scopes::Scheme, "scheme_defender", Scopes::Character),
222 (Scopes::Scheme, "scheme_owner", Scopes::Character),
223 (Scopes::Scheme, "scheme_target_character", Scopes::Character),
224 (Scopes::Scheme, "scheme_target_culture", Scopes::Culture),
225 (Scopes::Scheme, "scheme_target_faith", Scopes::Faith),
226 (Scopes::Scheme, "scheme_target_title", Scopes::LandedTitle),
227 (Scopes::Character, "secret_faith", Scopes::Faith),
228 (Scopes::Secret, "secret_owner", Scopes::Character),
229 (Scopes::Secret, "secret_target", Scopes::Character),
230 (Scopes::CombatSide, "side_commander", Scopes::Character),
231 (Scopes::CombatSide, "side_primary_participant", Scopes::Character),
232 (Scopes::Situation, "situation_center_province", Scopes::Province),
233 (Scopes::Situation, "situation_top_barter_goods", Scopes::Character),
234 (Scopes::Situation, "situation_top_gold", Scopes::Character),
235 (Scopes::Situation, "situation_top_herd", Scopes::Character),
236 (Scopes::Situation, "situation_top_provisions", Scopes::Character),
237 (Scopes::Situation, "situation_top_sub_region", Scopes::SituationSubRegion),
238 (Scopes::AgentSlot, "slot_character", Scopes::Character),
239 (Scopes::Faction, "special_character", Scopes::Character),
240 (Scopes::Faction, "special_title", Scopes::LandedTitle),
241 (Scopes::LandedTitle, "state_faith", Scopes::Faith),
242 (Scopes::StoryCycle, "story_owner", Scopes::Character),
243 (Scopes::VassalObligationLevel, "subject_contract_type", Scopes::VassalContract),
244 (Scopes::Character, "suzerain", Scopes::Character),
245 (Scopes::Scheme, "task_contract", Scopes::TaskContract),
246 (Scopes::TaskContract, "task_contract_destination", Scopes::Province),
247 (Scopes::TaskContract, "task_contract_employer", Scopes::Character),
248 (Scopes::TaskContract, "task_contract_location", Scopes::Province),
249 (Scopes::TaskContract, "task_contract_taker", Scopes::Character),
250 (Scopes::TaskContract, "task_contract_target", Scopes::Character),
251 (Scopes::TaxSlot, "tax_collector", Scopes::Character),
253 (Scopes::Character, "tax_slot", Scopes::TaxSlot),
254 (Scopes::TaxSlot, "tax_slot_liege", Scopes::Character),
255 (Scopes::HolyOrder, "title", Scopes::LandedTitle),
256 (Scopes::LandedTitle, "title_capital_county", Scopes::LandedTitle),
257 (Scopes::LandedTitle, "title_domicile", Scopes::Domicile),
258 (Scopes::LandedTitle, "title_province", Scopes::Province),
259 (Scopes::TravelPlan, "travel_leader", Scopes::Character),
260 (Scopes::TravelPlan, "travel_plan_activity", Scopes::Activity),
261 (Scopes::TravelPlan, "travel_plan_owner", Scopes::Character),
262 (Scopes::Character, "top_liege", Scopes::Character),
263 (Scopes::Character, "top_overlord", Scopes::Character),
264 (Scopes::Character, "top_suzerain", Scopes::Character),
265 (Scopes::VassalObligationLevel, "vassal_contract_type", Scopes::VassalContract),
267 (Scopes::Character, "vassal_tax_collector", Scopes::Character),
268 (Scopes::CasusBelli, "war", Scopes::War),
269 (Scopes::Character, "warden", Scopes::Character),
270 (Scopes::None, "yes", Scopes::Bool),
271];
272
273#[inline]
274pub fn scope_prefix(name: &str) -> Option<(Scopes, Scopes, ArgumentValue)> {
275 SCOPE_PREFIX_MAP.get(name).copied()
276}
277
278static SCOPE_PREFIX_MAP: LazyLock<TigerHashMap<&'static str, (Scopes, Scopes, ArgumentValue)>> =
279 LazyLock::new(|| {
280 let mut hash = TigerHashMap::default();
281 for (from, s, to, argument) in SCOPE_PREFIX.iter().copied() {
282 hash.insert(s, (from, to, argument));
283 }
284 hash
285 });
286
287const SCOPE_PREFIX: &[(Scopes, &str, Scopes, ArgumentValue)] = {
292 use crate::item::Item;
293 use crate::scopes::ArgumentValue::*;
294 &[
295 (Scopes::None, "accolade_type", Scopes::AccoladeType, Item(Item::AccoladeType)),
296 (Scopes::None, "activity_type", Scopes::ActivityType, Item(Item::ActivityType)),
297 (Scopes::Character, "aptitude", Scopes::Value, Item(Item::CourtPosition)),
298 (Scopes::Character, "aptitude_score", Scopes::Value, Item(Item::CourtPosition)),
299 (
300 Scopes::Army,
301 "army_number_maa_regiments_of_base_type",
302 Scopes::Value,
303 Item(Item::MenAtArmsBase),
304 ),
305 (Scopes::Army, "army_number_maa_regiments_of_type", Scopes::Value, Item(Item::MenAtArms)),
306 (Scopes::None, "array_define", Scopes::Value, UncheckedValue),
307 (Scopes::None, "casus_belli_type", Scopes::CasusBelliType, Item(Item::CasusBelli)),
308 (Scopes::None, "character", Scopes::Character, Item(Item::Character)),
309 (
310 Scopes::SituationSubRegion,
311 "character_participant_group",
312 Scopes::SituationParticipantGroup,
313 Scope(Scopes::Character),
314 ),
315 (
316 Scopes::None,
317 "confederation_type",
318 Scopes::ConfederationType,
319 Item(Item::ConfederationType),
320 ),
321 (Scopes::None, "contract_type", Scopes::VassalContract, Item(Item::SubjectContract)),
322 (Scopes::Character, "council_task", Scopes::CouncilTask, Item(Item::CouncilPosition)),
323 (Scopes::Character, "court_position", Scopes::Character, Item(Item::CourtPosition)),
324 (Scopes::None, "court_position_type", Scopes::CourtPositionType, Item(Item::CourtPosition)),
325 (Scopes::Character, "cp", Scopes::Character, Item(Item::CouncilPosition)), (Scopes::None, "culture", Scopes::Culture, Item(Item::Culture)),
327 (Scopes::None, "culture_innovation", Scopes::CultureInnovation, Item(Item::Innovation)),
328 (Scopes::None, "culture_pillar", Scopes::CulturePillar, Item(Item::CulturePillar)),
329 (Scopes::None, "culture_tradition", Scopes::CultureTradition, Item(Item::CultureTradition)),
330 (Scopes::Character, "dead_var", Scopes::all(), UncheckedValue),
331 (Scopes::None, "decision", Scopes::Decision, Item(Item::Decision)),
332 (Scopes::None, "define", Scopes::Value, UncheckedValue),
333 (Scopes::None, "doctrine", Scopes::Doctrine, Item(Item::Doctrine)),
334 (Scopes::None, "dynasty", Scopes::Dynasty, Item(Item::Dynasty)),
335 (Scopes::None, "epidemic_type", Scopes::EpidemicType, Item(Item::EpidemicType)),
336 (Scopes::None, "event_id", Scopes::Flag, Item(Item::Event)),
337 (Scopes::None, "faith", Scopes::Faith, Item(Item::Faith)),
338 (Scopes::None, "flag", Scopes::Flag, UncheckedValue),
339 (Scopes::None, "geographical_region", Scopes::GeographicalRegion, Item(Item::Region)),
340 (Scopes::None, "global_var", Scopes::all(), UncheckedValue),
341 (Scopes::None, "government_type", Scopes::GovernmentType, Item(Item::GovernmentType)),
342 (
343 Scopes::None,
344 "great_project_type",
345 Scopes::GreatProjectType,
346 Item(Item::GreatProjectType),
347 ),
348 (Scopes::None, "holding_type", Scopes::HoldingType, Item(Item::GovernmentType)),
349 (Scopes::None, "house", Scopes::DynastyHouse, Item(Item::House)),
350 (Scopes::None, "house_aspiration", Scopes::HouseAspiration, Item(Item::HouseAspiration)),
351 (
352 Scopes::None,
353 "house_relation_level",
354 Scopes::HouseRelationLevel,
355 Item(Item::HouseRelationLevel),
356 ),
357 (
358 Scopes::None,
359 "house_relation_type",
360 Scopes::HouseRelationType,
361 Item(Item::HouseRelationType),
362 ),
363 (Scopes::Legend, "legend_property", Scopes::all(), Item(Item::LegendProperty)),
364 (Scopes::None, "legend_type", Scopes::LegendType, Item(Item::LegendType)),
365 (Scopes::None, "list_size", Scopes::Value, UncheckedValue),
366 (Scopes::None, "local_var", Scopes::all(), UncheckedValue),
367 (
368 Scopes::Character,
369 "mandate_type_qualification",
370 Scopes::Value,
371 Item(Item::DiarchyMandate),
372 ),
373 (
374 Scopes::Character,
375 "max_number_maa_soldiers_of_base_type",
376 Scopes::Value,
377 Item(Item::MenAtArmsBase),
378 ),
379 (
380 Scopes::Character,
381 "max_number_maa_soldiers_of_type",
382 Scopes::Value,
383 Item(Item::MenAtArms),
384 ),
385 (Scopes::CharacterMemory, "memory_participant", Scopes::Character, UncheckedValue),
386 (
387 Scopes::Culture,
388 "num_discovered_innovations_in_era",
389 Scopes::Value,
390 Item(Item::CultureEra),
391 ),
392 (
393 Scopes::Character,
394 "number_maa_regiments_of_base_type",
395 Scopes::Value,
396 Item(Item::MenAtArmsBase),
397 ),
398 (Scopes::Character, "number_maa_regiments_of_type", Scopes::Value, Item(Item::MenAtArms)),
399 (
400 Scopes::Character,
401 "number_maa_soldiers_of_base_type",
402 Scopes::Value,
403 Item(Item::MenAtArmsBase),
404 ),
405 (Scopes::Character, "number_maa_soldiers_of_type", Scopes::Value, Item(Item::MenAtArms)),
406 (
407 Scopes::VassalContract,
408 "obligation",
409 Scopes::VassalObligationLevel,
410 Item(Item::SubjectContractObligationLevel),
411 ),
412 (Scopes::None, "province", Scopes::Province, Item(Item::Province)),
413 (Scopes::None, "religion", Scopes::Religion, Item(Item::Religion)),
414 (Scopes::None, "scope", Scopes::all(), UncheckedValue),
415 (Scopes::None, "situation", Scopes::Situation, Item(Item::Situation)),
417 (
418 Scopes::Situation,
419 "situation_participant_group",
420 Scopes::SituationParticipantGroup,
421 Item(Item::SituationParticipantGroup),
422 ),
423 (
424 Scopes::Situation,
425 "situation_sub_region",
426 Scopes::SituationSubRegion,
427 Item(Item::SituationSubRegion),
428 ),
429 (
430 Scopes::Situation,
431 "situation_top_participant_group",
432 Scopes::SituationParticipantGroup,
433 Scope(Scopes::Character),
434 ),
435 (Scopes::Activity, "special_guest", Scopes::Character, Item(Item::SpecialGuest)),
436 (Scopes::Character, "story", Scopes::StoryCycle, Removed("1.18", "")),
437 (Scopes::None, "struggle", Scopes::Struggle, Item(Item::Struggle)),
438 (
439 Scopes::SituationSubRegion,
440 "sub_region_participant_group",
441 Scopes::SituationParticipantGroup,
442 Item(Item::SituationParticipantGroup),
443 ),
444 (
445 Scopes::None,
446 "task_contract_type",
447 Scopes::TaskContractType,
448 Item(Item::TaskContractType),
449 ),
450 (Scopes::Character, "tax_collector_aptitude", Scopes::Value, Item(Item::TaxSlotType)),
451 (Scopes::None, "title", Scopes::LandedTitle, Item(Item::Title)),
452 (
453 Scopes::Character,
454 "top_participant_group",
455 Scopes::SituationParticipantGroup,
456 Item(Item::Situation),
457 ),
458 (Scopes::None, "trait", Scopes::Trait, Item(Item::Trait)),
459 (Scopes::all(), "var", Scopes::all(), UncheckedValue),
460 (Scopes::None, "vassal_contract", Scopes::VassalContract, Item(Item::SubjectContract)),
461 (
462 Scopes::Character,
463 "vassal_contract_obligation_level",
464 Scopes::Value,
465 Item(Item::SubjectContract),
466 ),
467 ]
468};
469
470pub fn scope_to_scope_removed(name: &str) -> Option<(&'static str, &'static str)> {
471 for (removed_name, version, explanation) in SCOPE_TO_SCOPE_REMOVED.iter().copied() {
472 if name == removed_name {
473 return Some((version, explanation));
474 }
475 }
476 None
477}
478
479const SCOPE_TO_SCOPE_REMOVED: &[(&str, &str, &str)] = &[
480 ("activity", "1.9", ""),
481 ("activity_owner", "1.9", "replaced by `activity_host`"),
482 ("activity_province", "1.9", "replaced by `activity_location`"),
483 ("scheme_target", "1.13", "replaced by `scheme_target_character`"),
484 ("house_power", "1.19", "replaced by `house_aspiration`"),
485 ("primary_type", "1.19", ""),
486 ("secondary_type", "1.19", ""),
487];