use crate::{sqlite::select::SelectQueryBuilder, table::Table};
#[derive(Clone)]
pub enum Column<'a, T: Table + Default> {
Text(String),
SubQuery(SelectQueryBuilder<'a, T>),
}
impl<'a, T: Table + Default> Column<'a, T> {
pub fn build(&self) -> String {
match self {
Column::Text(text) => text.clone(),
Column::SubQuery(sub_query) => "(".to_string() + &sub_query.build_query() + ")",
}
}
}
impl<'a, T: Table + Default> std::fmt::Display for Column<'a, T> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.build())
}
}
impl<'a, T: Table + Default> PartialEq for Column<'a, T> {
fn eq(&self, other: &Self) -> bool {
self.build() == other.build()
}
}
impl<'a, T: Table + Default> PartialEq<String> for Column<'a, T> {
fn eq(&self, other: &String) -> bool {
match self {
Column::Text(text) => text == other,
Column::SubQuery(sub_query) => sub_query.build_query() == *other,
}
}
}
impl<'a, T: Table + Default> PartialEq<&str> for Column<'a, T> {
fn eq(&self, other: &&str) -> bool {
match self {
Column::Text(text) => text == other,
Column::SubQuery(sub_query) => sub_query.build_query() == *other,
}
}
}