pub struct ZipFilePath<'a>(/* private fields */);
Expand description
Represents a path within a Zip archive.
Implementations§
Source§impl<'a> ZipFilePath<'a>
impl<'a> ZipFilePath<'a>
Sourcepub fn as_bytes(&self) -> &'a [u8] ⓘ
pub fn as_bytes(&self) -> &'a [u8] ⓘ
Return the raw bytes of the Zip file path.
WARNING: this may contain be an absolute path or contain a file path
capable of zip slips. Prefer normalize
.
Sourcepub fn is_dir(&self) -> bool
pub fn is_dir(&self) -> bool
Returns true if the file path is a directory.
This is determined by the file path ending in a slash, but it’s a common convention as otherwise it would be an invalid file.
§Examples
let path = ZipFilePath::new(b"dir/");
assert!(path.is_dir());
let path = ZipFilePath::new(b"dir/file.txt");
assert!(!path.is_dir());
Sourcepub fn normalize(&self) -> Result<Cow<'_, str>, Error>
pub fn normalize(&self) -> Result<Cow<'_, str>, Error>
Represents a path within a Zip archive.
The path normalization follows these rules:
- Interpret the file path as UTF-8
- Converts backslashes to forward slashes
- Removes redundant slashes
- Resolves relative path components (
..
and.
) - Strips leading slashes and parent directory references that would escape the root
§Examples
Basic path normalization:
let path = ZipFilePath::new(b"dir/test.txt");
assert_eq!(path.normalize().unwrap(), "dir/test.txt");
// Converts backslashes to forward slashes
let path = ZipFilePath::new(b"dir\\test.txt");
assert_eq!(path.normalize().unwrap(), "dir/test.txt");
// Removes redundant slashes
let path = ZipFilePath::new(b"dir//test.txt");
assert_eq!(path.normalize().unwrap(), "dir/test.txt");
Handling relative and absolute paths:
// Removes leading slashes
let path = ZipFilePath::new(b"/test.txt");
assert_eq!(path.normalize().unwrap(), "test.txt");
// Resolves current directory references
let path = ZipFilePath::new(b"./test.txt");
assert_eq!(path.normalize().unwrap(), "test.txt");
// Resolves parent directory references
let path = ZipFilePath::new(b"dir/../test.txt");
assert_eq!(path.normalize().unwrap(), "test.txt");
let path = ZipFilePath::new(b"a/b/c/d/../../test.txt");
assert_eq!(path.normalize().unwrap(), "a/b/test.txt");
let path = ZipFilePath::new(b"dir/");
assert_eq!(path.normalize().unwrap(), "dir/");
Invalid paths:
// Invalid UTF-8 sequences result in an error
let path = ZipFilePath::new(&[0xFF]);
assert!(path.normalize().is_err());
let path = ZipFilePath::new(&[b't', b'e', b's', b't', 0xFF]);
assert!(path.normalize().is_err());
§Errors
- [
Error::Utf8
] if the file path is not valid UTF-8.
Trait Implementations§
Source§impl<'a> Clone for ZipFilePath<'a>
impl<'a> Clone for ZipFilePath<'a>
Source§fn clone(&self) -> ZipFilePath<'a>
fn clone(&self) -> ZipFilePath<'a>
Returns a copy of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl<'a> Debug for ZipFilePath<'a>
impl<'a> Debug for ZipFilePath<'a>
Source§impl<'a> Hash for ZipFilePath<'a>
impl<'a> Hash for ZipFilePath<'a>
Source§impl<'a> Ord for ZipFilePath<'a>
impl<'a> Ord for ZipFilePath<'a>
Source§fn cmp(&self, other: &ZipFilePath<'a>) -> Ordering
fn cmp(&self, other: &ZipFilePath<'a>) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
Source§impl<'a> PartialEq for ZipFilePath<'a>
impl<'a> PartialEq for ZipFilePath<'a>
Source§impl<'a> PartialOrd for ZipFilePath<'a>
impl<'a> PartialOrd for ZipFilePath<'a>
impl<'a> Copy for ZipFilePath<'a>
impl<'a> Eq for ZipFilePath<'a>
impl<'a> StructuralPartialEq for ZipFilePath<'a>
Auto Trait Implementations§
impl<'a> Freeze for ZipFilePath<'a>
impl<'a> RefUnwindSafe for ZipFilePath<'a>
impl<'a> Send for ZipFilePath<'a>
impl<'a> Sync for ZipFilePath<'a>
impl<'a> Unpin for ZipFilePath<'a>
impl<'a> UnwindSafe for ZipFilePath<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more