diff --git a/src/patch.rs b/src/patch.rs
index dcbaa6e1bd..370782b281 100644
--- a/src/patch.rs
+++ b/src/patch.rs
@@ -1,4 +1,5 @@
use libc::{c_int, c_void};
+use std::marker::PhantomData;
use std::path::Path;
use std::ptr;
@@ -9,33 +10,37 @@ use crate::{raw, Blob, Buf, Diff, DiffDelta, DiffHunk, DiffLine, DiffOptions, Er
/// A structure representing the text changes in a single diff delta.
///
/// This is an opaque structure.
-pub struct Patch {
+pub struct Patch<'buffers> {
raw: *mut raw::git_patch,
+ buffers: PhantomData<&'buffers ()>,
}
-unsafe impl Send for Patch {}
+unsafe impl<'buffers> Send for Patch<'buffers> {}
-impl Binding for Patch {
+impl<'buffers> Binding for Patch<'buffers> {
type Raw = *mut raw::git_patch;
- unsafe fn from_raw(raw: Self::Raw) -> Patch {
- Patch { raw: raw }
+ unsafe fn from_raw(raw: Self::Raw) -> Self {
+ Patch {
+ raw: raw,
+ buffers: PhantomData,
+ }
}
fn raw(&self) -> Self::Raw {
self.raw
}
}
-impl Drop for Patch {
+impl<'buffers> Drop for Patch<'buffers> {
fn drop(&mut self) {
unsafe { raw::git_patch_free(self.raw) }
}
}
-impl Patch {
+impl<'buffers> Patch<'buffers> {
/// Return a Patch for one file in a Diff.
///
/// Returns Ok(None) for an unchanged or binary file.
- pub fn from_diff(diff: &Diff<'_>, idx: usize) -> Result