@@ -440,6 +440,15 @@ impl Params {
440440 self . set ( key, format ! ( "{value}" ) ) ;
441441 self
442442 }
443+
444+ /// Merge in parameters from other Params struct,
445+ /// overwriting the keys that are in both
446+ /// with the values from the new Params struct.
447+ pub fn merge_in_from_params ( & mut self , new_params : Self ) -> & mut Self {
448+ let mut new_params = new_params;
449+ self . inner . append ( & mut new_params. inner ) ;
450+ self
451+ }
443452}
444453
445454#[ cfg( test) ]
@@ -502,4 +511,18 @@ mod tests {
502511 assert_eq ! ( p. get( Param :: Height ) , Some ( "14" ) ) ;
503512 Ok ( ( ) )
504513 }
514+
515+ #[ test]
516+ fn test_merge ( ) -> Result < ( ) > {
517+ let mut p = Params :: from_str ( "w=12\n a=5\n h=14" ) ?;
518+ let p2 = Params :: from_str ( "L=1\n h=17" ) ?;
519+ assert_eq ! ( p. len( ) , 3 ) ;
520+ p. merge_in_from_params ( p2) ;
521+ assert_eq ! ( p. len( ) , 4 ) ;
522+ assert_eq ! ( p. get( Param :: Width ) , Some ( "12" ) ) ;
523+ assert_eq ! ( p. get( Param :: Height ) , Some ( "17" ) ) ;
524+ assert_eq ! ( p. get( Param :: Forwarded ) , Some ( "5" ) ) ;
525+ assert_eq ! ( p. get( Param :: IsEdited ) , Some ( "1" ) ) ;
526+ Ok ( ( ) )
527+ }
505528}
0 commit comments