use crate::filter::{FieldPath, FilterExpr, Template};
#[derive(Debug)]
pub struct ParsedDSL {
pub filter: Option<FilterExpr>,
pub template: Option<Template>,
pub field_selector: Option<FieldPath>,
}
impl ParsedDSL {
pub fn new() -> Self {
Self {
filter: None,
template: None,
field_selector: None,
}
}
}
impl Default for ParsedDSL {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::filter::{ComparisonOp, FilterExpr, FilterValue, TemplateItem};
#[test]
fn test_parsed_dsl_new() {
let parsed = ParsedDSL::new();
assert!(parsed.filter.is_none());
assert!(parsed.template.is_none());
assert!(parsed.field_selector.is_none());
}
#[test]
fn test_parsed_dsl_default() {
let parsed = ParsedDSL::default();
assert!(parsed.filter.is_none());
assert!(parsed.template.is_none());
assert!(parsed.field_selector.is_none());
}
#[test]
fn test_parsed_dsl_with_components() {
let mut parsed = ParsedDSL::new();
parsed.filter = Some(FilterExpr::Comparison {
field: crate::filter::FieldPath::new(vec!["name".to_string()]),
op: ComparisonOp::Equal,
value: FilterValue::String("Alice".to_string()),
});
assert!(parsed.filter.is_some());
parsed.template = Some(crate::filter::Template {
items: vec![TemplateItem::Literal("Hello".to_string())],
});
assert!(parsed.template.is_some());
parsed.field_selector = Some(crate::filter::FieldPath::new(vec!["name".to_string()]));
assert!(parsed.field_selector.is_some());
}
}