Skip to main content

engine_input_producers/
source_side.rs

1use crate::{
2    EngineInputV2, SourceSideCanonicalCandidateBundleV0, SourceSideCanonicalProducerSignalV0,
3    SourceSideEvaluatorCandidatesV0,
4    summarize_expression_semantics_canonical_candidate_bundle_input,
5    summarize_expression_semantics_evaluator_candidates_input,
6    summarize_source_resolution_canonical_candidate_bundle_input,
7    summarize_source_resolution_evaluator_candidates_input,
8};
9
10pub fn summarize_source_side_canonical_candidate_bundle_input(
11    input: &EngineInputV2,
12) -> SourceSideCanonicalCandidateBundleV0 {
13    SourceSideCanonicalCandidateBundleV0 {
14        schema_version: "0",
15        input_version: input.version.clone(),
16        expression_semantics: summarize_expression_semantics_canonical_candidate_bundle_input(
17            input,
18        ),
19        source_resolution: summarize_source_resolution_canonical_candidate_bundle_input(input),
20    }
21}
22
23pub fn summarize_source_side_evaluator_candidates_input(
24    input: &EngineInputV2,
25) -> SourceSideEvaluatorCandidatesV0 {
26    SourceSideEvaluatorCandidatesV0 {
27        schema_version: "0",
28        input_version: input.version.clone(),
29        expression_semantics: summarize_expression_semantics_evaluator_candidates_input(input),
30        source_resolution: summarize_source_resolution_evaluator_candidates_input(input),
31    }
32}
33
34pub fn summarize_source_side_canonical_producer_signal_input(
35    input: &EngineInputV2,
36) -> SourceSideCanonicalProducerSignalV0 {
37    SourceSideCanonicalProducerSignalV0 {
38        schema_version: "0",
39        input_version: input.version.clone(),
40        canonical_bundle: summarize_source_side_canonical_candidate_bundle_input(input),
41        evaluator_candidates: summarize_source_side_evaluator_candidates_input(input),
42    }
43}
44
45#[cfg(test)]
46mod tests {
47    use crate::source_side::{
48        summarize_source_side_canonical_candidate_bundle_input,
49        summarize_source_side_canonical_producer_signal_input,
50        summarize_source_side_evaluator_candidates_input,
51    };
52    use crate::test_support::sample_input;
53
54    #[test]
55    fn builds_source_side_canonical_candidate_bundle() {
56        let summary = summarize_source_side_canonical_candidate_bundle_input(&sample_input());
57
58        assert_eq!(summary.schema_version, "0");
59        assert_eq!(summary.input_version, "2");
60        assert_eq!(summary.expression_semantics.candidates.len(), 2);
61        assert_eq!(summary.source_resolution.candidates.len(), 2);
62    }
63
64    #[test]
65    fn builds_source_side_evaluator_candidates() {
66        let summary = summarize_source_side_evaluator_candidates_input(&sample_input());
67
68        assert_eq!(summary.schema_version, "0");
69        assert_eq!(summary.input_version, "2");
70        assert_eq!(summary.expression_semantics.results.len(), 2);
71        assert_eq!(summary.source_resolution.results.len(), 2);
72    }
73
74    #[test]
75    fn builds_source_side_canonical_producer_signal() {
76        let summary = summarize_source_side_canonical_producer_signal_input(&sample_input());
77
78        assert_eq!(summary.schema_version, "0");
79        assert_eq!(summary.input_version, "2");
80        assert_eq!(
81            summary
82                .canonical_bundle
83                .expression_semantics
84                .candidates
85                .len(),
86            2
87        );
88        assert_eq!(
89            summary
90                .evaluator_candidates
91                .expression_semantics
92                .results
93                .len(),
94            2
95        );
96        assert_eq!(
97            summary.canonical_bundle.source_resolution.candidates.len(),
98            2
99        );
100        assert_eq!(
101            summary.evaluator_candidates.source_resolution.results.len(),
102            2
103        );
104    }
105}