mirror of
https://github.com/Llewellynvdm/zoxide.git
synced 2024-11-25 14:07:35 +00:00
Simplify generics
This commit is contained in:
parent
86741bbe6a
commit
65c5e86968
@ -8,13 +8,10 @@ use crate::util::{self, MONTH};
|
|||||||
pub struct Stream<'a> {
|
pub struct Stream<'a> {
|
||||||
db: &'a mut Database,
|
db: &'a mut Database,
|
||||||
idxs: Rev<Range<usize>>,
|
idxs: Rev<Range<usize>>,
|
||||||
|
|
||||||
keywords: Vec<String>,
|
keywords: Vec<String>,
|
||||||
|
|
||||||
check_exists: bool,
|
check_exists: bool,
|
||||||
expire_below: Epoch,
|
expire_below: Epoch,
|
||||||
resolve_symlinks: bool,
|
resolve_symlinks: bool,
|
||||||
|
|
||||||
exclude_path: Option<String>,
|
exclude_path: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,7 +35,7 @@ impl<'a> Stream<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_exclude<S: Into<String>>(mut self, path: S) -> Self {
|
pub fn with_exclude(mut self, path: impl Into<String>) -> Self {
|
||||||
self.exclude_path = Some(path.into());
|
self.exclude_path = Some(path.into());
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
@ -49,7 +46,7 @@ impl<'a> Stream<'a> {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_keywords<S: AsRef<str>>(mut self, keywords: &[S]) -> Self {
|
pub fn with_keywords(mut self, keywords: &[impl AsRef<str>]) -> Self {
|
||||||
self.keywords = keywords.iter().map(util::to_lowercase).collect();
|
self.keywords = keywords.iter().map(util::to_lowercase).collect();
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
@ -80,15 +77,15 @@ impl<'a> Stream<'a> {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
fn matches_exists<S: AsRef<str>>(&self, path: S) -> bool {
|
fn matches_exists(&self, path: &str) -> bool {
|
||||||
if !self.check_exists {
|
if !self.check_exists {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
let resolver = if self.resolve_symlinks { fs::symlink_metadata } else { fs::metadata };
|
let resolver = if self.resolve_symlinks { fs::symlink_metadata } else { fs::metadata };
|
||||||
resolver(path.as_ref()).map(|m| m.is_dir()).unwrap_or_default()
|
resolver(path).map(|m| m.is_dir()).unwrap_or_default()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn matches_keywords<S: AsRef<str>>(&self, path: S) -> bool {
|
fn matches_keywords(&self, path: &str) -> bool {
|
||||||
let (keywords_last, keywords) = match self.keywords.split_last() {
|
let (keywords_last, keywords) = match self.keywords.split_last() {
|
||||||
Some(split) => split,
|
Some(split) => split,
|
||||||
None => return true,
|
None => return true,
|
||||||
|
18
src/util.rs
18
src/util.rs
@ -149,7 +149,7 @@ impl FzfChild {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Similar to [`fs::write`], but atomic (best effort on Windows).
|
/// Similar to [`fs::write`], but atomic (best effort on Windows).
|
||||||
pub fn write<P: AsRef<Path>, C: AsRef<[u8]>>(path: P, contents: C) -> Result<()> {
|
pub fn write(path: impl AsRef<Path>, contents: impl AsRef<[u8]>) -> Result<()> {
|
||||||
let path = path.as_ref();
|
let path = path.as_ref();
|
||||||
let contents = contents.as_ref();
|
let contents = contents.as_ref();
|
||||||
let dir = path.parent().unwrap();
|
let dir = path.parent().unwrap();
|
||||||
@ -186,7 +186,7 @@ pub fn write<P: AsRef<Path>, C: AsRef<[u8]>>(path: P, contents: C) -> Result<()>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Atomically create a tmpfile in the given directory.
|
/// Atomically create a tmpfile in the given directory.
|
||||||
fn tmpfile<P: AsRef<Path>>(dir: P) -> Result<(File, PathBuf)> {
|
fn tmpfile(dir: impl AsRef<Path>) -> Result<(File, PathBuf)> {
|
||||||
const MAX_ATTEMPTS: usize = 5;
|
const MAX_ATTEMPTS: usize = 5;
|
||||||
const TMP_NAME_LEN: usize = 16;
|
const TMP_NAME_LEN: usize = 16;
|
||||||
let dir = dir.as_ref();
|
let dir = dir.as_ref();
|
||||||
@ -215,7 +215,7 @@ fn tmpfile<P: AsRef<Path>>(dir: P) -> Result<(File, PathBuf)> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Similar to [`fs::rename`], but with retries on Windows.
|
/// Similar to [`fs::rename`], but with retries on Windows.
|
||||||
fn rename<P: AsRef<Path>, Q: AsRef<Path>>(from: P, to: Q) -> Result<()> {
|
fn rename(from: impl AsRef<Path>, to: impl AsRef<Path>) -> Result<()> {
|
||||||
let from = from.as_ref();
|
let from = from.as_ref();
|
||||||
let to = to.as_ref();
|
let to = to.as_ref();
|
||||||
|
|
||||||
@ -232,8 +232,8 @@ fn rename<P: AsRef<Path>, Q: AsRef<Path>>(from: P, to: Q) -> Result<()> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn canonicalize<P: AsRef<Path>>(path: &P) -> Result<PathBuf> {
|
pub fn canonicalize(path: impl AsRef<Path>) -> Result<PathBuf> {
|
||||||
dunce::canonicalize(path).with_context(|| format!("could not resolve path: {}", path.as_ref().display()))
|
dunce::canonicalize(&path).with_context(|| format!("could not resolve path: {}", path.as_ref().display()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn current_dir() -> Result<PathBuf> {
|
pub fn current_dir() -> Result<PathBuf> {
|
||||||
@ -247,14 +247,14 @@ pub fn current_time() -> Result<Epoch> {
|
|||||||
Ok(current_time)
|
Ok(current_time)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn path_to_str<P: AsRef<Path>>(path: &P) -> Result<&str> {
|
pub fn path_to_str(path: &impl AsRef<Path>) -> Result<&str> {
|
||||||
let path = path.as_ref();
|
let path = path.as_ref();
|
||||||
path.to_str().with_context(|| format!("invalid unicode in path: {}", path.display()))
|
path.to_str().with_context(|| format!("invalid unicode in path: {}", path.display()))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the absolute version of a path. Like [`std::path::Path::canonicalize`], but doesn't
|
/// Returns the absolute version of a path. Like [`std::path::Path::canonicalize`], but doesn't
|
||||||
/// resolve symlinks.
|
/// resolve symlinks.
|
||||||
pub fn resolve_path<P: AsRef<Path>>(path: &P) -> Result<PathBuf> {
|
pub fn resolve_path(path: impl AsRef<Path>) -> Result<PathBuf> {
|
||||||
let path = path.as_ref();
|
let path = path.as_ref();
|
||||||
let base_path;
|
let base_path;
|
||||||
|
|
||||||
@ -265,7 +265,7 @@ pub fn resolve_path<P: AsRef<Path>>(path: &P) -> Result<PathBuf> {
|
|||||||
if cfg!(windows) {
|
if cfg!(windows) {
|
||||||
use std::path::Prefix;
|
use std::path::Prefix;
|
||||||
|
|
||||||
fn get_drive_letter<P: AsRef<Path>>(path: P) -> Option<u8> {
|
fn get_drive_letter(path: impl AsRef<Path>) -> Option<u8> {
|
||||||
let path = path.as_ref();
|
let path = path.as_ref();
|
||||||
let mut components = path.components();
|
let mut components = path.components();
|
||||||
|
|
||||||
@ -359,7 +359,7 @@ pub fn resolve_path<P: AsRef<Path>>(path: &P) -> Result<PathBuf> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Convert a string to lowercase, with a fast path for ASCII strings.
|
/// Convert a string to lowercase, with a fast path for ASCII strings.
|
||||||
pub fn to_lowercase<S: AsRef<str>>(s: S) -> String {
|
pub fn to_lowercase(s: impl AsRef<str>) -> String {
|
||||||
let s = s.as_ref();
|
let s = s.as_ref();
|
||||||
if s.is_ascii() {
|
if s.is_ascii() {
|
||||||
s.to_ascii_lowercase()
|
s.to_ascii_lowercase()
|
||||||
|
Loading…
Reference in New Issue
Block a user