1 use std::marker; 2 3 use crate::util::Binding; 4 use crate::{raw, Buf, Error, Odb, Repository}; 5 6 /// A structure to represent a mempack backend for the object database. The 7 /// Mempack is bound to the Odb that it was created from, and cannot outlive 8 /// that Odb. 9 pub struct Mempack<'odb> { 10 raw: *mut raw::git_odb_backend, 11 _marker: marker::PhantomData<&'odb Odb<'odb>>, 12 } 13 14 impl<'odb> Binding for Mempack<'odb> { 15 type Raw = *mut raw::git_odb_backend; 16 from_raw(raw: *mut raw::git_odb_backend) -> Mempack<'odb>17 unsafe fn from_raw(raw: *mut raw::git_odb_backend) -> Mempack<'odb> { 18 Mempack { 19 raw: raw, 20 _marker: marker::PhantomData, 21 } 22 } 23 raw(&self) -> *mut raw::git_odb_backend24 fn raw(&self) -> *mut raw::git_odb_backend { 25 self.raw 26 } 27 } 28 29 // We don't need to implement `Drop` for Mempack because it is owned by the 30 // odb to which it is attached, and that will take care of freeing the mempack 31 // and associated memory. 32 33 impl<'odb> Mempack<'odb> { 34 /// Dumps the contents of the mempack into the provided buffer. dump(&self, repo: &Repository, buf: &mut Buf) -> Result<(), Error>35 pub fn dump(&self, repo: &Repository, buf: &mut Buf) -> Result<(), Error> { 36 unsafe { 37 try_call!(raw::git_mempack_dump(buf.raw(), repo.raw(), self.raw)); 38 } 39 Ok(()) 40 } 41 42 /// Clears all data in the mempack. reset(&self) -> Result<(), Error>43 pub fn reset(&self) -> Result<(), Error> { 44 unsafe { 45 try_call!(raw::git_mempack_reset(self.raw)); 46 } 47 Ok(()) 48 } 49 } 50