pub struct ApplyResult {
pub hunk_results: Vec<HunkApplyStatus>,
}Expand description
Contains detailed results for each hunk within a patch operation.
This struct provides a granular report on the outcome of a patch application.
It is a key component of both PatchResult and InMemoryResult. You can
use its methods like all_applied_cleanly() for a
high-level summary or failures() to inspect specific issues.
§Example
let original_content = "line 1\n";
// This patch will fail because the context is wrong.
let diff = r#"
```diff
--- a/test.txt
+++ b/test.txt
@@ -1 +1 @@
-WRONG CONTEXT
+line 1
```
"#;
let patch = parse_single_patch(diff)?;
let options = ApplyOptions::exact();
let result = apply_patch_to_content(&patch, Some(original_content), &options);
let report = result.report; // This is the ApplyResult
assert!(!report.all_applied_cleanly());
assert_eq!(report.failure_count(), 1);
let failure = &report.failures()[0];
assert_eq!(failure.hunk_index, 1);
assert!(matches!(failure.reason, HunkApplyError::ContextNotFound));Fields§
§hunk_results: Vec<HunkApplyStatus>A list of statuses, one for each hunk in the original patch.
Implementations§
Source§impl ApplyResult
impl ApplyResult
Sourcepub fn all_applied_cleanly(&self) -> bool
pub fn all_applied_cleanly(&self) -> bool
Checks if all hunks in the patch were applied successfully or skipped.
Returns false if any hunk failed to apply.
§Example
let successful_result = ApplyResult {
hunk_results: vec![
HunkApplyStatus::Applied { location: HunkLocation { start_index: 0, length: 1 }, match_type: MatchType::Exact, replaced_lines: vec!["old".to_string()] },
HunkApplyStatus::SkippedNoChanges
],
};
assert!(successful_result.all_applied_cleanly());
let failed_result = ApplyResult {
hunk_results: vec![
HunkApplyStatus::Applied { location: HunkLocation { start_index: 0, length: 1 }, match_type: MatchType::Exact, replaced_lines: vec!["old".to_string()] },
HunkApplyStatus::Failed(HunkApplyError::ContextNotFound),
],
};
assert!(!failed_result.all_applied_cleanly());Sourcepub fn failures(&self) -> Vec<HunkFailure>
pub fn failures(&self) -> Vec<HunkFailure>
Returns a list of all hunks that failed to apply, along with their index.
This provides a more convenient way to inspect failures than iterating
through hunk_results manually.
§Example
let failed_result = ApplyResult {
hunk_results: vec![
// The first hunk applied successfully.
HunkApplyStatus::Applied { location: HunkLocation { start_index: 0, length: 1 }, match_type: MatchType::Exact, replaced_lines: vec!["old".to_string()] },
HunkApplyStatus::Failed(HunkApplyError::ContextNotFound),
],
};
let failures = failed_result.failures();
assert_eq!(failures.len(), 1);
assert_eq!(failures[0], HunkFailure {
hunk_index: 2, // 1-based index
reason: HunkApplyError::ContextNotFound,
});Source§impl ApplyResult
impl ApplyResult
Sourcepub fn has_failures(&self) -> bool
pub fn has_failures(&self) -> bool
Checks if any hunk in the patch failed to apply.
This is the logical opposite of all_applied_cleanly.
§Example
let failed_result = ApplyResult {
hunk_results: vec![
HunkApplyStatus::Applied { location: HunkLocation { start_index: 0, length: 1 }, match_type: MatchType::Exact, replaced_lines: vec!["old".to_string()] },
HunkApplyStatus::Failed(HunkApplyError::ContextNotFound),
],
};
assert!(failed_result.has_failures());
let successful_result = ApplyResult {
hunk_results: vec![ HunkApplyStatus::SkippedNoChanges ],
};
assert!(!successful_result.has_failures());Sourcepub fn failure_count(&self) -> usize
pub fn failure_count(&self) -> usize
Returns the number of hunks that failed to apply.
This is a convenience method that counts how many hunks in the hunk_results
list have a status of HunkApplyStatus::Failed.
§Example
let result = ApplyResult {
hunk_results: vec![
HunkApplyStatus::Applied { location: HunkLocation { start_index: 0, length: 1 }, match_type: MatchType::Exact, replaced_lines: vec!["old".to_string()] },
HunkApplyStatus::Failed(HunkApplyError::ContextNotFound),
HunkApplyStatus::Failed(HunkApplyError::AmbiguousExactMatch(vec![])),
],
};
assert_eq!(result.failure_count(), 2);Sourcepub fn success_count(&self) -> usize
pub fn success_count(&self) -> usize
Returns the number of hunks that were applied successfully or skipped.
This method counts how many hunks in the hunk_results list have a status
of either HunkApplyStatus::Applied or HunkApplyStatus::SkippedNoChanges.
§Example
let result = ApplyResult {
hunk_results: vec![
HunkApplyStatus::Applied { location: HunkLocation { start_index: 0, length: 1 }, match_type: MatchType::Exact, replaced_lines: vec!["old".to_string()] },
HunkApplyStatus::SkippedNoChanges,
HunkApplyStatus::Failed(HunkApplyError::ContextNotFound),
],
};
assert_eq!(result.success_count(), 2);Trait Implementations§
Source§impl Clone for ApplyResult
impl Clone for ApplyResult
Source§fn clone(&self) -> ApplyResult
fn clone(&self) -> ApplyResult
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ApplyResult
impl Debug for ApplyResult
Source§impl PartialEq for ApplyResult
impl PartialEq for ApplyResult
impl StructuralPartialEq for ApplyResult
Auto Trait Implementations§
impl Freeze for ApplyResult
impl RefUnwindSafe for ApplyResult
impl Send for ApplyResult
impl Sync for ApplyResult
impl Unpin for ApplyResult
impl UnsafeUnpin for ApplyResult
impl UnwindSafe for ApplyResult
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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