poke_data/models/
contest_effect.rs1use 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}