use vantage_expressions::traits::expressive::ExpressiveEnum;
use vantage_expressions::{Expression, Expressive};
use crate::type_system::AnyCsvType;
pub const OP_EQ: &str = "{} = {}";
pub const OP_IN: &str = "{} IN ({})";
pub trait CsvOperation: Expressive<AnyCsvType> {
fn eq(&self, value: impl Expressive<AnyCsvType>) -> Expression<AnyCsvType>
where
Self: Sized,
{
Expression::new(
OP_EQ,
vec![
ExpressiveEnum::Nested(self.expr()),
ExpressiveEnum::Nested(value.expr()),
],
)
}
fn in_(&self, values: impl Expressive<AnyCsvType>) -> Expression<AnyCsvType>
where
Self: Sized,
{
Expression::new(
OP_IN,
vec![
ExpressiveEnum::Nested(self.expr()),
ExpressiveEnum::Nested(values.expr()),
],
)
}
}
impl<S: Expressive<AnyCsvType>> CsvOperation for S {}