|
1 | | -use crate::headers::{ |
2 | | - errors::HeaderRuleCompileError, |
3 | | - plan::{ |
4 | | - HeaderAggregationStrategy, HeaderRulesPlan, RequestHeaderRule, RequestHeaderRules, |
5 | | - RequestInsertExpression, RequestInsertStatic, RequestPropagateNamed, RequestPropagateRegex, |
6 | | - RequestRemoveNamed, RequestRemoveRegex, ResponseHeaderRule, ResponseHeaderRules, |
7 | | - ResponseInsertExpression, ResponseInsertStatic, ResponsePropagateNamed, |
8 | | - ResponsePropagateRegex, ResponseRemoveNamed, ResponseRemoveRegex, |
| 1 | +use crate::{ |
| 2 | + headers::{ |
| 3 | + errors::HeaderRuleCompileError, |
| 4 | + plan::{ |
| 5 | + HeaderAggregationStrategy, HeaderRulesPlan, RequestHeaderRule, RequestHeaderRules, |
| 6 | + RequestInsertExpression, RequestInsertStatic, RequestPropagateNamed, |
| 7 | + RequestPropagateRegex, RequestRemoveNamed, RequestRemoveRegex, ResponseHeaderRule, |
| 8 | + ResponseHeaderRules, ResponseInsertExpression, ResponseInsertStatic, |
| 9 | + ResponsePropagateNamed, ResponsePropagateRegex, ResponseRemoveNamed, |
| 10 | + ResponseRemoveRegex, |
| 11 | + }, |
9 | 12 | }, |
| 13 | + utils::expression::compile_expression, |
10 | 14 | }; |
11 | 15 |
|
12 | 16 | use hive_router_config::headers as config; |
@@ -48,11 +52,14 @@ impl HeaderRuleCompiler<Vec<RequestHeaderRule>> for config::RequestHeaderRule { |
48 | 52 | value: build_header_value(&rule.name, value)?, |
49 | 53 | })); |
50 | 54 | } |
51 | | - config::InsertSource::Expression(expression) => { |
| 55 | + config::InsertSource::Expression { expression } => { |
| 56 | + let program = compile_expression(expression, None).map_err(|err| { |
| 57 | + HeaderRuleCompileError::ExpressionBuild(rule.name.clone(), err) |
| 58 | + })?; |
52 | 59 | actions.push(RequestHeaderRule::InsertExpression( |
53 | 60 | RequestInsertExpression { |
54 | 61 | name: build_header_name(&rule.name)?, |
55 | | - expression: Box::new(expression.clone()), |
| 62 | + expression: Box::new(program), |
56 | 63 | }, |
57 | 64 | )); |
58 | 65 | } |
@@ -114,16 +121,19 @@ impl HeaderRuleCompiler<Vec<ResponseHeaderRule>> for config::ResponseHeaderRule |
114 | 121 | strategy: aggregation_strategy, |
115 | 122 | })); |
116 | 123 | } |
117 | | - config::InsertSource::Expression(expression) => { |
| 124 | + config::InsertSource::Expression { expression } => { |
118 | 125 | // NOTE: In case we ever need to improve performance and not pass the whole context |
119 | 126 | // to VRL expressions, we can use: |
120 | 127 | // - compilation_result.program.info().target_assignments |
121 | 128 | // - compilation_result.program.info().target_queries |
122 | 129 | // to determine what parts of the context are actually needed by the expression |
| 130 | + let program = compile_expression(expression, None).map_err(|err| { |
| 131 | + HeaderRuleCompileError::ExpressionBuild(rule.name.clone(), err) |
| 132 | + })?; |
123 | 133 | actions.push(ResponseHeaderRule::InsertExpression( |
124 | 134 | ResponseInsertExpression { |
125 | 135 | name: build_header_name(&rule.name)?, |
126 | | - expression: Box::new(expression.clone()), |
| 136 | + expression: Box::new(program), |
127 | 137 | strategy: aggregation_strategy, |
128 | 138 | }, |
129 | 139 | )); |
|
0 commit comments