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}