@@ -88,7 +88,14 @@ async fn function_handler(
8888 continue ;
8989 }
9090
91- let parameters = add_builtin_parameters ( captured_parameters ( & router, & source_key) ?) ;
91+ let parameters = match captured_parameters ( & router, & source_key) {
92+ Some ( params) => add_builtin_parameters ( params) ,
93+ None => {
94+ info ! ( "Triggered with {source_key} which does not match the input pattern, ignoring" ) ;
95+ continue ;
96+ }
97+ } ;
98+
9299 let output_key = template. render ( & parameters) ?;
93100 info ! ( "Copying {source_key:?} to {output_key:?}" ) ;
94101 if let Some ( bucket) = entity. bucket . name {
@@ -146,13 +153,18 @@ fn entities_from(event: S3Event) -> Result<Vec<S3Entity>, anyhow::Error> {
146153fn captured_parameters < Handler > (
147154 router : & Router < Handler > ,
148155 source_key : & str ,
149- ) -> Result < HashMap < String , String > , anyhow :: Error > {
156+ ) -> Option < HashMap < String , String > > {
150157 let matches = router. matches ( source_key) ;
158+
159+ if matches. is_empty ( ) {
160+ return None ;
161+ }
162+
151163 let mut data: HashMap < String , String > = HashMap :: new ( ) ;
152164 for capture in matches[ 0 ] . captures ( ) . into_iter ( ) {
153165 data. insert ( capture. name ( ) . into ( ) , capture. value ( ) . into ( ) ) ;
154166 }
155- Ok ( data)
167+ Some ( data)
156168}
157169
158170/// Return true if the given key matches the pattern and should be excluded from consideration
@@ -310,4 +322,24 @@ mod tests {
310322 . collect ( ) ;
311323 assert_ne ! ( filtered, keys) ;
312324 }
325+
326+ #[ test]
327+ fn test_captured_parameters ( ) {
328+ let mut router = Router :: new ( ) ;
329+ router. add ( "/:ignore/livemode/:table/:filename" , 1 ) ;
330+ let parameters = captured_parameters ( & router, "2025041518/testmode/sometable/part-00000-6dc656c3-fd08-4377-a846-a36f58f5937b-c000.zstd.parquet" ) ;
331+ assert_eq ! ( parameters, None ) ;
332+
333+ let parameters = captured_parameters ( & router, "2025041518/livemode/sometable/part-00000-6dc656c3-fd08-4377-a846-a36f58f5937b-c000.zstd.parquet" ) ;
334+
335+ let mut expected: HashMap < String , String > = HashMap :: default ( ) ;
336+ expected. insert ( "ignore" . into ( ) , "2025041518" . into ( ) ) ;
337+ expected. insert ( "table" . into ( ) , "sometable" . into ( ) ) ;
338+ expected. insert (
339+ "filename" . into ( ) ,
340+ "part-00000-6dc656c3-fd08-4377-a846-a36f58f5937b-c000.zstd.parquet" . into ( ) ,
341+ ) ;
342+
343+ assert_eq ! ( Some ( expected) , parameters) ;
344+ }
313345}
0 commit comments