engine_input_producers/
source_side.rs1use 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}