taitan_orm_trait/traits/
location.rs

1use crate::traits::Parameter;
2use sqlx::{Database, MySql, Postgres, Sqlite};
3use std::borrow::Cow;
4use std::fmt::Debug;
5
6pub enum LocationKind {
7    Plain,
8    Not,
9    And,
10    Or,
11}
12
13#[derive(Debug, Clone, Copy)]
14pub enum LogicOp {
15    And,
16    Or,
17}
18
19pub trait Location<DB: Database>: Parameter<DB> + Debug {
20    fn table_name(&self) -> Cow<'static, str>;
21    fn gen_where_sql<'a>(&self) -> Cow<'a, str>;
22    fn all_none(&self) -> bool;
23    fn kind(&self) -> LocationKind {
24        LocationKind::Plain
25    }
26}
27
28pub trait MySqlLocation: Location<MySql>+ Sync {}
29impl<T: Location<MySql>+ Sync> MySqlLocation for T {}
30
31pub trait PostgresLocation: Location<Postgres> + Sync{}
32impl<T: Location<Postgres>+ Sync> PostgresLocation for T {}
33
34pub trait SqliteLocation: Location<Sqlite>+ Sync {}
35impl<T: Location<Sqlite>+ Sync> SqliteLocation for T {}