@@ -11,10 +11,11 @@ use std::{
1111} ;
1212
1313use glob:: glob;
14+ use html_to_markdown_rs:: ConversionOptions ;
1415use linked_hash_set:: LinkedHashSet ;
1516use serde:: { Deserialize , Serialize } ;
1617use serde_yaml:: from_str as yaml_decode;
17- use tera:: { Context , Tera } ;
18+ use tera:: { Context , Tera , Value , try_get_value } ;
1819#[ derive( Serialize , Deserialize , Debug , Clone ) ]
1920struct RuleSet {
2021 #[ serde( default ) ]
@@ -180,6 +181,8 @@ struct BodyFilter {
180181 css_selector : Option < String > ,
181182 #[ serde( skip_serializing_if = "Option::is_none" ) ]
182183 ignore_css_selector : Option < String > ,
184+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
185+ options : Option < ConversionOptions > ,
183186}
184187
185188#[ derive( Serialize , Deserialize , Debug , Clone ) ]
@@ -270,10 +273,23 @@ struct RuleTestHeader {
270273#[ derive( Serialize , Deserialize , Debug , Clone ) ]
271274struct ShouldFilterBody {
272275 enable : bool ,
276+ #[ serde( default = "default_false" ) ]
277+ is_binary : bool ,
273278 original_body : String ,
274279 expected_body : String ,
275280}
276281
282+ #[ derive( Serialize , Deserialize , Debug , Clone ) ]
283+ #[ serde( untagged) ]
284+ pub enum Body {
285+ String ( String ) ,
286+ Bytes ( Vec < u8 > ) ,
287+ }
288+
289+ fn default_false ( ) -> bool {
290+ false
291+ }
292+
277293#[ derive( Serialize , Deserialize , Debug , Clone ) ]
278294struct ShouldFilterHeader {
279295 enable : bool ,
@@ -347,11 +363,13 @@ fn make_router_tests() {
347363 return ;
348364 }
349365
350- let templating = match Tera :: new ( "tests/templates/**/*" ) {
366+ let mut templating = match Tera :: new ( "tests/templates/**/*" ) {
351367 Ok ( t) => t,
352368 Err ( e) => panic ! ( "{}" , e) ,
353369 } ;
354370
371+ templating. register_filter ( "as_bytes" , filter_as_bytes_str) ;
372+
355373 let rule_sets_list = RuleSetList { rule_sets } ;
356374 let test_path = Path :: new ( "tests/redirectionio_router_test.rs" ) ;
357375
@@ -372,6 +390,18 @@ fn make_router_tests() {
372390 }
373391}
374392
393+ fn filter_as_bytes_str ( value : & Value , _: & HashMap < String , Value > ) -> tera:: Result < Value > {
394+ let body = try_get_value ! ( "as_bytes" , "value" , String , value) ;
395+
396+ Ok ( Value :: String (
397+ body. as_bytes ( )
398+ . iter ( )
399+ . map ( |b| format ! ( "\\ x{b:02x}" ) )
400+ . collect :: < Vec < String > > ( )
401+ . join ( "" ) ,
402+ ) )
403+ }
404+
375405fn read_router_tests ( path : & str ) -> HashMap < String , RuleSet > {
376406 let mut rule_sets = HashMap :: new ( ) ;
377407
0 commit comments