pub enum PatchError {
PathTraversal(PathBuf),
TargetNotFound(PathBuf),
PermissionDenied {
path: PathBuf,
},
TargetIsDirectory {
path: PathBuf,
},
Io {
path: PathBuf,
source: Error,
},
}Expand description
Represents “hard” errors that can occur during patch operations.
This error type is returned by functions like apply_patch_to_file() for
unrecoverable issues such as I/O errors, permission problems, or security
violations like path traversal. It is distinct from a partial apply, which
is handled by the result structs.
§Example
let dir = tempdir()?;
// Note: "missing.txt" does not exist in the directory.
let diff = r#"
```diff
--- a/missing.txt
+++ b/missing.txt
@@ -1 +1 @@
-foo
+bar
```
"#;
let patch = parse_single_patch(diff)?;
let options = ApplyOptions::new();
// This will fail because the target file doesn't exist and it's not a creation patch.
let result = apply_patch_to_file(&patch, dir.path(), options);
assert!(matches!(result, Err(PatchError::TargetNotFound(_))));Variants§
PathTraversal(PathBuf)
The patch attempted to access a path outside the target directory.
This is a security measure to prevent malicious patches from modifying
unintended files (e.g., --- a/../../etc/passwd).
TargetNotFound(PathBuf)
The target file for a patch could not be found, and the patch did not appear to be for file creation (i.e., its first hunk was not an addition-only hunk).
PermissionDenied
The user does not have permission to read or write to the specified path.
TargetIsDirectory
The target path for a patch exists but is a directory, not a file.
Io
An I/O error occurred while reading or writing a file. This is a “hard” error that stops the entire process.
Trait Implementations§
Source§impl Debug for PatchError
impl Debug for PatchError
Source§impl Display for PatchError
impl Display for PatchError
Source§impl Error for PatchError
impl Error for PatchError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
Source§impl From<PatchError> for StrictApplyError
impl From<PatchError> for StrictApplyError
Source§fn from(source: PatchError) -> Self
fn from(source: PatchError) -> Self
Auto Trait Implementations§
impl Freeze for PatchError
impl !RefUnwindSafe for PatchError
impl Send for PatchError
impl Sync for PatchError
impl Unpin for PatchError
impl !UnwindSafe for PatchError
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
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more