@@ -35,6 +35,7 @@ use indexmap::IndexMap;
35
35
use smallvec:: { smallvec, SmallVec } ;
36
36
use std:: {
37
37
borrow:: Cow ,
38
+ collections:: btree_map:: Entry ,
38
39
io:: { ErrorKind , Write } ,
39
40
} ;
40
41
@@ -257,18 +258,22 @@ impl<'a> CSSInliner<'a> {
257
258
} ;
258
259
styles. sort_unstable_by ( |_, ( a, _) , _, ( b, _) | a. cmp ( b) ) ;
259
260
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 ( ) ) ;
269
271
}
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
+ }
272
277
}
273
278
Ok ( document)
274
279
}
0 commit comments