@@ -12,43 +12,13 @@ use crate::headers::{
1212use hive_router_config:: headers as config;
1313use http:: HeaderName ;
1414use regex_automata:: { meta, util:: syntax:: Config as SyntaxConfig } ;
15- use vrl:: {
16- compiler:: compile as vrl_compile, prelude:: Function as VrlFunction ,
17- stdlib:: all as vrl_build_functions,
18- } ;
19-
20- pub struct HeaderRuleCompilerContext {
21- vrl_functions : Vec < Box < dyn VrlFunction > > ,
22- }
23-
24- impl Default for HeaderRuleCompilerContext {
25- fn default ( ) -> Self {
26- Self :: new ( )
27- }
28- }
29-
30- impl HeaderRuleCompilerContext {
31- pub fn new ( ) -> Self {
32- Self {
33- vrl_functions : vrl_build_functions ( ) ,
34- }
35- }
36- }
3715
3816pub trait HeaderRuleCompiler < A > {
39- fn compile (
40- & self ,
41- ctx : & HeaderRuleCompilerContext ,
42- actions : & mut A ,
43- ) -> Result < ( ) , HeaderRuleCompileError > ;
17+ fn compile ( & self , actions : & mut A ) -> Result < ( ) , HeaderRuleCompileError > ;
4418}
4519
4620impl HeaderRuleCompiler < Vec < RequestHeaderRule > > for config:: RequestHeaderRule {
47- fn compile (
48- & self ,
49- ctx : & HeaderRuleCompilerContext ,
50- actions : & mut Vec < RequestHeaderRule > ,
51- ) -> Result < ( ) , HeaderRuleCompileError > {
21+ fn compile ( & self , actions : & mut Vec < RequestHeaderRule > ) -> Result < ( ) , HeaderRuleCompileError > {
5222 match self {
5323 config:: RequestHeaderRule :: Propagate ( rule) => {
5424 let spec = materialize_match_spec (
@@ -78,16 +48,11 @@ impl HeaderRuleCompiler<Vec<RequestHeaderRule>> for config::RequestHeaderRule {
7848 value : build_header_value ( & rule. name , value) ?,
7949 } ) ) ;
8050 }
81- config:: InsertSource :: Expression { expression } => {
82- let compilation_result =
83- vrl_compile ( expression, & ctx. vrl_functions ) . map_err ( |e| {
84- HeaderRuleCompileError :: new_expression_build ( rule. name . clone ( ) , e)
85- } ) ?;
86-
51+ config:: InsertSource :: Expression ( expression) => {
8752 actions. push ( RequestHeaderRule :: InsertExpression (
8853 RequestInsertExpression {
8954 name : build_header_name ( & rule. name ) ?,
90- expression : Box :: new ( compilation_result . program ) ,
55+ expression : Box :: new ( expression . clone ( ) ) ,
9156 } ,
9257 ) ) ;
9358 }
@@ -112,11 +77,7 @@ impl HeaderRuleCompiler<Vec<RequestHeaderRule>> for config::RequestHeaderRule {
11277}
11378
11479impl HeaderRuleCompiler < Vec < ResponseHeaderRule > > for config:: ResponseHeaderRule {
115- fn compile (
116- & self ,
117- ctx : & HeaderRuleCompilerContext ,
118- actions : & mut Vec < ResponseHeaderRule > ,
119- ) -> Result < ( ) , HeaderRuleCompileError > {
80+ fn compile ( & self , actions : & mut Vec < ResponseHeaderRule > ) -> Result < ( ) , HeaderRuleCompileError > {
12081 match self {
12182 config:: ResponseHeaderRule :: Propagate ( rule) => {
12283 let aggregation_strategy = rule. algorithm . into ( ) ;
@@ -153,21 +114,16 @@ impl HeaderRuleCompiler<Vec<ResponseHeaderRule>> for config::ResponseHeaderRule
153114 strategy : aggregation_strategy,
154115 } ) ) ;
155116 }
156- config:: InsertSource :: Expression { expression } => {
117+ config:: InsertSource :: Expression ( expression) => {
157118 // NOTE: In case we ever need to improve performance and not pass the whole context
158119 // to VRL expressions, we can use:
159120 // - compilation_result.program.info().target_assignments
160121 // - compilation_result.program.info().target_queries
161122 // to determine what parts of the context are actually needed by the expression
162- let compilation_result = vrl_compile ( expression, & ctx. vrl_functions )
163- . map_err ( |e| {
164- HeaderRuleCompileError :: new_expression_build ( rule. name . clone ( ) , e)
165- } ) ?;
166-
167123 actions. push ( ResponseHeaderRule :: InsertExpression (
168124 ResponseInsertExpression {
169125 name : build_header_name ( & rule. name ) ?,
170- expression : Box :: new ( compilation_result . program ) ,
126+ expression : Box :: new ( expression . clone ( ) ) ,
171127 strategy : aggregation_strategy,
172128 } ,
173129 ) ) ;
@@ -196,19 +152,18 @@ impl HeaderRuleCompiler<Vec<ResponseHeaderRule>> for config::ResponseHeaderRule
196152pub fn compile_headers_plan (
197153 cfg : & config:: HeadersConfig ,
198154) -> Result < HeaderRulesPlan , HeaderRuleCompileError > {
199- let ctx = HeaderRuleCompilerContext :: new ( ) ;
200155 let mut request_plan = RequestHeaderRules :: default ( ) ;
201156 let mut response_plan = ResponseHeaderRules :: default ( ) ;
202157
203158 if let Some ( global_rules) = & cfg. all {
204- request_plan. global = compile_request_header_rules ( & ctx , global_rules) ?;
205- response_plan. global = compile_response_header_rules ( & ctx , global_rules) ?;
159+ request_plan. global = compile_request_header_rules ( global_rules) ?;
160+ response_plan. global = compile_response_header_rules ( global_rules) ?;
206161 }
207162
208163 if let Some ( subgraph_rules_map) = & cfg. subgraphs {
209164 for ( subgraph_name, subgraph_rules) in subgraph_rules_map {
210- let request_actions = compile_request_header_rules ( & ctx , subgraph_rules) ?;
211- let response_actions = compile_response_header_rules ( & ctx , subgraph_rules) ?;
165+ let request_actions = compile_request_header_rules ( subgraph_rules) ?;
166+ let response_actions = compile_response_header_rules ( subgraph_rules) ?;
212167 request_plan
213168 . by_subgraph
214169 . insert ( subgraph_name. clone ( ) , request_actions) ;
@@ -225,26 +180,24 @@ pub fn compile_headers_plan(
225180}
226181
227182fn compile_request_header_rules (
228- ctx : & HeaderRuleCompilerContext ,
229183 header_rules : & config:: HeaderRules ,
230184) -> Result < Vec < RequestHeaderRule > , HeaderRuleCompileError > {
231185 let mut request_actions = Vec :: new ( ) ;
232186 if let Some ( request_rule_entries) = & header_rules. request {
233187 for request_rule in request_rule_entries {
234- request_rule. compile ( ctx , & mut request_actions) ?;
188+ request_rule. compile ( & mut request_actions) ?;
235189 }
236190 }
237191 Ok ( request_actions)
238192}
239193
240194fn compile_response_header_rules (
241- ctx : & HeaderRuleCompilerContext ,
242195 header_rules : & config:: HeaderRules ,
243196) -> Result < Vec < ResponseHeaderRule > , HeaderRuleCompileError > {
244197 let mut response_actions = Vec :: new ( ) ;
245198 if let Some ( response_rule_entries) = & header_rules. response {
246199 for response_rule in response_rule_entries {
247- response_rule. compile ( ctx , & mut response_actions) ?;
200+ response_rule. compile ( & mut response_actions) ?;
248201 }
249202 }
250203 Ok ( response_actions)
@@ -358,7 +311,7 @@ mod tests {
358311 use http:: HeaderName ;
359312
360313 use crate :: headers:: {
361- compile:: { build_header_value, HeaderRuleCompiler , HeaderRuleCompilerContext } ,
314+ compile:: { build_header_value, HeaderRuleCompiler } ,
362315 errors:: HeaderRuleCompileError ,
363316 plan:: { HeaderAggregationStrategy , RequestHeaderRule , ResponseHeaderRule } ,
364317 } ;
@@ -378,9 +331,8 @@ mod tests {
378331 rename : None ,
379332 default : None ,
380333 } ) ;
381- let ctx = HeaderRuleCompilerContext :: new ( ) ;
382334 let mut actions = Vec :: new ( ) ;
383- rule. compile ( & ctx , & mut actions) . unwrap ( ) ;
335+ rule. compile ( & mut actions) . unwrap ( ) ;
384336 assert_eq ! ( actions. len( ) , 1 ) ;
385337 match & actions[ 0 ] {
386338 RequestHeaderRule :: PropagateNamed ( data) => {
@@ -401,8 +353,7 @@ mod tests {
401353 } ,
402354 } ) ;
403355 let mut actions = Vec :: new ( ) ;
404- let ctx = HeaderRuleCompilerContext :: new ( ) ;
405- rule. compile ( & ctx, & mut actions) . unwrap ( ) ;
356+ rule. compile ( & mut actions) . unwrap ( ) ;
406357 assert_eq ! ( actions. len( ) , 1 ) ;
407358 match & actions[ 0 ] {
408359 RequestHeaderRule :: InsertStatic ( data) => {
@@ -423,8 +374,7 @@ mod tests {
423374 } ,
424375 } ) ;
425376 let mut actions = Vec :: new ( ) ;
426- let ctx = HeaderRuleCompilerContext :: new ( ) ;
427- rule. compile ( & ctx, & mut actions) . unwrap ( ) ;
377+ rule. compile ( & mut actions) . unwrap ( ) ;
428378 assert_eq ! ( actions. len( ) , 1 ) ;
429379 match & actions[ 0 ] {
430380 RequestHeaderRule :: RemoveNamed ( data) => {
@@ -449,8 +399,7 @@ mod tests {
449399 default : Some ( "def" . to_string ( ) ) ,
450400 } ) ;
451401 let mut actions = Vec :: new ( ) ;
452- let ctx = HeaderRuleCompilerContext :: new ( ) ;
453- let err = rule. compile ( & ctx, & mut actions) . unwrap_err ( ) ;
402+ let err = rule. compile ( & mut actions) . unwrap_err ( ) ;
454403 match err {
455404 HeaderRuleCompileError :: InvalidDefault => { }
456405 _ => panic ! ( "Expected InvalidDefault error" ) ,
@@ -470,8 +419,7 @@ mod tests {
470419 algorithm : config:: AggregationAlgo :: First ,
471420 } ) ;
472421 let mut actions = Vec :: new ( ) ;
473- let ctx = HeaderRuleCompilerContext :: new ( ) ;
474- rule. compile ( & ctx, & mut actions) . unwrap ( ) ;
422+ rule. compile ( & mut actions) . unwrap ( ) ;
475423 assert_eq ! ( actions. len( ) , 1 ) ;
476424 match & actions[ 0 ] {
477425 ResponseHeaderRule :: PropagateNamed ( data) => {
0 commit comments