11//! Module for JMESPath runtime variables.
22
3+ use indexmap:: IndexMap ;
34use serde:: de:: IntoDeserializer ;
45use serde:: * ;
56use serde_json:: error:: Error ;
67use serde_json:: value:: Value ;
78use std:: cmp:: { max, Ordering } ;
8- use std:: collections:: BTreeMap ;
99use std:: fmt;
1010use std:: iter:: Iterator ;
1111use std:: string:: ToString ;
@@ -55,7 +55,7 @@ pub enum Variable {
5555 Bool ( bool ) ,
5656 Number ( Number ) ,
5757 Array ( Vec < Rcvar > ) ,
58- Object ( BTreeMap < String , Rcvar > ) ,
58+ Object ( IndexMap < String , Rcvar > ) ,
5959 Expref ( Ast ) ,
6060}
6161
@@ -180,7 +180,7 @@ fn convert_map<'a, T>(value: T) -> Result<Variable, JmespathError>
180180where
181181 T : Iterator < Item = ( & ' a String , & ' a Value ) > ,
182182{
183- let mut map: BTreeMap < String , Rcvar > = BTreeMap :: new ( ) ;
183+ let mut map: IndexMap < String , Rcvar > = IndexMap :: new ( ) ;
184184 for kvp in value {
185185 map. insert ( kvp. 0 . to_owned ( ) , kvp. 1 . to_jmespath ( ) ?) ;
186186 }
@@ -264,9 +264,9 @@ impl Variable {
264264 self . as_object ( ) . is_some ( )
265265 }
266266
267- /// If the value is an Object, returns the associated BTreeMap .
267+ /// If the value is an Object, returns the associated IndexMap .
268268 /// Returns None otherwise.
269- pub fn as_object ( & self ) -> Option < & BTreeMap < String , Rcvar > > {
269+ pub fn as_object ( & self ) -> Option < & IndexMap < String , Rcvar > > {
270270 match self {
271271 Variable :: Object ( map) => Some ( map) ,
272272 _ => None ,
@@ -604,7 +604,7 @@ impl<'de> de::Deserialize<'de> for Variable {
604604 where
605605 V : de:: MapAccess < ' de > ,
606606 {
607- let mut values = BTreeMap :: new ( ) ;
607+ let mut values = IndexMap :: new ( ) ;
608608
609609 while let Some ( ( key, value) ) = visitor. next_entry ( ) ? {
610610 values. insert ( key, value) ;
@@ -868,7 +868,7 @@ impl<'de> de::SeqAccess<'de> for SeqDeserializer {
868868}
869869
870870struct MapDeserializer {
871- iter : <BTreeMap < String , Rcvar > as IntoIterator >:: IntoIter ,
871+ iter : <IndexMap < String , Rcvar > as IntoIterator >:: IntoIter ,
872872 value : Option < Variable > ,
873873}
874874
@@ -959,12 +959,12 @@ pub struct TupleVariantState {
959959#[ doc( hidden) ]
960960pub struct StructVariantState {
961961 name : String ,
962- map : BTreeMap < String , Rcvar > ,
962+ map : IndexMap < String , Rcvar > ,
963963}
964964
965965#[ doc( hidden) ]
966966pub struct MapState {
967- map : BTreeMap < String , Rcvar > ,
967+ map : IndexMap < String , Rcvar > ,
968968 next_key : Option < String > ,
969969}
970970
@@ -1096,7 +1096,7 @@ impl ser::Serializer for Serializer {
10961096 where
10971097 T : ser:: Serialize ,
10981098 {
1099- let mut values = BTreeMap :: new ( ) ;
1099+ let mut values = IndexMap :: new ( ) ;
11001100 values. insert ( String :: from ( variant) , Rcvar :: new ( to_variable ( & value) ?) ) ;
11011101 Ok ( Variable :: Object ( values) )
11021102 }
@@ -1141,7 +1141,7 @@ impl ser::Serializer for Serializer {
11411141
11421142 fn serialize_map ( self , _len : Option < usize > ) -> Result < MapState , Error > {
11431143 Ok ( MapState {
1144- map : BTreeMap :: new ( ) ,
1144+ map : IndexMap :: new ( ) ,
11451145 next_key : None ,
11461146 } )
11471147 }
@@ -1159,7 +1159,7 @@ impl ser::Serializer for Serializer {
11591159 ) -> Result < StructVariantState , Error > {
11601160 Ok ( StructVariantState {
11611161 name : String :: from ( variant) ,
1162- map : BTreeMap :: new ( ) ,
1162+ map : IndexMap :: new ( ) ,
11631163 } )
11641164 }
11651165}
@@ -1226,7 +1226,7 @@ impl ser::SerializeTupleVariant for TupleVariantState {
12261226 }
12271227
12281228 fn end ( self ) -> Result < Variable , Error > {
1229- let mut object = BTreeMap :: new ( ) ;
1229+ let mut object = IndexMap :: new ( ) ;
12301230 object. insert ( self . name , Rcvar :: new ( Variable :: Array ( self . vec ) ) ) ;
12311231 Ok ( Variable :: Object ( object) )
12321232 }
@@ -1295,7 +1295,7 @@ impl ser::SerializeStructVariant for StructVariantState {
12951295 }
12961296
12971297 fn end ( self ) -> Result < Variable , Error > {
1298- let mut object = BTreeMap :: new ( ) ;
1298+ let mut object = IndexMap :: new ( ) ;
12991299 object. insert ( self . name , Rcvar :: new ( Variable :: Object ( self . map ) ) ) ;
13001300 Ok ( Variable :: Object ( object) )
13011301 }
@@ -1307,7 +1307,6 @@ mod tests {
13071307 use crate :: ast:: { Ast , Comparator } ;
13081308 use crate :: Rcvar ;
13091309 use serde_json:: { self , Number , Value } ;
1310- use std:: collections:: BTreeMap ;
13111310
13121311 #[ test]
13131312 fn creates_variable_from_str ( ) {
@@ -1533,8 +1532,8 @@ mod tests {
15331532 #[ test]
15341533 fn test_parses_json_object ( ) {
15351534 let var = Variable :: from_json ( "{\" a\" : 1, \" b\" : {\" c\" : true}}" ) . unwrap ( ) ;
1536- let mut expected = BTreeMap :: new ( ) ;
1537- let mut sub_obj = BTreeMap :: new ( ) ;
1535+ let mut expected = IndexMap :: new ( ) ;
1536+ let mut sub_obj = IndexMap :: new ( ) ;
15381537 expected. insert (
15391538 "a" . to_string ( ) ,
15401539 Rcvar :: new ( Variable :: Number ( Number :: from_f64 ( 1.0 ) . unwrap ( ) ) ) ,
0 commit comments