use crate::{
api::bloom::conf::{
BloomFilterAddResult, BloomFilterInfo, BloomFilterInsertOptions, BloomInfoType,
CuckooFilterInfo, CuckooFilterInsertOptions,
},
error::Result,
traits::DbLike,
};
pub trait Bloom: DbLike {
fn bf_reserve<K: AsRef<[u8]>>(
&self,
key: K,
error_rate: f64,
capacity: u32,
expansion: u16,
) -> Result<()>;
fn bf_add<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, item: I) -> Result<bool>;
fn bf_madd<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, items: &[I]) -> Result<Vec<bool>>;
fn bf_insert<K: AsRef<[u8]>, I: AsRef<[u8]>>(
&self,
key: K,
items: &[I],
opt: &BloomFilterInsertOptions,
) -> Result<Vec<BloomFilterAddResult>>;
fn bf_exists<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, item: I) -> Result<bool>;
fn bf_mexists<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, items: &[I]) -> Result<Vec<bool>>;
fn bf_info<K: AsRef<[u8]>>(&self, key: K) -> Result<BloomFilterInfo>;
fn bf_info_by_type<K: AsRef<[u8]>>(
&self,
key: K,
info_type: BloomInfoType,
) -> Result<Option<u64>>;
fn bf_card<K: AsRef<[u8]>>(&self, key: K) -> Result<u64>;
fn cf_reserve_ext<K: AsRef<[u8]>>(
&self,
key: K,
capacity: u64,
bucket_size: u8,
max_iterations: u16,
expansion: u16,
page_size: u32,
) -> Result<()>;
fn cf_reserve<K: AsRef<[u8]>>(
&self,
key: K,
capacity: u64,
bucket_size: u8,
max_iterations: u16,
expansion: u16,
) -> Result<()>;
fn cf_add<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, item: I) -> Result<bool>;
fn cf_addnx<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, item: I) -> Result<bool>;
fn cf_insert<K: AsRef<[u8]>, I: AsRef<[u8]>>(
&self,
key: K,
items: &[I],
opt: &CuckooFilterInsertOptions,
) -> Result<Vec<bool>>;
fn cf_insertnx<K: AsRef<[u8]>, I: AsRef<[u8]>>(
&self,
key: K,
items: &[I],
opt: &CuckooFilterInsertOptions,
) -> Result<Vec<bool>>;
fn cf_exists<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, item: I) -> Result<bool>;
fn cf_mexists<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, items: &[I]) -> Result<Vec<bool>>;
fn cf_del<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, item: I) -> Result<bool>;
fn cf_count<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, item: I) -> Result<u64>;
fn cf_info<K: AsRef<[u8]>>(&self, key: K) -> Result<CuckooFilterInfo>;
}