| use std::marker; |
| |
| use crate::util::Binding; |
| use crate::{raw, Buf, Error, Odb, Repository}; |
| |
| /// A structure to represent a mempack backend for the object database. The |
| /// Mempack is bound to the Odb that it was created from, and cannot outlive |
| /// that Odb. |
| pub struct Mempack<'odb> { |
| raw: *mut raw::git_odb_backend, |
| _marker: marker::PhantomData<&'odb Odb<'odb>>, |
| } |
| |
| impl<'odb> Binding for Mempack<'odb> { |
| type Raw = *mut raw::git_odb_backend; |
| |
| unsafe fn from_raw(raw: *mut raw::git_odb_backend) -> Mempack<'odb> { |
| Mempack { |
| raw, |
| _marker: marker::PhantomData, |
| } |
| } |
| |
| fn raw(&self) -> *mut raw::git_odb_backend { |
| self.raw |
| } |
| } |
| |
| // We don't need to implement `Drop` for Mempack because it is owned by the |
| // odb to which it is attached, and that will take care of freeing the mempack |
| // and associated memory. |
| |
| impl<'odb> Mempack<'odb> { |
| /// Dumps the contents of the mempack into the provided buffer. |
| pub fn dump(&self, repo: &Repository, buf: &mut Buf) -> Result<(), Error> { |
| unsafe { |
| try_call!(raw::git_mempack_dump(buf.raw(), repo.raw(), self.raw)); |
| } |
| Ok(()) |
| } |
| |
| /// Clears all data in the mempack. |
| pub fn reset(&self) -> Result<(), Error> { |
| unsafe { |
| try_call!(raw::git_mempack_reset(self.raw)); |
| } |
| Ok(()) |
| } |
| } |