tofuri_pay_db/
lib.rs

1use rocksdb::ColumnFamily;
2use rocksdb::ColumnFamilyDescriptor;
3use rocksdb::DBWithThreadMode;
4use rocksdb::Options;
5use rocksdb::SingleThreaded;
6use rocksdb::DB;
7use std::path::Path;
8fn descriptors() -> Vec<ColumnFamilyDescriptor> {
9    let options = Options::default();
10    vec![ColumnFamilyDescriptor::new("charges", options)]
11}
12pub fn open(path: impl AsRef<Path>) -> DBWithThreadMode<SingleThreaded> {
13    let mut options = Options::default();
14    options.create_missing_column_families(true);
15    options.create_if_missing(true);
16    DB::open_cf_descriptors(&options, path, descriptors()).unwrap()
17}
18pub fn charges(db: &DBWithThreadMode<SingleThreaded>) -> &ColumnFamily {
19    db.cf_handle("charges").unwrap()
20}
21pub mod charge {
22    use rocksdb::DBWithThreadMode;
23    use rocksdb::SingleThreaded;
24    use std::error::Error;
25    use tofuri_key::Key;
26    use tofuri_pay_core::Charge;
27    pub fn put(db: &DBWithThreadMode<SingleThreaded>, key: &Key, charge: &Charge) -> Result<(), Box<dyn Error>> {
28        db.put_cf(super::charges(db), charge.address_bytes(key), bincode::serialize(charge)?)?;
29        Ok(())
30    }
31    pub fn get(db: &DBWithThreadMode<SingleThreaded>, hash: &[u8]) -> Result<Charge, Box<dyn Error>> {
32        Ok(bincode::deserialize(&db.get_cf(super::charges(db), hash)?.ok_or("charge not found")?)?)
33    }
34}