@@ -514,7 +514,7 @@ impl<T: Deserializable> Deserializable for Vec<T> {
514514 _range : TextRange ,
515515 _name : & str ,
516516 ) -> Option < Self :: Output > {
517- let mut result = Vec :: with_capacity ( values. len ( ) ) ;
517+ let mut result = Self :: Output :: with_capacity ( values. len ( ) ) ;
518518 result. extend (
519519 values. filter_map ( |value| Deserializable :: deserialize ( ctx, & value?, "" ) ) ,
520520 ) ;
@@ -583,11 +583,11 @@ impl<T: Deserializable + Eq + Hash, S: BuildHasher + Default> Deserializable for
583583 _range : TextRange ,
584584 _name : & str ,
585585 ) -> Option < Self :: Output > {
586- Some (
587- values
588- . filter_map ( |value| Deserializable :: deserialize ( ctx, & value?, "" ) )
589- . collect ( ) ,
590- )
586+ let mut result = Self :: Output :: with_capacity_and_hasher ( values . len ( ) , S :: default ( ) ) ;
587+ result . extend (
588+ values . filter_map ( |value| Deserializable :: deserialize ( ctx, & value?, "" ) ) ,
589+ ) ;
590+ Some ( result )
591591 }
592592 }
593593 value. deserialize ( ctx, Visitor ( PhantomData ) , name)
@@ -640,7 +640,7 @@ impl<T: Hash + Eq + Deserializable> Deserializable for indexmap::IndexSet<T> {
640640 _range : TextRange ,
641641 _name : & str ,
642642 ) -> Option < Self :: Output > {
643- let mut result = indexmap :: IndexSet :: with_capacity ( values. len ( ) ) ;
643+ let mut result = Self :: Output :: with_capacity ( values. len ( ) ) ;
644644 result. extend (
645645 values. filter_map ( |value| Deserializable :: deserialize ( ctx, & value?, "" ) ) ,
646646 ) ;
@@ -674,7 +674,8 @@ impl<K: Hash + Eq + Deserializable, V: Deserializable, S: Default + BuildHasher>
674674 _range : TextRange ,
675675 _name : & str ,
676676 ) -> Option < Self :: Output > {
677- let mut result = Self :: Output :: default ( ) ;
677+ let mut result =
678+ Self :: Output :: with_capacity_and_hasher ( members. len ( ) , S :: default ( ) ) ;
678679 for ( key, value) in members. flatten ( ) {
679680 let key = Deserializable :: deserialize ( ctx, & key, "" ) ;
680681 let value = Deserializable :: deserialize ( ctx, & value, "" ) ;
@@ -747,7 +748,8 @@ impl<K: Hash + Eq + Deserializable, V: Deserializable, S: Default + BuildHasher>
747748 _range : TextRange ,
748749 _name : & str ,
749750 ) -> Option < Self :: Output > {
750- let mut result = Self :: Output :: default ( ) ;
751+ let mut result =
752+ Self :: Output :: with_capacity_and_hasher ( members. len ( ) , S :: default ( ) ) ;
751753 for ( key, value) in members. flatten ( ) {
752754 let key = Deserializable :: deserialize ( ctx, & key, "" ) ;
753755 let value = Deserializable :: deserialize ( ctx, & value, "" ) ;
0 commit comments