@@ -278,10 +278,10 @@ impl<T: TryFromObject> FromArgOptional for T {
278278/// KwArgs is only for functions that accept arbitrary keyword arguments. For
279279/// functions that accept only *specific* named arguments, a rust struct with
280280/// an appropriate FromArgs implementation must be created.
281- pub struct KwArgs < T = PyObjectRef > ( HashMap < String , T > ) ;
281+ pub struct KwArgs < T = PyObjectRef > ( IndexMap < String , T > ) ;
282282
283283impl < T > KwArgs < T > {
284- pub fn new ( map : HashMap < String , T > ) -> Self {
284+ pub fn new ( map : IndexMap < String , T > ) -> Self {
285285 KwArgs ( map)
286286 }
287287
@@ -290,13 +290,13 @@ impl<T> KwArgs<T> {
290290 }
291291}
292292impl < T > From < HashMap < String , T > > for KwArgs < T > {
293- fn from ( map : HashMap < String , T > ) -> Self {
294- KwArgs ( map )
293+ fn from ( kwargs : HashMap < String , T > ) -> Self {
294+ KwArgs ( kwargs . into_iter ( ) . collect ( ) )
295295 }
296296}
297297impl < T > Default for KwArgs < T > {
298298 fn default ( ) -> Self {
299- KwArgs ( HashMap :: new ( ) )
299+ KwArgs ( IndexMap :: new ( ) )
300300 }
301301}
302302
@@ -305,7 +305,7 @@ where
305305 T : TryFromObject ,
306306{
307307 fn from_args ( vm : & VirtualMachine , args : & mut PyFuncArgs ) -> Result < Self , ArgumentError > {
308- let mut kwargs = HashMap :: new ( ) ;
308+ let mut kwargs = IndexMap :: new ( ) ;
309309 for ( name, value) in args. remaining_keywords ( ) {
310310 kwargs. insert ( name, T :: try_from_object ( vm, value) ?) ;
311311 }
@@ -315,7 +315,7 @@ where
315315
316316impl < T > IntoIterator for KwArgs < T > {
317317 type Item = ( String , T ) ;
318- type IntoIter = std :: collections :: hash_map :: IntoIter < String , T > ;
318+ type IntoIter = indexmap :: map :: IntoIter < String , T > ;
319319
320320 fn into_iter ( self ) -> Self :: IntoIter {
321321 self . 0 . into_iter ( )
0 commit comments