use std::future::Future;
use parse_rust_core::{ParseError, ParseMap};
use crate::query::{Constraint, QueryOptions};
use crate::schema::ClassSchema;
pub type Row = ParseMap;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct WriteResult {
pub object_id: String,
}
pub trait StorageAdapter: Send + Sync {
fn all_schemas(&self) -> impl Future<Output = Result<Vec<ClassSchema>, ParseError>> + Send;
fn upsert_schema(
&self,
schema: &ClassSchema,
) -> impl Future<Output = Result<(), ParseError>> + Send;
fn create(
&self,
schema: &ClassSchema,
row: &Row,
) -> impl Future<Output = Result<WriteResult, ParseError>> + Send;
fn find(
&self,
schema: &ClassSchema,
constraints: &[Constraint],
options: &QueryOptions,
) -> impl Future<Output = Result<Vec<Row>, ParseError>> + Send;
fn count(
&self,
schema: &ClassSchema,
constraints: &[Constraint],
) -> impl Future<Output = Result<u64, ParseError>> + Send;
fn update(
&self,
schema: &ClassSchema,
constraints: &[Constraint],
values: &Row,
) -> impl Future<Output = Result<u64, ParseError>> + Send;
fn delete(
&self,
schema: &ClassSchema,
constraints: &[Constraint],
) -> impl Future<Output = Result<u64, ParseError>> + Send;
fn ensure_unique_index(
&self,
class_name: &str,
fields: &[&str],
name: Option<&str>,
) -> impl Future<Output = Result<(), ParseError>> + Send;
}