Skip to main content

engine_input_producers/
query_plan.rs

1use crate::{EngineInputV2, QueryPlanSummaryV0};
2
3pub fn summarize_query_plan_input(input: &EngineInputV2) -> QueryPlanSummaryV0 {
4    let expression_ids: Vec<String> = input
5        .sources
6        .iter()
7        .flat_map(|source| source.document.class_expressions.iter())
8        .map(|expression| expression.id.clone())
9        .collect();
10    let selector_usage_ids: Vec<String> = input
11        .styles
12        .iter()
13        .flat_map(|style| style.document.selectors.iter())
14        .filter(|selector| selector.view_kind == "canonical")
15        .filter_map(|selector| selector.canonical_name.as_ref())
16        .cloned()
17        .collect();
18
19    QueryPlanSummaryV0 {
20        schema_version: "0",
21        input_version: input.version.clone(),
22        total_query_count: expression_ids.len() * 2 + selector_usage_ids.len(),
23        expression_semantics_ids: expression_ids.clone(),
24        source_expression_resolution_ids: expression_ids,
25        selector_usage_ids,
26    }
27}
28
29#[cfg(test)]
30mod tests {
31    use super::summarize_query_plan_input;
32    use crate::test_support::sample_input;
33
34    #[test]
35    fn summarizes_expected_query_plan() {
36        let summary = summarize_query_plan_input(&sample_input());
37
38        assert_eq!(
39            summary.expression_semantics_ids,
40            vec!["expr-1".to_string(), "expr-2".to_string()]
41        );
42        assert_eq!(
43            summary.source_expression_resolution_ids,
44            vec!["expr-1".to_string(), "expr-2".to_string()]
45        );
46        assert_eq!(
47            summary.selector_usage_ids,
48            vec!["btn-active".to_string(), "card-header".to_string()]
49        );
50        assert_eq!(summary.total_query_count, 6);
51    }
52}