use std::sync::Arc;
use super::*;
pub trait RcUtils: Sized {
fn arc(self) -> Arc<Self> {
Arc::new(self)
}
}
impl<T: Sized> RcUtils for T {}
#[macro_export]
macro_rules! generate_db_code {
($($name:ident: $key_type:ty => $value_type:ty),* $(,)?) => {
pub struct Db {
$(
pub $name: $crate::rocks_wrapper::RocksTable<$key_type, $value_type>,
)*
}
impl Db {
pub fn open(path: &str) -> Self {
let db = $crate::rocks_wrapper::RocksDB::open_db(
path,
[
$(
stringify!($name).to_uppercase().as_str(),
)*
],
);
Self {
$(
$name: db.table(stringify!($name).to_uppercase().as_str()),
)*
}
}
pub fn flush_all(&self) {
$(
self.$name.flush();
)*
}
}
$(
const _: fn() = || {
fn assert_pebble<T: $crate::rocks_wrapper::Pebble>() {}
assert_pebble::<$key_type>();
assert_pebble::<$value_type>();
};
)*
};
}