poke_data/models/
contest_effect.rs

1use crate::models::language::LanguageId;
2use crate::types::language::Language;
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6pub type ContestEffectId = u8;
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct ContestEffect {
10    pub id: ContestEffectId,
11    pub appeal: u8,
12    pub jam: u8,
13    pub prose: ContestEffectProse,
14}
15
16#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct ContestEffectProse(HashMap<LanguageId, ContestEffectProseEntry>);
18
19impl ContestEffectProse {
20    pub fn new(localizations: HashMap<LanguageId, ContestEffectProseEntry>) -> Self {
21        Self(localizations)
22    }
23
24    pub fn get_by_language(&self, language: Language) -> Option<&ContestEffectProseEntry> {
25        let language_id = language as LanguageId;
26        if let Some(target) = self.0.get(&language_id) {
27            return Some(target);
28        }
29
30        let default_language_id = Language::default() as LanguageId;
31        if let Some(default) = self.0.get(&default_language_id) {
32            return Some(default);
33        }
34
35        None
36    }
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct ContestEffectProseEntry {
41    pub flavor_text: String,
42    pub effect: String,
43}