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}