@@ -21,24 +21,23 @@ const DRIVER_EXT: &str = ".exe";
2121#[ cfg( not( target_os = "windows" ) ) ]
2222const DRIVER_EXT : & str = "" ;
2323
24- const CHROME_PATH_ENV : & str = "CHROME_PATH " ;
25- const CHROMEDRIVER_PATH_ENV : & str = "CHROMEDRIVER_PATH " ;
26- const FIREFOX_PATH_ENV : & str = "FIREFOX_PATH " ;
27- const GECKODRIVER_PATH_ENV : & str = "GECKODRIVER_PATH " ;
28- const INSTALL_PATH_ENV : & str = "INSTALL_BIN_PATH " ;
24+ const BROWSER_BIN_PATH_ENV : & str = "BROWSER_PATH " ;
25+ const WEBDRIVER_BIN_PATH_ENV : & str = "WEBDRIVER_PATH " ;
26+ const INSTALL_PATH_ENV : & str = "WEBDRIVER_INSTALL_PATH " ;
27+ const GECKODRIVER_NAME : & str = "geckodriver " ;
28+ const CHROMEDRIVER_NAME : & str = "chromedriver " ;
2929
3030const MAX_DOWNLOAD_RETRIES : u32 = 3 ;
3131const INITIAL_RETRY_DELAY : u64 = 2 ;
3232
3333struct WebdriverDownloadConfig {
3434 driver_name : & ' static str ,
35- path_env : & ' static str ,
3635 get_browser_path : fn ( ) -> Result < PathBuf > ,
3736}
3837
3938/// Get user's bin directory for driver installs (e.g., $HOME/.local/bin or
4039/// %USERPROFILE%\.local\bin) or set it to the one specified via the ENV
41- /// variable `INSTALL_BIN_PATH `
40+ /// variable `WEBDRIVER_INSTALL_PATH `
4241fn user_bin_dir ( ) -> PathBuf {
4342 if let Ok ( bin) = env:: var ( INSTALL_PATH_ENV ) {
4443 return PathBuf :: from ( bin) ;
@@ -58,17 +57,17 @@ fn user_bin_dir() -> PathBuf {
5857
5958/// Check if a driver is already installed at the given path from environment
6059/// variable
61- fn is_webdriver_available ( env_var : & str , bin_name : & str ) -> bool {
60+ fn is_webdriver_available ( bin_name : & str ) -> bool {
6261 // First check environment variable path
63- if let Ok ( path) = env:: var ( env_var ) {
62+ if let Ok ( path) = env:: var ( WEBDRIVER_BIN_PATH_ENV ) {
6463 let bin_path = if cfg ! ( target_os = "windows" ) && !path. to_lowercase ( ) . ends_with ( ".exe" ) {
6564 format ! ( "{path}{DRIVER_EXT}" )
6665 } else {
6766 path
6867 } ;
6968 let exe = Path :: new ( & bin_path) ;
7069 if exe. exists ( ) && exe. is_file ( ) {
71- println ! ( "{bin_name} found at path specified in {env_var }: {bin_path}" ) ;
70+ println ! ( "{bin_name} found at path specified in {WEBDRIVER_BIN_PATH_ENV }: {bin_path}" ) ;
7271 return true ;
7372 }
7473 }
@@ -121,21 +120,19 @@ async fn download_with_retry(
121120 }
122121
123122 Err ( anyhow ! (
124- "Failed to download driver after {} attempts: {:?}" ,
125- MAX_DOWNLOAD_RETRIES ,
126- last_error
123+ "Failed to download driver after {MAX_DOWNLOAD_RETRIES} attempts: {last_error:?}" ,
127124 ) )
128125}
129126
130127fn setup_driver ( config : & WebdriverDownloadConfig ) -> Result < ( ) > {
131- if is_webdriver_available ( config. path_env , config . driver_name ) {
128+ if is_webdriver_available ( config. driver_name ) {
132129 return Ok ( ( ) ) ;
133130 }
134131 println ! (
135- "cargo::warning=You can specify {GECKODRIVER_PATH_ENV} or {CHROMEDRIVER_PATH_ENV} to an existing installation to avoid downloads."
132+ "cargo::warning=You can specify {WEBDRIVER_BIN_PATH_ENV} to an existing {CHROMEDRIVER_NAME}/{GECKODRIVER_NAME} installation to avoid downloads."
136133 ) ;
137134 println ! (
138- "cargo::warning=You can override browser detection using {CHROME_PATH_ENV} or {FIREFOX_PATH_ENV} environment variables ."
135+ "cargo::warning=You can override browser detection using {BROWSER_BIN_PATH_ENV} environment variable ."
139136 ) ;
140137
141138 println ! (
@@ -175,15 +172,15 @@ fn setup_driver(config: &WebdriverDownloadConfig) -> Result<()> {
175172 . context ( "Failed to create Tokio runtime" ) ?;
176173
177174 match config. driver_name {
178- "chromedriver" => {
175+ CHROMEDRIVER_NAME => {
179176 let driver_info = ChromedriverInfo :: new ( webdriver_bin. clone ( ) , browser_path) ;
180177 runtime
181178 . block_on ( async { download_with_retry ( & driver_info, false , true , 1 ) . await } )
182179 . with_context ( || {
183180 format ! ( "Failed to download and install {}" , config. driver_name)
184181 } ) ?;
185182 }
186- "geckodriver" => {
183+ GECKODRIVER_NAME => {
187184 let driver_info = GeckodriverInfo :: new ( webdriver_bin. clone ( ) , browser_path) ;
188185 runtime
189186 . block_on ( async { download_with_retry ( & driver_info, false , true , 1 ) . await } )
@@ -204,13 +201,13 @@ fn setup_driver(config: &WebdriverDownloadConfig) -> Result<()> {
204201
205202#[ cfg( feature = "chromedriver" ) ]
206203fn get_chrome_path ( ) -> Result < PathBuf > {
207- if let Ok ( chrome_path) = env:: var ( CHROME_PATH_ENV ) {
204+ if let Ok ( chrome_path) = env:: var ( BROWSER_BIN_PATH_ENV ) {
208205 let path = PathBuf :: from ( & chrome_path) ;
209206 if path. exists ( ) {
210207 Ok ( path)
211208 } else {
212- Err ( anyhow ! ( "Chrome not found on path: {}" , chrome_path ) ) . with_context ( || {
213- format ! ( "Please set {CHROME_PATH_ENV } to a valid Chrome installation" )
209+ Err ( anyhow ! ( "Chrome not found on path: {chrome_path}" ) ) . with_context ( || {
210+ format ! ( "Please set {BROWSER_BIN_PATH_ENV } to a valid Chrome installation" )
214211 } )
215212 }
216213 } else {
@@ -222,24 +219,21 @@ fn get_chrome_path() -> Result<PathBuf> {
222219 Ok ( old_browser_path)
223220 } else {
224221 Err ( anyhow ! ( "Chrome browser not detected" ) ) . with_context ( || {
225- format ! ( "Use {CHROME_PATH_ENV } to point to a valid Chrome installation" )
222+ format ! ( "Use {BROWSER_BIN_PATH_ENV } to point to a valid Chrome installation" )
226223 } )
227224 }
228225 }
229226}
230227
231228#[ cfg( feature = "geckodriver" ) ]
232229fn get_firefox_path ( ) -> Result < PathBuf > {
233- if let Ok ( firefox_path) = env:: var ( FIREFOX_PATH_ENV ) {
230+ if let Ok ( firefox_path) = env:: var ( BROWSER_BIN_PATH_ENV ) {
234231 let path = PathBuf :: from ( firefox_path. clone ( ) ) ;
235232 if path. exists ( ) {
236233 Ok ( path)
237234 } else {
238235 Err ( anyhow ! ( "Firefox not found on path: {firefox_path}" ) ) . with_context ( || {
239- format ! (
240- "Please set {} to a valid Firefox installation" ,
241- FIREFOX_PATH_ENV
242- )
236+ format ! ( "Please set {BROWSER_BIN_PATH_ENV} to a valid Firefox installation" , )
243237 } )
244238 }
245239 } else {
@@ -248,10 +242,7 @@ fn get_firefox_path() -> Result<PathBuf> {
248242 Ok ( browser_path)
249243 } else {
250244 Err ( anyhow ! ( "Firefox browser not detected" ) ) . with_context ( || {
251- format ! (
252- "Use {} to point to a valid Firefox installation" ,
253- FIREFOX_PATH_ENV
254- )
245+ format ! ( "Use {BROWSER_BIN_PATH_ENV} to point to a valid Firefox installation" , )
255246 } )
256247 }
257248 }
@@ -295,7 +286,7 @@ async fn download(
295286 driver_info. download_verify_install ( num_tries) . await ?;
296287 }
297288
298- println ! ( "cargo::warning=Driver installed succesfully ..." ) ;
289+ println ! ( "cargo::warning=Driver installed successfully ..." ) ;
299290 Ok ( ( ) )
300291 }
301292}
@@ -312,8 +303,7 @@ fn main() -> Result<()> {
312303 #[ cfg( feature = "chromedriver" ) ]
313304 {
314305 let config = WebdriverDownloadConfig {
315- driver_name : "chromedriver" ,
316- path_env : CHROMEDRIVER_PATH_ENV ,
306+ driver_name : CHROMEDRIVER_NAME ,
317307 get_browser_path : get_chrome_path,
318308 } ;
319309 setup_driver ( & config) ?;
@@ -322,8 +312,7 @@ fn main() -> Result<()> {
322312 #[ cfg( feature = "geckodriver" ) ]
323313 {
324314 let config = WebdriverDownloadConfig {
325- driver_name : "geckodriver" ,
326- path_env : GECKODRIVER_PATH_ENV ,
315+ driver_name : GECKODRIVER_NAME ,
327316 get_browser_path : get_firefox_path,
328317 } ;
329318 setup_driver ( & config) ?;
@@ -336,12 +325,12 @@ fn main() -> Result<()> {
336325 } else {
337326 #[ cfg( feature = "chromedriver" ) ]
338327 {
339- let msg = "'webdriver_download' feature disabled. Please install a 'chromedriver ' version manually and make the environment variable 'WEBDRIVER_PATH' point to it." . to_string ( ) ;
328+ let msg = "'webdriver_download' feature disabled. Please install a '{CHROMEDRIVER_NAME} ' version manually and make the environment variable 'WEBDRIVER_PATH' point to it." . to_string ( ) ;
340329 println ! ( "cargo::warning={msg}" ) ;
341330 }
342331 #[ cfg( feature = "geckodriver" ) ]
343332 {
344- let msg = format ! ( "'webdriver_download' feature disabled. Please install a 'geckodriver ' version manually and make the environment variable 'WEBDRIVER_PATH' point to it." ) ;
333+ let msg = format ! ( "'webdriver_download' feature disabled. Please install a '{GECKODRIVER_NAME} ' version manually and make the environment variable 'WEBDRIVER_PATH' point to it." ) ;
345334 println ! ( "cargo::warning={msg}" ) ;
346335 }
347336 #[ cfg( not( any( feature = "chromedriver" , feature = "geckodriver" ) ) ) ]
0 commit comments