poke_data/models/
encounter_condition_value.rs1use crate::data::link_context::LinkContext;
2use crate::data::linkable::Linkable;
3use crate::models::encounter_condition::{EncounterCondition, EncounterConditionId};
4use crate::models::localized_names::LocalizedStrings;
5use serde::{Deserialize, Serialize};
6use std::sync::Arc;
7
8pub type EncounterConditionValueId = u16;
9
10#[derive(Debug)]
11pub struct EncounterConditionValue {
12 pub id: EncounterConditionValueId,
13 pub identifier: String,
14 pub names: LocalizedStrings,
15 pub is_default: bool,
16 pub encounter_condition: Arc<EncounterCondition>,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct UnlinkedEncounterConditionValue {
21 pub id: EncounterConditionValueId,
22 pub identifier: String,
23 pub names: LocalizedStrings,
24 pub is_default: bool,
25 pub encounter_condition_id: EncounterConditionId,
26}
27
28impl Linkable for UnlinkedEncounterConditionValue {
29 type Linked = Arc<EncounterConditionValue>;
30
31 fn link(&self, context: &LinkContext) -> Self::Linked {
32 let encounter_condition = context
33 .encounter_conditions
34 .get(&self.encounter_condition_id)
35 .unwrap_or_else(|| {
36 panic!(
37 "No encounter condition '{}' found for encounter condition value '{}'",
38 self.encounter_condition_id, self.id
39 )
40 })
41 .clone();
42
43 let encounter_condition_value = EncounterConditionValue {
44 id: self.id,
45 identifier: self.identifier.clone(),
46 names: self.names.clone(),
47 is_default: self.is_default,
48 encounter_condition,
49 };
50
51 Arc::new(encounter_condition_value)
52 }
53}