firebase_rs_sdk/util/
environment.rs

1use std::env;
2
3fn forced_environment() -> Option<String> {
4    env::var("FIREBASE_FORCE_ENVIRONMENT").ok()
5}
6
7pub fn get_user_agent() -> String {
8    env::var("FIREBASE_USER_AGENT").unwrap_or_default()
9}
10
11pub fn is_mobile_cordova() -> bool {
12    false
13}
14
15pub fn is_node() -> bool {
16    match forced_environment().as_deref() {
17        Some("browser") => false,
18        Some("node") => true,
19        _ => true,
20    }
21}
22
23pub fn is_browser() -> bool {
24    match forced_environment().as_deref() {
25        Some("browser") => true,
26        Some("node") => false,
27        _ => false,
28    }
29}
30
31pub fn is_web_worker() -> bool {
32    false
33}
34
35pub fn is_cloudflare_worker() -> bool {
36    false
37}
38
39pub fn is_browser_extension() -> bool {
40    false
41}
42
43pub fn is_react_native() -> bool {
44    false
45}
46
47pub fn is_electron() -> bool {
48    get_user_agent().contains("Electron/")
49}
50
51pub fn is_safari() -> bool {
52    false
53}
54
55pub fn is_safari_or_webkit() -> bool {
56    false
57}
58
59pub fn is_indexed_db_available() -> bool {
60    false
61}
62
63pub fn are_cookies_enabled() -> bool {
64    false
65}
66
67pub fn is_uwp() -> bool {
68    false
69}
70
71#[cfg(test)]
72mod tests {
73    use super::*;
74
75    #[test]
76    fn default_environment_is_node() {
77        assert!(is_node());
78        assert!(!is_browser());
79    }
80
81    #[test]
82    fn detect_electron_user_agent() {
83        unsafe { env::set_var("FIREBASE_USER_AGENT", "Electron/1.0") };
84        assert!(is_electron());
85        unsafe { env::remove_var("FIREBASE_USER_AGENT") };
86    }
87}