11use crate :: form;
22use crate :: serde;
33use serde_json:: Value ;
4- use std:: collections:: { HashMap , HashSet } ;
4+ use std:: collections:: { BTreeMap , BTreeSet } ;
55use std:: convert:: { TryFrom , TryInto } ;
66
77#[ derive( Clone , Debug , Default , PartialEq ) ]
88pub struct Schema {
9- pub definitions : HashMap < String , Schema > ,
9+ pub definitions : BTreeMap < String , Schema > ,
1010 pub form : form:: Form ,
11- pub metadata : HashMap < String , Value > ,
11+ pub metadata : BTreeMap < String , Value > ,
1212}
1313
1414#[ cfg( feature = "fuzz" ) ]
@@ -23,7 +23,7 @@ impl arbitrary::Arbitrary for Schema {
2323 // manipulating arbitrary JSON values.
2424 //
2525 // So we'll always have metadata be None.
26- metadata : HashMap :: new ( ) ,
26+ metadata : BTreeMap :: new ( ) ,
2727 } )
2828 }
2929}
@@ -205,7 +205,7 @@ impl TryFrom<serde::Schema> for Schema {
205205 return Err ( SerdeConvertError :: InvalidForm ) ;
206206 }
207207
208- let mut definitions = HashMap :: new ( ) ;
208+ let mut definitions = BTreeMap :: new ( ) ;
209209 for ( name, sub_schema) in schema. definitions . unwrap_or_default ( ) {
210210 definitions. insert ( name, sub_schema. try_into ( ) ?) ;
211211 }
@@ -235,7 +235,7 @@ impl TryFrom<serde::Schema> for Schema {
235235 }
236236
237237 if let Some ( enum_) = schema. enum_ {
238- let mut values = HashSet :: new ( ) ;
238+ let mut values = BTreeSet :: new ( ) ;
239239 for val in enum_ {
240240 if values. contains ( & val) {
241241 return Err ( SerdeConvertError :: DuplicatedEnumValue ( val) ) ;
@@ -268,12 +268,12 @@ impl TryFrom<serde::Schema> for Schema {
268268 if schema. properties . is_some ( ) || schema. optional_properties . is_some ( ) {
269269 let has_required = schema. properties . is_some ( ) ;
270270
271- let mut required = HashMap :: new ( ) ;
271+ let mut required = BTreeMap :: new ( ) ;
272272 for ( name, sub_schema) in schema. properties . unwrap_or_default ( ) {
273273 required. insert ( name, sub_schema. try_into ( ) ?) ;
274274 }
275275
276- let mut optional = HashMap :: new ( ) ;
276+ let mut optional = BTreeMap :: new ( ) ;
277277 for ( name, sub_schema) in schema. optional_properties . unwrap_or_default ( ) {
278278 optional. insert ( name, sub_schema. try_into ( ) ?) ;
279279 }
@@ -303,7 +303,7 @@ impl TryFrom<serde::Schema> for Schema {
303303 }
304304
305305 if let Some ( discriminator) = schema. discriminator {
306- let mut mapping = HashMap :: new ( ) ;
306+ let mut mapping = BTreeMap :: new ( ) ;
307307 for ( name, sub_schema) in schema. mapping . unwrap ( ) {
308308 mapping. insert ( name, sub_schema. try_into ( ) ?) ;
309309 }
@@ -605,7 +605,7 @@ mod tests {
605605 required: vec![ ( "foo" . to_owned( ) , Default :: default ( ) ) ]
606606 . into_iter( )
607607 . collect( ) ,
608- optional: HashMap :: new( ) ,
608+ optional: BTreeMap :: new( ) ,
609609 additional: false ,
610610 has_required: true ,
611611 } ) ,
@@ -627,7 +627,7 @@ mod tests {
627627 Ok ( Schema {
628628 form: form:: Form :: Properties ( form:: Properties {
629629 nullable: false ,
630- required: HashMap :: new( ) ,
630+ required: BTreeMap :: new( ) ,
631631 optional: vec![ ( "foo" . to_owned( ) , Default :: default ( ) ) ]
632632 . into_iter( )
633633 . collect( ) ,
@@ -909,7 +909,7 @@ mod tests {
909909
910910 #[ test]
911911 fn spec_invalid_schemas_suite ( ) {
912- let test_cases: HashMap < String , Value > = serde_json:: from_str ( include_str ! (
912+ let test_cases: BTreeMap < String , Value > = serde_json:: from_str ( include_str ! (
913913 "../json-typedef-spec/tests/invalid_schemas.json"
914914 ) )
915915 . unwrap ( ) ;
0 commit comments