1- use crate :: finder:: Checker ;
21use crate :: sys:: Sys ;
32use crate :: sys:: SysMetadata ;
43use crate :: { NonFatalError , NonFatalErrorHandler } ;
54use std:: path:: Path ;
65
7- pub struct ExecutableChecker < TSys : Sys > {
8- sys : TSys ,
6+ pub fn is_valid < F : NonFatalErrorHandler > (
7+ sys : impl Sys ,
8+ path : & Path ,
9+ nonfatal_error_handler : & mut F ,
10+ ) -> bool {
11+ exists ( & sys, path, nonfatal_error_handler) && is_executable ( & sys, path, nonfatal_error_handler)
912}
1013
11- impl < TSys : Sys > ExecutableChecker < TSys > {
12- pub fn new ( sys : TSys ) -> Self {
13- Self { sys }
14+ fn is_executable < F : NonFatalErrorHandler > (
15+ sys : impl Sys ,
16+ path : & Path ,
17+ nonfatal_error_handler : & mut F ,
18+ ) -> bool {
19+ if sys. is_windows ( ) && path. extension ( ) . is_some ( ) {
20+ true
21+ } else {
22+ let ret = sys
23+ . is_valid_executable ( path)
24+ . map_err ( |e| nonfatal_error_handler. handle ( NonFatalError :: Io ( e) ) )
25+ . unwrap_or ( false ) ;
26+ #[ cfg( feature = "tracing" ) ]
27+ tracing:: trace!( "{} EXEC_OK = {ret}" , path. display( ) ) ;
28+ ret
1429 }
1530}
1631
17- impl < TSys : Sys > Checker for ExecutableChecker < TSys > {
18- fn is_valid < F : NonFatalErrorHandler > (
19- & self ,
20- path : & Path ,
21- nonfatal_error_handler : & mut F ,
22- ) -> bool {
23- if self . sys . is_windows ( ) && path. extension ( ) . is_some ( ) {
24- true
25- } else {
26- let ret = self
27- . sys
28- . is_valid_executable ( path)
29- . map_err ( |e| nonfatal_error_handler. handle ( NonFatalError :: Io ( e) ) )
30- . unwrap_or ( false ) ;
31- #[ cfg( feature = "tracing" ) ]
32- tracing:: trace!( "{} EXEC_OK = {ret}" , path. display( ) ) ;
33- ret
34- }
35- }
36- }
37-
38- pub struct ExistedChecker < TSys : Sys > {
39- sys : TSys ,
40- }
41-
42- impl < TSys : Sys > ExistedChecker < TSys > {
43- pub fn new ( sys : TSys ) -> Self {
44- Self { sys }
45- }
46- }
47-
48- impl < TSys : Sys > Checker for ExistedChecker < TSys > {
49- fn is_valid < F : NonFatalErrorHandler > (
50- & self ,
51- path : & Path ,
52- nonfatal_error_handler : & mut F ,
53- ) -> bool {
54- if self . sys . is_windows ( ) {
55- let ret = self
56- . sys
32+ fn exists < F : NonFatalErrorHandler > (
33+ sys : impl Sys ,
34+ path : & Path ,
35+ nonfatal_error_handler : & mut F ,
36+ ) -> bool {
37+ {
38+ if sys. is_windows ( ) {
39+ let ret = sys
5740 . symlink_metadata ( path)
5841 . map ( |metadata| {
5942 #[ cfg( feature = "tracing" ) ]
@@ -71,13 +54,13 @@ impl<TSys: Sys> Checker for ExistedChecker<TSys> {
7154 . unwrap_or ( false ) ;
7255 #[ cfg( feature = "tracing" ) ]
7356 tracing:: trace!(
74- "{} has_extension = {}, ExistedChecker::is_valid () = {ret}" ,
57+ "{} has_extension = {}, checker::exists () = {ret}" ,
7558 path. display( ) ,
7659 path. extension( ) . is_some( )
7760 ) ;
7861 ret
7962 } else {
80- let ret = self . sys . metadata ( path) . map ( |metadata| metadata. is_file ( ) ) ;
63+ let ret = sys. metadata ( path) . map ( |metadata| metadata. is_file ( ) ) ;
8164 #[ cfg( feature = "tracing" ) ]
8265 tracing:: trace!( "{} is_file() = {ret:?}" , path. display( ) ) ;
8366 match ret {
@@ -90,30 +73,3 @@ impl<TSys: Sys> Checker for ExistedChecker<TSys> {
9073 }
9174 }
9275}
93-
94- pub struct CompositeChecker < TSys : Sys > {
95- existed_checker : ExistedChecker < TSys > ,
96- executable_checker : ExecutableChecker < TSys > ,
97- }
98-
99- impl < TSys : Sys > CompositeChecker < TSys > {
100- pub fn new ( sys : TSys ) -> Self {
101- CompositeChecker {
102- executable_checker : ExecutableChecker :: new ( sys. clone ( ) ) ,
103- existed_checker : ExistedChecker :: new ( sys) ,
104- }
105- }
106- }
107-
108- impl < TSys : Sys > Checker for CompositeChecker < TSys > {
109- fn is_valid < F : NonFatalErrorHandler > (
110- & self ,
111- path : & Path ,
112- nonfatal_error_handler : & mut F ,
113- ) -> bool {
114- self . existed_checker . is_valid ( path, nonfatal_error_handler)
115- && self
116- . executable_checker
117- . is_valid ( path, nonfatal_error_handler)
118- }
119- }
0 commit comments