@@ -277,7 +277,7 @@ data SwaggerParameter = SwaggerParameter
277277 } deriving (Eq, Show, Generic)
278278
279279data SwaggerParameterSchema
280− = SwaggerParameterBody SwaggerSchema
280+ = SwaggerParameterBody (SwaggerReferenced SwaggerSchema)
281281 | SwaggerParameterOther SwaggerParameterOtherSchema
282282 deriving (Eq, Show)
283283
@@ -408,8 +408,8 @@ data SwaggerSchema = SwaggerSchema
408408 } deriving (Eq, Show, Generic)
409409
410410data SwaggerSchemaItems
411− = SwaggerSchemaItemsObject SwaggerSchema
412− | SwaggerSchemaItemsArray [SwaggerSchema]
411+ = SwaggerSchemaItemsObject (SwaggerReferenced SwaggerSchema)
412+ | SwaggerSchemaItemsArray [SwaggerReferenced SwaggerSchema]
413413 deriving (Eq, Show)
414414
415415data SwaggerSchemaCommon = SwaggerSchemaCommon
@@ -460,14 +460,14 @@ data SwaggerXml = SwaggerXml
460460 -- Default value is @False@.
461461 -- The definition takes effect only when defined alongside type being array (outside the items).
462462 , swaggerXmlWrapped :: Bool
463− } deriving (Eq, Show)
463+ } deriving (Eq, Show, Generic)
464464
465465data SwaggerItems = SwaggerItems
466466 { -- | The internal type of the array.
467467 swaggerItemsType :: SwaggerItemsType
468468
469469 -- | The extending format for the previously mentioned type.
470− , swaggerItemsFormat :: SwaggerFormat
470+ , swaggerItemsFormat :: Maybe SwaggerFormat
471471
472472 -- | __Required if type is @'SwaggerItemsArray'@.__
473473 -- Describes the type of items in the array.
@@ -508,7 +508,7 @@ data SwaggerResponse = SwaggerResponse
508508 -- If this field does not exist, it means no content is returned as part of the response.
509509 -- As an extension to the Schema Object, its root type value may also be "file".
510510 -- This SHOULD be accompanied by a relevant produces mime-type.
511− , swaggerResponseSchema :: Maybe SwaggerSchema
511+ , swaggerResponseSchema :: Maybe (SwaggerReferenced SwaggerSchema)
512512
513513 -- | A list of headers that are sent with the response.
514514 , swaggerResponseHeaders :: HashMap HeaderName SwaggerHeader
@@ -724,10 +724,12 @@ instance SwaggerMonoid (HashMap Text SwaggerSchema) where
724724
725725instance SwaggerMonoid (HashMap Text (SwaggerReferenced SwaggerSchema)) where
726726 swaggerMempty = HashMap.empty
727− swaggerMappend = HashMap.unionWith merge
728− where
729− merge (SwaggerInline x) (SwaggerInline y) = SwaggerInline (x <> y)
730− merge _ y = y
727+ swaggerMappend = HashMap.unionWith swaggerMappend
728+
729+instance Monoid a => SwaggerMonoid (SwaggerReferenced a) where
730+ swaggerMempty = SwaggerInline mempty
731+ swaggerMappend (SwaggerInline x) (SwaggerInline y) = SwaggerInline (x <> y)
732+ swaggerMappend _ y = y
731733
732734instance SwaggerMonoid (HashMap Text SwaggerParameter) where
733735 swaggerMempty = HashMap.empty
@@ -778,11 +780,11 @@ deriveJSON (jsonPrefix "swaggerSchema") ''SwaggerSchemaCommon
778780deriveJSONDefault ''SwaggerScheme
779781deriveJSON' ''SwaggerTag
780782deriveJSON' ''SwaggerExternalDocs
781−deriveJSON' ''SwaggerXml
782783
783784deriveToJSON' ''SwaggerOperation
784785deriveToJSON' ''SwaggerResponse
785786deriveToJSON' ''SwaggerPathItem
787+deriveToJSON' ''SwaggerXml
786788
787789-- =======================================================================
788790-- Manual ToJSON instances
@@ -850,7 +852,7 @@ instance ToJSON SwaggerParameter where
850852 toJSON = genericToJSONWithSub "schema" (jsonPrefix "swaggerParameter")
851853
852854instance ToJSON SwaggerParameterSchema where
853− toJSON (SwaggerParameterBody s) = toJSON s <+> object [ "in" .= ("body" :: Text) ]
855+ toJSON (SwaggerParameterBody s) = object [ "in" .= ("body" :: Text), "schema" .= s ]
854856 toJSON (SwaggerParameterOther s) = toJSON s
855857
856858instance ToJSON SwaggerParameterOtherSchema where
@@ -957,7 +959,9 @@ instance FromJSON SwaggerParameterSchema where
957959 parseJSON json@(Object o) = do
958960 (i :: Text) <- o .: "in"
959961 case i of
960− "body" -> SwaggerParameterBody <$> parseJSON json
962+ "body" -> do
963+ schema <- o .: "schema"
964+ SwaggerParameterBody <$> parseJSON schema
961965 _ -> SwaggerParameterOther <$> parseJSON json
962966 parseJSON _ = empty
963967
@@ -1003,3 +1007,7 @@ instance FromJSON a => FromJSON (SwaggerReferenced a) where
10031007 = SwaggerRef <$> parseJSON json
10041008 <|> SwaggerInline <$> parseJSON json
10051009
1010+instance FromJSON SwaggerXml where
1011+ parseJSON = genericParseJSON (jsonPrefix "swaggerXml")
1012+ `withDefaults` [ "attribute" .= False, "wrapped" .= False ]
1013+