@@ -35,6 +35,7 @@ use indexmap::IndexMap;
3535use smallvec:: { smallvec, SmallVec } ;
3636use std:: {
3737 borrow:: Cow ,
38+ collections:: btree_map:: Entry ,
3839 io:: { ErrorKind , Write } ,
3940} ;
4041
@@ -257,18 +258,22 @@ impl<'a> CSSInliner<'a> {
257258 } ;
258259 styles. sort_unstable_by ( |_, ( a, _) , _, ( b, _) | a. cmp ( b) ) ;
259260 let attributes = & mut element. attributes ;
260- if let Some ( existing_style) = attributes. get_style_mut ( ) {
261- merge_styles ( existing_style, styles) ?;
262- } else {
263- let mut final_styles = String :: with_capacity ( 128 ) ;
264- for ( name, ( _, value) ) in styles {
265- final_styles. push_str ( name. as_str ( ) ) ;
266- final_styles. push ( ':' ) ;
267- replace_double_quotes ! ( final_styles, name, value) ;
268- final_styles. push ( ';' ) ;
261+ match attributes. get_style_entry ( ) {
262+ Entry :: Vacant ( entry) => {
263+ let mut final_styles = String :: with_capacity ( 128 ) ;
264+ for ( name, ( _, value) ) in styles {
265+ final_styles. push_str ( name. as_str ( ) ) ;
266+ final_styles. push ( ':' ) ;
267+ replace_double_quotes ! ( final_styles, name, value) ;
268+ final_styles. push ( ';' ) ;
269+ }
270+ entry. insert ( final_styles. into ( ) ) ;
269271 }
270- attributes. set_style ( final_styles) ;
271- } ;
272+ Entry :: Occupied ( mut entry) => {
273+ let existing_style = entry. get_mut ( ) ;
274+ merge_styles ( existing_style, styles) ?;
275+ }
276+ }
272277 }
273278 Ok ( document)
274279 }
0 commit comments