use keelson_core::Query;
use keelson_exec::{ExecError, ExecFuture, Executor, FromRow};
fn done<'a>() -> ExecFuture<'a, Result<(), ExecError>> {
Box::pin(std::future::ready(Ok(())))
}
pub trait View: Sized + Send + Sync + 'static {
type Row: FromRow + Send + Sync + 'static;
type Select: Query + Send + Sync + 'static;
fn base_select() -> Self::Select;
fn after_select<'a>(
db: &'a dyn Executor,
rows: &'a mut Vec<Self::Row>,
) -> ExecFuture<'a, Result<(), ExecError>> {
let _ = (db, rows);
done()
}
}
pub trait Table: View {
type Pk: Send + 'static;
type Setter: Default + Send + 'static;
type Insert: Query + Send + Sync + 'static;
type Update: Query + Send + Sync + 'static;
type Delete: Query + Send + Sync + 'static;
fn insert_query(setter: Self::Setter) -> Self::Insert;
fn update_query() -> Self::Update;
fn apply_setter(setter: Self::Setter, q: &mut Self::Update);
fn delete_query() -> Self::Delete;
fn pk(row: &Self::Row) -> Self::Pk;
fn before_insert<'a>(
db: &'a dyn Executor,
setter: &'a mut Self::Setter,
) -> ExecFuture<'a, Result<(), ExecError>> {
let _ = (db, setter);
done()
}
fn after_insert<'a>(
db: &'a dyn Executor,
rows: &'a [Self::Row],
) -> ExecFuture<'a, Result<(), ExecError>> {
let _ = (db, rows);
done()
}
fn before_update<'a>(
db: &'a dyn Executor,
setter: &'a mut Self::Setter,
) -> ExecFuture<'a, Result<(), ExecError>> {
let _ = (db, setter);
done()
}
fn after_update<'a>(
db: &'a dyn Executor,
affected: u64,
) -> ExecFuture<'a, Result<(), ExecError>> {
let _ = (db, affected);
done()
}
fn before_delete(db: &dyn Executor) -> ExecFuture<'_, Result<(), ExecError>> {
let _ = db;
done()
}
fn after_delete<'a>(
db: &'a dyn Executor,
affected: u64,
) -> ExecFuture<'a, Result<(), ExecError>> {
let _ = (db, affected);
done()
}
}