lsor_core/
table.rs

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}