1use crate::driver::{Driver, PushPrql};
2
3pub fn dot<LHS, RHS>(lhs: LHS, rhs: RHS) -> Dot<LHS, RHS> {
4 Dot { lhs, rhs }
5}
6
7pub fn table(name: &'static str) -> TableName {
8 TableName { name }
9}
10
11pub trait Table {
12 fn table_name() -> TableName;
13}
14
15#[derive(Clone, Debug, Eq, PartialEq)]
16pub struct TableName {
17 pub name: &'static str,
18}
19
20impl TableName {
21 pub fn dot<RHS>(&self, rhs: RHS) -> Dot<&Self, RHS> {
22 Dot { lhs: self, rhs }
23 }
24}
25
26impl PushPrql for TableName {
27 fn push_to_driver(&self, driver: &mut Driver) {
28 driver.push(self.name);
29 }
30}
31
32#[derive(Clone, Debug, Eq, PartialEq)]
33pub struct Dot<LHS, RHS> {
34 pub lhs: LHS,
35 pub rhs: RHS,
36}
37
38impl<LHS, RHS> PushPrql for Dot<LHS, RHS>
39where
40 LHS: PushPrql,
41 RHS: PushPrql,
42{
43 fn push_to_driver(&self, driver: &mut Driver) {
44 self.lhs.push_to_driver(driver);
45 driver.push('.');
46 self.rhs.push_to_driver(driver);
47 }
48}