poke_data/models/
localized_name_descriptions.rs

1use crate::models::language::LanguageId;
2use crate::models::localized_names::LocalizedStrings;
3use crate::types::language::Language;
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct LocalizedNameDescriptions(HashMap<LanguageId, LocalizedNameDescription>);
9
10impl LocalizedNameDescriptions {
11    pub fn new(localizations: HashMap<LanguageId, LocalizedNameDescription>) -> Self {
12        Self(localizations)
13    }
14
15    pub fn get_by_language(&self, language: Language) -> Option<&LocalizedNameDescription> {
16        let language_id = language as LanguageId;
17        if let Some(target) = self.0.get(&language_id) {
18            return Some(target);
19        }
20
21        let default_language_id = Language::default() as LanguageId;
22        if let Some(default) = self.0.get(&default_language_id) {
23            return Some(default);
24        }
25
26        None
27    }
28
29    pub fn localizations(&self) -> &HashMap<LanguageId, LocalizedNameDescription> {
30        &self.0
31    }
32
33    pub fn get_names(&self) -> LocalizedStrings {
34        let localizations = self
35            .0
36            .iter()
37            .map(|(k, v)| (k.clone(), v.name.clone()))
38            .collect();
39        LocalizedStrings::new(localizations)
40    }
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct LocalizedNameDescription {
45    pub name: String,
46    pub description: String,
47}