poke_data/models/
encounter_condition_value.rs

1use 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}