#![allow(dead_code)]
#![forbid(unsafe_code)]
#![deny(missing_docs)]
#![doc = include_str!("../README.md")]
#![doc(
html_logo_url = "https://raw.githubusercontent.com/42ByteLabs/geekorm/main/assets/geekorm.png"
)]
pub mod backends;
pub mod builder;
pub mod error;
pub mod queries;
pub mod utils;
#[cfg(feature = "libsql")]
pub use backends::libsql;
pub use crate::backends::{GeekConnection, GeekConnector};
pub use crate::error::Error;
pub use crate::builder::columns::{Column, Columns};
pub use crate::builder::columntypes::{ColumnType, ColumnTypeOptions};
pub use crate::builder::keys::{ForeignKey, PrimaryKey};
pub use crate::builder::table::Table;
pub use crate::builder::values::{Value, Values};
pub use crate::queries::{Query, QueryBuilder};
pub trait TableBuilder
where
Self: Sized,
{
fn table() -> Table;
fn get_table(&self) -> Table;
fn table_name() -> String;
}
pub trait QueryBuilderTrait
where
Self: TableBuilder + Sized,
{
fn create() -> QueryBuilder;
fn select() -> QueryBuilder {
QueryBuilder::select()
}
fn all() -> Query {
Self::select()
.table(Self::table())
.build()
.expect("Failed to build SELECT ALL query")
}
fn insert(item: &Self) -> Query;
fn update(item: &Self) -> Query;
fn count() -> QueryBuilder;
}
pub trait TablePrimaryKey
where
Self: TableBuilder + QueryBuilderTrait + Sized,
{
fn primary_key() -> String;
fn primary_key_value(&self) -> Value;
fn select_by_primary_key(pk: impl Into<Value>) -> Query {
Self::select()
.table(Self::table())
.where_eq(&Self::primary_key(), pk)
.build()
.expect("Failed to build SELECT BY PRIMARY KEY query")
}
}
pub trait ToSqlite {
fn to_sqlite(&self) -> String {
String::new()
}
#[allow(unused_variables)]
fn on_create(&self, query: &QueryBuilder) -> Result<String, Error> {
Ok(String::new())
}
fn on_select(&self, query: &QueryBuilder) -> Result<String, Error> {
Err(Error::QueryBuilderError(
format!("on_select not implemented for table: {}", query.table),
String::from("on_select"),
))
}
fn on_insert(&self, query: &QueryBuilder) -> Result<(String, Values), Error> {
Err(Error::QueryBuilderError(
format!("on_insert not implemented for table: {}", query.table),
String::from("on_insert"),
))
}
fn on_update(&self, query: &QueryBuilder) -> Result<(String, Values), Error> {
Err(Error::QueryBuilderError(
format!("on_update not implemented for table: {}", query.table),
String::from("on_update"),
))
}
}