Skip to main content

deribit_http/model/
email_settings.rs

1//! Email settings models for Deribit API
2//!
3//! This module contains types for email language preferences.
4
5use serde::{Deserialize, Serialize};
6
7/// Supported email languages
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9#[serde(rename_all = "lowercase")]
10pub enum EmailLanguage {
11    /// English
12    En,
13    /// Korean
14    Ko,
15    /// Chinese
16    Zh,
17    /// Japanese
18    Ja,
19    /// Russian
20    Ru,
21    /// Spanish
22    Es,
23    /// Portuguese
24    Pt,
25    /// Turkish
26    Tr,
27    /// Vietnamese
28    Vi,
29}
30
31impl EmailLanguage {
32    /// Returns the language code as a string
33    #[must_use]
34    pub fn as_str(&self) -> &'static str {
35        match self {
36            Self::En => "en",
37            Self::Ko => "ko",
38            Self::Zh => "zh",
39            Self::Ja => "ja",
40            Self::Ru => "ru",
41            Self::Es => "es",
42            Self::Pt => "pt",
43            Self::Tr => "tr",
44            Self::Vi => "vi",
45        }
46    }
47}
48
49impl std::fmt::Display for EmailLanguage {
50    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
51        write!(f, "{}", self.as_str())
52    }
53}
54
55#[cfg(test)]
56mod tests {
57    use super::*;
58
59    #[test]
60    fn test_email_language_serialization() {
61        let lang = EmailLanguage::En;
62        let json = serde_json::to_string(&lang).expect("Failed to serialize");
63        assert_eq!(json, "\"en\"");
64    }
65
66    #[test]
67    fn test_email_language_deserialization() {
68        let json = "\"ko\"";
69        let lang: EmailLanguage = serde_json::from_str(json).expect("Failed to parse");
70        assert_eq!(lang, EmailLanguage::Ko);
71    }
72
73    #[test]
74    fn test_email_language_as_str() {
75        assert_eq!(EmailLanguage::Ja.as_str(), "ja");
76        assert_eq!(EmailLanguage::Ru.as_str(), "ru");
77    }
78}