ckb_rocksdb/ops/
checkpoint.rs

1use crate::ffi;
2use crate::{checkpoint::Checkpoint, handle::Handle, Error};
3use std::marker::PhantomData;
4
5pub trait CreateCheckpointObject {
6    unsafe fn create_checkpoint_object_raw(&self) -> Result<*mut ffi::rocksdb_checkpoint_t, Error>;
7    fn create_checkpoint_object(&self) -> Result<Checkpoint<'_>, Error> {
8        let checkpoint: *mut ffi::rocksdb_checkpoint_t;
9
10        unsafe { checkpoint = self.create_checkpoint_object_raw()? };
11
12        if checkpoint.is_null() {
13            return Err(Error::new("Could not create checkpoint object.".to_owned()));
14        }
15
16        Ok(Checkpoint {
17            inner: checkpoint,
18            _db: PhantomData,
19        })
20    }
21}
22
23impl<T> CreateCheckpointObject for T
24where
25    T: Handle<ffi::rocksdb_t>,
26{
27    unsafe fn create_checkpoint_object_raw(&self) -> Result<*mut ffi::rocksdb_checkpoint_t, Error> {
28        Ok(ffi_try!(ffi::rocksdb_checkpoint_object_create(
29            self.handle(),
30        )))
31    }
32}