Skip to content

Commit af6e851

Browse files
committed
now able to pass a deny list for files to ignore
1 parent 5c17511 commit af6e851

2 files changed

Lines changed: 32 additions & 10 deletions

File tree

src/files.rs

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,40 @@ use std::fs;
33
use std::io;
44
use 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+
620
pub struct SqlFilesList {
721
sql_files: Vec<PathBuf>,
822
}
923

1024
impl 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

6386
impl 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()

src/main.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
//! main file. for testing. shouldn't be part of crate
2-
use std::fs;
3-
use std::io;
2+
use std::error::Error;
43
use std::path::Path;
54

65
pub mod files;
76

8-
fn main() -> io::Result<()> {
7+
fn main() -> Result<(), Box<dyn Error>> {
98
let path: &Path = Path::new("/home/alex/Projects/sql-docs/sql_files/");
109

11-
let sql_file_set = files::SqlFileSet::new(path)?;
10+
let sql_file_set = files::SqlFileSet::new(path, None)?;
1211

1312
for sql in sql_file_set.iter() {
1413
println!("{:?}",sql);

0 commit comments

Comments
 (0)