taitan_orm_trait/traits/
location.rs1use 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 {}