statsig_rust/evaluation/user_agent_parsing/
experimental_ua_parser.rs1use crate::{dyn_value, log_w, DynamicValue};
2
3use super::statsig_uaparser::UaParser;
4
5const TAG: &str = "ExperimentalUserAgentParser";
6
7pub struct ExperimentalUserAgentParser;
8
9impl ExperimentalUserAgentParser {
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.version.get_version_string()))
19 }
20 "browser_name" | "browsername" => {
21 let browser = UaParser::parse_browser(user_agent);
22 Some(dyn_value!(browser.name))
23 }
24 "browser_version" | "browserversion" => {
25 let browser = UaParser::parse_browser(user_agent);
26 Some(dyn_value!(browser.version.get_version_string()))
27 }
28 _ => {
29 log_w!(TAG, "Unsupported field: {}", field);
30 None
31 }
32 }
33 }
34}