latest_user_agent/
lib.rs

1mod firefox;
2
3#[derive(Debug, Clone)]
4pub struct UserAgent {
5    pub user_agent: String,
6    pub is_estimated: bool,
7}
8
9#[derive(Debug, Copy, Clone)]
10pub enum Browser {
11    Firefox,
12}
13
14#[derive(Debug, Copy, Clone)]
15pub enum OS {
16    LinuxIntelx64,
17    WindowsIntelx64,
18}
19
20/// Gets latest user agent for specified Browser and Operating System.
21///
22/// It never fails. If the Internet connection fails it logs the fact and
23/// estimates the agent string offline.
24pub async fn get_latest_user_agent(browser: Browser, os: OS, offline_mode: bool) -> UserAgent {
25    let mut version = None;
26    let mut is_estimated = false;
27
28    if !offline_mode {
29        version = match browser {
30            Browser::Firefox => firefox::get_latest_ua(os).await,
31        };
32    }
33
34    if version.is_none() {
35        if !offline_mode {
36            log::warn!("Couldn't retrieve actual UserAgent for {:?} from internet. UserAgent will be estimated.", browser);
37        }
38
39        version = Some(match browser {
40            Browser::Firefox => firefox::estimate_latest_ua(os),
41        });
42        is_estimated = true;
43    }
44
45    UserAgent {
46        user_agent: version.unwrap(),
47        is_estimated,
48    }
49}