use crate::predicates::Predicates;
use std::{path::PathBuf, time::Duration};
#[derive(Clone, Debug)]
pub struct GlobOptions {
pub follow_symlinks: bool,
pub max_depth: Option<usize>,
pub case_sensitive: bool,
pub max_inflight: usize,
pub timeout: Option<Duration>,
pub predicates: Option<Predicates>,
pub root_dir: Option<PathBuf>,
}
impl Default for GlobOptions {
fn default() -> Self {
Self {
follow_symlinks: false,
max_depth: None,
case_sensitive: cfg!(not(windows)), max_inflight: 64,
timeout: None,
predicates: None,
root_dir: None,
}
}
}
pub struct GlobOptionsBuilder(GlobOptions);
impl Default for GlobOptionsBuilder {
fn default() -> Self {
Self::new()
}
}
impl GlobOptionsBuilder {
pub fn new() -> Self {
Self(GlobOptions::default())
}
pub fn follow_symlinks(mut self, v: bool) -> Self {
self.0.follow_symlinks = v;
self
}
pub fn max_depth(mut self, d: usize) -> Self {
self.0.max_depth = Some(d);
self
}
pub fn case_sensitive(mut self, v: bool) -> Self {
self.0.case_sensitive = v;
self
}
pub fn max_inflight(mut self, v: usize) -> Self {
self.0.max_inflight = v;
self
}
pub fn timeout(mut self, t: Duration) -> Self {
self.0.timeout = Some(t);
self
}
pub fn predicates(mut self, p: Predicates) -> Self {
self.0.predicates = Some(p);
self
}
pub fn root_dir(mut self, dir: PathBuf) -> Self {
self.0.root_dir = Some(dir);
self
}
pub fn build(self) -> GlobOptions {
self.0
}
}