From 4e2e682cefebda69f81ed24a4ce11cd7261e0916 Mon Sep 17 00:00:00 2001 From: sxyazi Date: Thu, 30 Oct 2025 19:30:07 +0800 Subject: [PATCH] .. --- yazi-shared/src/loc/buf.rs | 4 ++- yazi-shared/src/path/traits.rs | 60 +++++++++++++++++----------------- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/yazi-shared/src/loc/buf.rs b/yazi-shared/src/loc/buf.rs index d117505d..bc14fbde 100644 --- a/yazi-shared/src/loc/buf.rs +++ b/yazi-shared/src/loc/buf.rs @@ -145,7 +145,9 @@ where } #[inline] - pub fn as_loc<'a>(&'a self) -> Loc<'a, P::Borrowed> { Loc::from(self) } + pub fn as_loc<'a>(&'a self) -> Loc<'a, P::Borrowed> { + Loc { inner: self.inner.as_ref(), uri: self.uri, urn: self.urn } + } #[inline] pub fn to_path(&self) -> P diff --git a/yazi-shared/src/path/traits.rs b/yazi-shared/src/path/traits.rs index 841ef9ad..3e7dc6c7 100644 --- a/yazi-shared/src/path/traits.rs +++ b/yazi-shared/src/path/traits.rs @@ -7,31 +7,31 @@ pub trait PathLike: AsRef { where Self: 'a; + fn components(&self) -> Self::Components<'_>; + fn default() -> &'static Self; - fn strip_prefix(&self, base: T) -> Option<&Self> - where - T: AsRef; + fn encoded_bytes(&self) -> &[u8]; - fn len(&self) -> usize { self.encoded_bytes().len() } - - fn components(&self) -> Self::Components<'_>; + fn extension(&self) -> Option<&Self::Inner>; fn file_name(&self) -> Option<&Self::Inner>; fn file_stem(&self) -> Option<&Self::Inner>; - fn extension(&self) -> Option<&Self::Inner>; - - fn parent(&self) -> Option<&Self>; - - fn encoded_bytes(&self) -> &[u8]; - unsafe fn from_encoded_bytes(bytes: &[u8]) -> &Self; fn join(&self, base: T) -> Self::Owned where T: AsRef; + + fn len(&self) -> usize { self.encoded_bytes().len() } + + fn parent(&self) -> Option<&Self>; + + fn strip_prefix(&self, base: T) -> Option<&Self> + where + T: AsRef; } pub trait PathBufLike: AsRef + Default + 'static { @@ -39,13 +39,13 @@ pub trait PathBufLike: AsRef + Default + 'static { type InnerRef: ?Sized + PathInner; type Borrowed: ?Sized + PathLike + AsRef; - fn len(&self) -> usize { self.encoded_bytes().len() } - fn encoded_bytes(&self) -> &[u8]; + unsafe fn from_encoded_bytes(bytes: Vec) -> Self; + fn into_encoded_bytes(self) -> Vec; - unsafe fn from_encoded_bytes(bytes: Vec) -> Self; + fn len(&self) -> usize { self.encoded_bytes().len() } fn set_file_name(&mut self, name: T) where @@ -63,27 +63,18 @@ impl PathLike for Path { type Inner = OsStr; type Owned = PathBuf; + fn components(&self) -> Self::Components<'_> { self.components() } + fn default() -> &'static Self { Path::new("") } - fn strip_prefix(&self, base: T) -> Option<&Self> - where - T: AsRef, - { - self.strip_prefix(base).ok() - } + fn encoded_bytes(&self) -> &[u8] { self.as_os_str().as_encoded_bytes() } - fn components(&self) -> Self::Components<'_> { self.components() } + fn extension(&self) -> Option<&Self::Inner> { self.extension() } fn file_name(&self) -> Option<&Self::Inner> { self.file_name() } fn file_stem(&self) -> Option<&Self::Inner> { self.file_stem() } - fn extension(&self) -> Option<&Self::Inner> { self.extension() } - - fn parent(&self) -> Option<&Self> { self.parent() } - - fn encoded_bytes(&self) -> &[u8] { self.as_os_str().as_encoded_bytes() } - unsafe fn from_encoded_bytes(bytes: &[u8]) -> &Self { Self::new(unsafe { Self::Inner::from_encoded_bytes_unchecked(bytes) }) } @@ -94,6 +85,15 @@ impl PathLike for Path { { self.join(base) } + + fn parent(&self) -> Option<&Self> { self.parent() } + + fn strip_prefix(&self, base: T) -> Option<&Self> + where + T: AsRef, + { + self.strip_prefix(base).ok() + } } impl PathBufLike for PathBuf { @@ -103,12 +103,12 @@ impl PathBufLike for PathBuf { fn encoded_bytes(&self) -> &[u8] { self.as_os_str().as_encoded_bytes() } - fn into_encoded_bytes(self) -> Vec { self.into_os_string().into_encoded_bytes() } - unsafe fn from_encoded_bytes(bytes: Vec) -> Self { Self::from(unsafe { Self::Inner::from_encoded_bytes_unchecked(bytes) }) } + fn into_encoded_bytes(self) -> Vec { self.into_os_string().into_encoded_bytes() } + fn set_file_name(&mut self, name: T) where T: AsRef,