pub(crate) mod cursor;
pub(crate) mod db;
pub(crate) mod helpers;
pub(crate) mod keyrange;
pub(crate) mod query;
#[cfg(test)]
mod tests;
pub(crate) mod transaction;
mod encoding;
mod schema;
use serde_json::Value;
pub use cursor::{Cursor, CursorDirection, IndexCursor};
pub use db::JsonDB;
pub use keyrange::KeyRange;
pub use query::{QueryBuilder, SortDir};
pub use schema::{IndexDef as IndexSchema, StoreDef as StoreSchema};
pub use transaction::Transaction;
pub trait ObjectStore {
fn store_def() -> StoreSchema;
}
pub trait KeyArg {
fn into_value(self) -> Value;
}
impl KeyArg for &str {
fn into_value(self) -> Value {
Value::String(self.to_string())
}
}
impl KeyArg for String {
fn into_value(self) -> Value {
Value::String(self)
}
}
impl KeyArg for i64 {
fn into_value(self) -> Value {
Value::Number(self.into())
}
}
impl KeyArg for i32 {
fn into_value(self) -> Value {
Value::Number((self as i64).into())
}
}
impl KeyArg for u64 {
fn into_value(self) -> Value {
Value::Number(self.into())
}
}
impl KeyArg for u32 {
fn into_value(self) -> Value {
Value::Number((self as u64).into())
}
}
impl KeyArg for Value {
fn into_value(self) -> Value {
self
}
}
impl KeyArg for &Value {
fn into_value(self) -> Value {
self.clone()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TransactionMode {
ReadOnly,
ReadWrite,
}