1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#[derive(Debug, Clone, Copy)]
pub enum TalkApiAgent<'a> {
    /// Android agent with os version
    Android(&'a str),

    /// Win32 agent with os version
    Win32(&'a str),

    /// Custom agent
    Custom { agent: &'a str, user_agent: &'a str },
}

impl<'a> TalkApiAgent<'a> {
    pub fn agent(&self) -> &str {
        match self {
            TalkApiAgent::Android(_) => "android",
            TalkApiAgent::Win32(_) => "win32",
            TalkApiAgent::Custom {
                agent,
                user_agent: _,
            } => agent,
        }
    }

    pub fn get_user_agent(&self, version: &str, language: &str) -> String {
        match self {
            TalkApiAgent::Android(os_version) => {
                format!("KT/{} An/{} {}", version, os_version, language)
            }
            TalkApiAgent::Win32(os_version) => {
                format!("KT/{} Wd/{} {}", version, os_version, language)
            }
            TalkApiAgent::Custom {
                agent: _,
                user_agent,
            } => user_agent.to_string(),
        }
    }
}