use crate::{
api::json::{conf::JsonSet, meta::JsonStorageFormat},
error::Result,
traits::DbLike,
};
pub trait Json: DbLike {
fn json_set<K: AsRef<[u8]>>(&self, key: K, path: &str, json_str: &str) -> Result<bool>;
fn json_set_opt<K: AsRef<[u8]>>(
&self,
key: K,
path: &str,
json_str: &str,
opt: Option<JsonSet>,
) -> Result<bool>;
fn json_get<K: AsRef<[u8]>>(&self, key: K, path: Option<&str>) -> Result<Option<String>>;
fn json_get_formatted<K: AsRef<[u8]>>(
&self,
key: K,
paths: &[&str],
indent: Option<&str>,
newline: Option<&str>,
space: Option<&str>,
) -> Result<Option<String>>;
fn json_mget<K: AsRef<[u8]>>(&self, keys: &[K], path: &str) -> Result<Vec<Option<String>>>;
fn json_mset<K: AsRef<[u8]>>(&self, triplets: &[(K, &str, &str)]) -> Result<()>;
fn json_del<K: AsRef<[u8]>>(&self, key: K, path: Option<&str>) -> Result<usize>;
fn json_forget<K: AsRef<[u8]>>(&self, key: K, path: Option<&str>) -> Result<usize>;
fn json_type<K: AsRef<[u8]>>(&self, key: K, path: Option<&str>) -> Result<Vec<String>>;
fn json_numincrby<K: AsRef<[u8]>>(
&self,
key: K,
path: &str,
num_str: &str,
) -> Result<Option<String>>;
fn json_nummultby<K: AsRef<[u8]>>(
&self,
key: K,
path: &str,
num_str: &str,
) -> Result<Option<String>>;
fn json_strappend<K: AsRef<[u8]>>(
&self,
key: K,
path: Option<&str>,
str_to_append: &str,
) -> Result<Vec<Option<usize>>>;
fn json_strlen<K: AsRef<[u8]>>(&self, key: K, path: Option<&str>) -> Result<Vec<Option<usize>>>;
fn json_arrappend<K: AsRef<[u8]>>(
&self,
key: K,
path: &str,
values_json: &[&str],
) -> Result<Vec<Option<usize>>>;
fn json_arrinsert<K: AsRef<[u8]>>(
&self,
key: K,
path: &str,
index: isize,
values_json: &[&str],
) -> Result<Vec<Option<usize>>>;
fn json_arrindex<K: AsRef<[u8]>>(
&self,
key: K,
path: &str,
needle_json: &str,
start: isize,
stop: Option<isize>,
) -> Result<Vec<Option<isize>>>;
fn json_arrlen<K: AsRef<[u8]>>(&self, key: K, path: Option<&str>) -> Result<Vec<Option<usize>>>;
fn json_arrpop<K: AsRef<[u8]>>(
&self,
key: K,
path: Option<&str>,
index: Option<isize>,
) -> Result<Vec<Option<String>>>;
fn json_arrtrim<K: AsRef<[u8]>>(
&self,
key: K,
path: &str,
start: isize,
stop: isize,
) -> Result<Vec<Option<usize>>>;
fn json_clear<K: AsRef<[u8]>>(&self, key: K, path: Option<&str>) -> Result<usize>;
fn json_toggle<K: AsRef<[u8]>>(&self, key: K, path: Option<&str>) -> Result<Vec<Option<bool>>>;
fn json_merge<K: AsRef<[u8]>>(&self, key: K, path: &str, patch_json: &str) -> Result<bool>;
fn json_objkeys<K: AsRef<[u8]>>(
&self,
key: K,
path: Option<&str>,
) -> Result<Vec<Option<Vec<String>>>>;
fn json_objlen<K: AsRef<[u8]>>(&self, key: K, path: Option<&str>) -> Result<Vec<Option<usize>>>;
fn json_debug_memory<K: AsRef<[u8]>>(&self, key: K, path: Option<&str>) -> Result<Vec<usize>>;
fn json_info<K: AsRef<[u8]>>(&self, key: K) -> Result<Option<(JsonStorageFormat, usize)>>;
}