use std::path::PathBuf;
mod scan;
use crate::helpers::dir_node::DirNode;
use crate::helpers::error::SwdirError;
use crate::helpers::recurse::Recurse;
use crate::helpers::validate::validate_list_extensions;
const MAX_THREADS: usize = 8;
#[derive(Clone)]
pub struct Swdir {
root_path: PathBuf,
recurse: Recurse,
include_hidden: bool,
extension_allowlist: Option<Vec<String>>,
extension_denylist: Option<Vec<String>>,
max_threads: usize,
}
impl Swdir {
pub fn set_root_path<T: Into<PathBuf>>(&mut self, path: T) -> Self {
self.root_path = path.into();
self.to_owned()
}
pub fn set_recurse(&mut self, recurse: Recurse) -> Self {
self.recurse = recurse;
self.to_owned()
}
pub fn include_hidden(&mut self) -> Self {
self.include_hidden = true;
self.to_owned()
}
pub fn set_extension_allowlist<T: Into<String> + Clone>(
&mut self,
list: &[T],
) -> Result<Self, SwdirError> {
let list: Vec<String> = list.to_vec().into_iter().map(|x| x.into()).collect();
validate_list_extensions(&list, self.extension_denylist.as_ref())?;
self.extension_allowlist = Some(list);
Ok(self.to_owned())
}
pub fn set_extension_denylist<T: Into<String> + Clone>(
&mut self,
list: &[T],
) -> Result<Self, SwdirError> {
let list: Vec<String> = list.to_vec().into_iter().map(|x| x.into()).collect();
validate_list_extensions(&list, self.extension_allowlist.as_ref())?;
self.extension_denylist = Some(list);
Ok(self.to_owned())
}
pub fn walk(&self) -> DirNode {
self.walk_parallel()
}
}
impl Swdir {
pub fn default() -> Self {
Self {
root_path: PathBuf::from("."),
max_threads: MAX_THREADS,
recurse: Recurse::default(),
include_hidden: false,
extension_allowlist: None,
extension_denylist: None,
}
}
}