@@ -3,17 +3,40 @@ use std::fs;
33use std:: io;
44use std:: path:: { Path , PathBuf } ;
55
6+ pub struct DenyList {
7+ deny_files : Vec < PathBuf > ,
8+ }
9+
10+ impl DenyList {
11+ pub fn new ( files : Vec < String > ) -> DenyList {
12+ let buf_files= files. iter ( ) . map ( |f| PathBuf :: from ( f) ) . collect ( ) ;
13+ DenyList { deny_files : buf_files }
14+ }
15+ pub fn deny_files ( & self ) -> & Vec < PathBuf > {
16+ & self . deny_files
17+ }
18+ }
19+
620pub struct SqlFilesList {
721 sql_files : Vec < PathBuf > ,
822}
923
1024impl SqlFilesList {
11- pub fn new < P : AsRef < Path > > ( path : P ) -> io:: Result < SqlFilesList > {
25+ pub fn new < P : AsRef < Path > > ( path : P , deny_list : Option < Vec < String > > ) -> io:: Result < SqlFilesList > {
1226 let recursive_scan = recursive_dir_scan ( path. as_ref ( ) ) ?;
13- Ok ( SqlFilesList {
14- sql_files : recursive_scan,
15- } )
27+ let allow_list = if let Some ( list) = deny_list {
28+ let deny = DenyList :: new ( list) ;
29+ recursive_scan
30+ . into_iter ( )
31+ . filter ( |p| !deny. deny_files ( ) . contains ( p) )
32+ . collect ( )
33+ } else {
34+ recursive_scan
35+ } ;
36+
37+ Ok ( SqlFilesList { sql_files : allow_list } )
1638 }
39+
1740 pub fn sql_files ( & self ) -> & [ PathBuf ] {
1841 & self . sql_files
1942 }
@@ -61,8 +84,8 @@ pub struct SqlFileSet {
6184}
6285
6386impl SqlFileSet {
64- pub fn new ( path : & Path ) -> io:: Result < SqlFileSet > {
65- let sql_files_list = SqlFilesList :: new ( path) ?;
87+ pub fn new ( path : & Path , deny_list : Option < Vec < String > > ) -> io:: Result < SqlFileSet > {
88+ let sql_files_list = SqlFilesList :: new ( path, deny_list ) ?;
6689
6790 let files_contents = sql_files_list
6891 . sql_files ( )
0 commit comments