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