pub use tokio_postgres::types::{
BorrowToSql,
Type,
};
pub type NamesList = &'static [&'static str];
pub type ReqTypeChecks = &'static [Option<fn(&Type) -> bool>];
pub type RespTypeChecks = &'static [fn(&Type) -> bool];
pub trait PgResultRow {
const COLUMN_NAMES: NamesList;
const COL_RS_TYPES: NamesList;
const TYPE_CHECKS: RespTypeChecks;
fn from_row(row: tokio_postgres::Row) -> Result<Self, tokio_postgres::Error>
where
Self: Sized;
}
pub trait QueryDDL {
type SqlIdType;
const SQL_ID: Self::SqlIdType;
const SQL_TEXT: &'static str;
}
pub trait QueryCopy {
type SqlIdType;
const SQL_ID: Self::SqlIdType;
const SQL_TEXT: &'static str;
}
pub trait QueryMaybeOne {
type ResultRow: PgResultRow;
type SqlIdType;
const SQL_ID: Self::SqlIdType;
const SQL_TEXT: &'static str;
const PARAM_NAMES: NamesList;
const TYPE_CHECKS: ReqTypeChecks;
fn params(&self) -> impl ExactSizeIterator<Item = impl BorrowToSql>;
}
pub trait QueryExactOne {
type ResultRow: PgResultRow;
type SqlIdType;
const SQL_ID: Self::SqlIdType;
const SQL_TEXT: &'static str;
const PARAM_NAMES: NamesList;
const TYPE_CHECKS: ReqTypeChecks;
fn params(&self) -> impl ExactSizeIterator<Item = impl BorrowToSql>;
}
pub trait QueryMany {
type ResultRow: PgResultRow;
type SqlIdType;
const SQL_ID: Self::SqlIdType;
const SQL_TEXT: &'static str;
const PARAM_NAMES: NamesList;
const TYPE_CHECKS: ReqTypeChecks;
fn params(&self) -> impl ExactSizeIterator<Item = impl BorrowToSql>;
}
pub trait QueryStream {
type ResultRow: PgResultRow;
type SqlIdType;
const SQL_ID: Self::SqlIdType;
const SQL_TEXT: &'static str;
const PARAM_NAMES: NamesList;
const TYPE_CHECKS: ReqTypeChecks;
fn params(&self) -> impl ExactSizeIterator<Item = impl BorrowToSql>;
}
pub trait QueryIgnore {
type SqlIdType;
const SQL_ID: Self::SqlIdType;
const SQL_TEXT: &'static str;
const PARAM_NAMES: NamesList;
const TYPE_CHECKS: ReqTypeChecks;
fn params(&self) -> impl ExactSizeIterator<Item = impl BorrowToSql>;
}
pub trait QueryDML {
type SqlIdType;
const SQL_ID: Self::SqlIdType;
const SQL_TEXT: &'static str;
const PARAM_NAMES: NamesList;
const TYPE_CHECKS: ReqTypeChecks;
fn params(&self) -> impl ExactSizeIterator<Item = impl BorrowToSql>;
}