languages_rs/languages/language_texts.rs
1use crate::Value;
2
3#[derive(Clone)]
4pub struct LanguageTexts {
5 language: String,
6 texts: Value,
7}
8
9impl LanguageTexts {
10 /// Create a new language texts.
11 ///
12 /// # Example
13 /// ```rust
14 /// use std::collections::HashMap;
15 ///
16 /// use languages_rs::{LanguageTexts, Value};
17 ///
18 /// let mut data: HashMap<String, Value> = HashMap::new();
19 /// data.insert(String::from("message"), Value::String(String::from("Hi")));
20 ///
21 /// let texts = LanguageTexts::new(String::from("en"), Value::Object(data));
22 /// assert!(texts.is_ok());
23 /// assert_eq!(texts.unwrap().try_get_text("message"), Some(Value::String(String::from("Hi"))));
24 /// ```
25 pub fn new(language: String, texts: Value) -> anyhow::Result<Self> {
26 if !texts.is_object() {
27 return Err(anyhow::Error::msg(format!("`{}` is not an object.", texts)));
28 }
29
30 Ok(Self { language, texts })
31 }
32
33 /// Get the language of the texts.
34 ///
35 /// # Example
36 /// ```rust
37 /// use std::collections::HashMap;
38 ///
39 /// use languages_rs::{LanguageTexts, Value};
40 ///
41 /// let texts = LanguageTexts::new(String::from("en"), Value::Object(HashMap::new()));
42 /// assert!(texts.is_ok());
43 /// assert_eq!(texts.unwrap().get_language(), String::from("en"));
44 /// ```
45 pub fn get_language(&self) -> String {
46 self.language.clone()
47 }
48
49 /// Get a text value of a language.
50 ///
51 /// # Example
52 /// ```rust
53 /// use std::collections::HashMap;
54 ///
55 /// use languages_rs::{LanguageTexts, Value};
56 ///
57 /// let mut data: HashMap<String, Value> = HashMap::new();
58 /// data.insert(String::from("message"), Value::String(String::from("Hi")));
59 /// data.insert(String::from("message2"), Value::String(String::from("Hi 2")));
60 ///
61 /// let texts = LanguageTexts::new(String::from("en"), Value::Object(data));
62 /// assert!(texts.is_ok());
63 ///
64 /// let texts = texts.unwrap();
65 /// assert_eq!(texts.try_get_text("message"), Some(Value::String(String::from("Hi"))));
66 /// assert_eq!(texts.try_get_text("message2"), Some(Value::String(String::from("Hi 2"))));
67 /// ```
68 pub fn try_get_text(&self, text: &str) -> Option<Value> {
69 if self.texts.is_object() {
70 if let Some(value) = self.texts.get_object().unwrap().get(&String::from(text)) {
71 return Some(value.clone());
72 }
73 }
74
75 None
76 }
77}