16
16
// under the License.
17
17
18
18
use crate :: config:: OS :: { LINUX , MACOS , WINDOWS } ;
19
- use crate :: REQUEST_TIMEOUT_SEC ;
20
19
use crate :: TTL_BROWSERS_SEC ;
21
20
use crate :: TTL_DRIVERS_SEC ;
22
21
23
- use std:: env:: consts:: { ARCH , OS } ;
22
+ use crate :: {
23
+ format_one_arg, run_shell_command, ENV_PROCESSOR_ARCHITECTURE , REQUEST_TIMEOUT_SEC ,
24
+ UNAME_COMMAND ,
25
+ } ;
26
+ use std:: env;
27
+ use std:: env:: consts:: { OS } ;
28
+
29
+ pub const ARM64_ARCH : & str = "arm64" ;
24
30
25
31
pub struct ManagerConfig {
26
32
pub browser_version : String ,
@@ -36,11 +42,27 @@ pub struct ManagerConfig {
36
42
37
43
impl ManagerConfig {
38
44
pub fn default ( ) -> ManagerConfig {
45
+ let self_os = OS ;
46
+ let self_arch = if WINDOWS . is ( self_os) {
47
+ env:: var ( ENV_PROCESSOR_ARCHITECTURE ) . unwrap_or_default ( )
48
+ } else {
49
+ let uname_a = format_one_arg ( UNAME_COMMAND , "a" ) ;
50
+ if run_shell_command ( self_os, uname_a)
51
+ . unwrap_or_default ( )
52
+ . to_ascii_lowercase ( )
53
+ . contains ( ARM64_ARCH )
54
+ {
55
+ ARM64_ARCH . to_string ( )
56
+ } else {
57
+ let uname_m = format_one_arg ( UNAME_COMMAND , "m" ) ;
58
+ run_shell_command ( self_os, uname_m) . unwrap_or_default ( )
59
+ }
60
+ } ;
39
61
ManagerConfig {
40
62
browser_version : "" . to_string ( ) ,
41
63
driver_version : "" . to_string ( ) ,
42
- os : OS . to_string ( ) ,
43
- arch : ARCH . to_string ( ) ,
64
+ os : self_os . to_string ( ) ,
65
+ arch : self_arch ,
44
66
browser_path : "" . to_string ( ) ,
45
67
proxy : "" . to_string ( ) ,
46
68
timeout : REQUEST_TIMEOUT_SEC ,
@@ -107,15 +129,16 @@ pub enum ARCH {
107
129
}
108
130
109
131
impl ARCH {
110
- pub fn to_str ( & self ) -> & str {
132
+ pub fn to_str_vector ( & self ) -> Vec < & str > {
111
133
match self {
112
- ARCH :: X32 => "x86" ,
113
- ARCH :: X64 => "x86_64" ,
114
- ARCH :: ARM64 => "aarch64" ,
134
+ ARCH :: X32 => vec ! [ "x86" , "i386" ] ,
135
+ ARCH :: X64 => vec ! [ "x86_64" , "x64" , "i686" , "amd64" , "ia64" ] ,
136
+ ARCH :: ARM64 => vec ! [ ARM64_ARCH , "aarch64" , "arm" ] ,
115
137
}
116
138
}
117
139
118
140
pub fn is ( & self , arch : & str ) -> bool {
119
- self . to_str ( ) . eq_ignore_ascii_case ( arch)
141
+ self . to_str_vector ( )
142
+ . contains ( & arch. to_ascii_lowercase ( ) . as_str ( ) )
120
143
}
121
144
}
0 commit comments