54 lines
1.2 KiB
Rust
54 lines
1.2 KiB
Rust
use mysql_async::Pool;
|
|
use async_trait::async_trait;
|
|
|
|
use crate::Response;
|
|
use crate::UBigInt;
|
|
|
|
#[macro_export]
|
|
macro_rules! no_conn {
|
|
($spec:literal) => {
|
|
format!("[ CON Error ] : {}", $spec)
|
|
}
|
|
}
|
|
|
|
#[macro_export]
|
|
macro_rules! sql_err {
|
|
($spec:literal) => {
|
|
format!("[ SQL Error ] : {}", $spec)
|
|
};
|
|
|
|
// Using this mostly to pull in sql err types from lib to outside world for logging
|
|
($exp:expr) => {
|
|
format!("[ SQL Error ] : {}", $exp)
|
|
}
|
|
}
|
|
|
|
#[macro_export]
|
|
macro_rules! sql_err_log {
|
|
($spec:expr) => {
|
|
println!($spec);
|
|
}
|
|
}
|
|
|
|
/*
|
|
* NOTE: pay attention to work on async in traits for rust
|
|
* Each of one these funcs will implicitly do a single heap allocation which
|
|
* for our case is fine though ideally we don't
|
|
*
|
|
* As soon as we finda way around that we should depecrate `#[async_trait`
|
|
* for the performance
|
|
* */
|
|
|
|
#[async_trait]
|
|
pub trait FromDB<T, FilterType> {
|
|
type Row;
|
|
|
|
async fn get(p: &Pool, id: UBigInt) -> Response<T>;
|
|
|
|
async fn update(p: &Pool, row: T) -> Response<T>;
|
|
|
|
async fn delete(p: &Pool, id: UBigInt) -> Response<T>;
|
|
|
|
async fn filter(p: &Pool, filter_val: FilterType) -> Response<T>;
|
|
}
|