use yazi_fs::file::File; use crate::Pattern; pub trait Selectable { fn url_pat(&self) -> Option<&Pattern>; fn mime_pat(&self) -> Option<&Pattern>; #[inline] fn matches(&self, file: &File, mime: &str) -> bool { self.match_with(Some(file), Some(mime)) } fn match_with(&self, file: Option<&File>, mime: Option<&str>) -> bool { match (self.url_pat(), self.mime_pat(), file, mime) { (_, Some(mp), _, Some(m)) if !mp.match_mime(m) => false, (Some(up), _, Some(f), _) if !up.match_url(&f.url, f.is_dir()) => false, (_, Some(_), _, None) | (Some(_), _, None, _) => false, _ => true, } } }