statsig_rust/evaluation/user_agent_parsing/
first_party_ua_parser.rs

1use crate::{dyn_value, log_w, DynamicValue};
2
3use super::statsig_uaparser::UaParser;
4
5const TAG: &str = "FirstPartyUserAgentParser";
6
7pub struct FirstPartyUserAgentParser;
8
9impl FirstPartyUserAgentParser {
10    pub fn get_value_from_user_agent(field: &str, user_agent: &str) -> Option<DynamicValue> {
11        match field {
12            "os_name" | "osname" => {
13                let os = UaParser::parse_os(user_agent);
14                Some(dyn_value!(os.name))
15            }
16            "os_version" | "osversion" => {
17                let os = UaParser::parse_os(user_agent);
18                Some(dyn_value!(os
19                    .version
20                    .get_version_string()
21                    .unwrap_or("0.0.0".to_string())))
22            }
23            "browser_name" | "browsername" => {
24                let browser = UaParser::parse_browser(user_agent);
25                Some(dyn_value!(browser.name))
26            }
27            "browser_version" | "browserversion" => {
28                let browser = UaParser::parse_browser(user_agent);
29                Some(dyn_value!(browser
30                    .version
31                    .get_version_string()
32                    .unwrap_or("0.0.0".to_string())))
33            }
34            _ => {
35                log_w!(TAG, "Unsupported field: {}", field);
36                None
37            }
38        }
39    }
40}