use super::expr::LogicalExpr;
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Selector {
Name(NameSelector),
Wildcard(WildcardSelector),
Index(IndexSelector),
ArraySlice(ArraySliceSelector),
Filter(FilterSelector),
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct NameSelector {
value: String,
}
impl NameSelector {
pub fn new(value: String) -> NameSelector {
NameSelector { value }
}
pub fn value(&self) -> &str {
&self.value
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct WildcardSelector;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct IndexSelector {
value: i64,
}
impl IndexSelector {
pub fn new(value: i64) -> IndexSelector {
IndexSelector { value }
}
pub fn value(&self) -> &i64 {
&self.value
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct ArraySliceSelector {
start: Option<i64>,
end: Option<i64>,
step: i64,
}
impl ArraySliceSelector {
pub fn new(start: Option<i64>, end: Option<i64>, step: i64) -> ArraySliceSelector {
ArraySliceSelector { start, end, step }
}
pub fn start(&self) -> Option<i64> {
self.start
}
pub fn end(&self) -> Option<i64> {
self.end
}
pub fn step(&self) -> i64 {
self.step
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct FilterSelector {
expr: LogicalExpr,
}
impl FilterSelector {
pub fn new(expr: LogicalExpr) -> FilterSelector {
FilterSelector { expr }
}
pub fn expr(&self) -> &LogicalExpr {
&self.expr
}
}