diff --git a/Cargo.toml b/Cargo.toml index 2a8e394ca..4f1753562 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,7 @@ include = ["src/**/*", "LICENSE", "crates-io.md"] [dependencies] indexmap = "1.7" +linked-hash-map = "0.5.4" openapi_type_derive = { path = "./derive", version = "0.2.4" } openapiv3 = "=0.4.0" serde_json = "1.0" diff --git a/src/impls.rs b/src/impls.rs index 488a63dae..407f027b5 100644 --- a/src/impls.rs +++ b/src/impls.rs @@ -1,5 +1,6 @@ use crate::{OpenapiSchema, OpenapiType}; use indexmap::{IndexMap, IndexSet}; +use linked_hash_map::LinkedHashMap; use openapiv3::{ AdditionalProperties, ArrayType, IntegerType, NumberFormat, NumberType, ObjectType, ReferenceOr, SchemaKind, StringFormat, StringType, Type, VariantOrUnknownOrEmpty @@ -228,7 +229,8 @@ fn map_schema() -> OpenapiSchema { impl_openapi_type!( BTreeMap, + HashMap, IndexMap, - HashMap + LinkedHashMap => map_schema::() ); diff --git a/tests/std_types.rs b/tests/std_types.rs index b5d78e431..f91da53bf 100644 --- a/tests/std_types.rs +++ b/tests/std_types.rs @@ -1,10 +1,12 @@ use indexmap::{IndexMap, IndexSet}; +use linked_hash_map::LinkedHashMap; use openapi_type::OpenapiType; use serde_json::Value; use std::{ collections::{BTreeMap, BTreeSet, HashMap, HashSet}, num::{NonZeroU128, NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU8, NonZeroUsize} }; + macro_rules! test_type { ($($($ty:ident)::+ $(<$($($generic:ident)::+),+>)?),* = $json:tt) => { paste::paste! { @@ -211,15 +213,20 @@ test_type!(BTreeSet, IndexSet, HashSet = { "uniqueItems": true }); -test_type!(BTreeMap, IndexMap, HashMap = { - "type": "object", - "properties": { - "default": { - "type": "integer" +test_type!( + BTreeMap, + HashMap, + IndexMap, + LinkedHashMap = { + "type": "object", + "properties": { + "default": { + "type": "integer" + } + }, + "required": ["default"], + "additionalProperties": { + "type": "string" } - }, - "required": ["default"], - "additionalProperties": { - "type": "string" } -}); +);