git.iko.soy/typeable/openapi3
on master help sign in
Fix refs and Xml object
00ca24cNickolay Kudasov
src/Data/Swagger/Internal.hs+21−13
@@ -277,7 +277,7 @@ data SwaggerParameter = SwaggerParameter
277 } deriving (Eq, Show, Generic)
277 } deriving (Eq, Show, Generic)
278
278
279data SwaggerParameterSchema
279data SwaggerParameterSchema
280− = SwaggerParameterBody SwaggerSchema
280+ = SwaggerParameterBody (SwaggerReferenced SwaggerSchema)
281 | SwaggerParameterOther SwaggerParameterOtherSchema
281 | SwaggerParameterOther SwaggerParameterOtherSchema
282 deriving (Eq, Show)
282 deriving (Eq, Show)
283
283
@@ -408,8 +408,8 @@ data SwaggerSchema = SwaggerSchema
408 } deriving (Eq, Show, Generic)
408 } deriving (Eq, Show, Generic)
409
409
410data SwaggerSchemaItems
410data SwaggerSchemaItems
411− = SwaggerSchemaItemsObject SwaggerSchema
411+ = SwaggerSchemaItemsObject (SwaggerReferenced SwaggerSchema)
412− | SwaggerSchemaItemsArray [SwaggerSchema]
412+ | SwaggerSchemaItemsArray [SwaggerReferenced SwaggerSchema]
413 deriving (Eq, Show)
413 deriving (Eq, Show)
414
414
415data SwaggerSchemaCommon = SwaggerSchemaCommon
415data SwaggerSchemaCommon = SwaggerSchemaCommon
@@ -460,14 +460,14 @@ data SwaggerXml = SwaggerXml
460 -- Default value is @False@.
460 -- Default value is @False@.
461 -- The definition takes effect only when defined alongside type being array (outside the items).
461 -- The definition takes effect only when defined alongside type being array (outside the items).
462 , swaggerXmlWrapped :: Bool
462 , swaggerXmlWrapped :: Bool
463− } deriving (Eq, Show)
463+ } deriving (Eq, Show, Generic)
464
464
465data SwaggerItems = SwaggerItems
465data SwaggerItems = SwaggerItems
466 { -- | The internal type of the array.
466 { -- | The internal type of the array.
467 swaggerItemsType :: SwaggerItemsType
467 swaggerItemsType :: SwaggerItemsType
468
468
469 -- | The extending format for the previously mentioned type.
469 -- | The extending format for the previously mentioned type.
470− , swaggerItemsFormat :: SwaggerFormat
470+ , swaggerItemsFormat :: Maybe SwaggerFormat
471
471
472 -- | __Required if type is @'SwaggerItemsArray'@.__
472 -- | __Required if type is @'SwaggerItemsArray'@.__
473 -- Describes the type of items in the array.
473 -- Describes the type of items in the array.
@@ -508,7 +508,7 @@ data SwaggerResponse = SwaggerResponse
508 -- If this field does not exist, it means no content is returned as part of the response.
508 -- If this field does not exist, it means no content is returned as part of the response.
509 -- As an extension to the Schema Object, its root type value may also be "file".
509 -- As an extension to the Schema Object, its root type value may also be "file".
510 -- This SHOULD be accompanied by a relevant produces mime-type.
510 -- This SHOULD be accompanied by a relevant produces mime-type.
511− , swaggerResponseSchema :: Maybe SwaggerSchema
511+ , swaggerResponseSchema :: Maybe (SwaggerReferenced SwaggerSchema)
512
512
513 -- | A list of headers that are sent with the response.
513 -- | A list of headers that are sent with the response.
514 , swaggerResponseHeaders :: HashMap HeaderName SwaggerHeader
514 , swaggerResponseHeaders :: HashMap HeaderName SwaggerHeader
@@ -724,10 +724,12 @@ instance SwaggerMonoid (HashMap Text SwaggerSchema) where
724
724
725instance SwaggerMonoid (HashMap Text (SwaggerReferenced SwaggerSchema)) where
725instance SwaggerMonoid (HashMap Text (SwaggerReferenced SwaggerSchema)) where
726 swaggerMempty = HashMap.empty
726 swaggerMempty = HashMap.empty
727− swaggerMappend = HashMap.unionWith merge
727+ swaggerMappend = HashMap.unionWith swaggerMappend
728− where
728+
729+instance Monoid a => SwaggerMonoid (SwaggerReferenced a) where
730+ swaggerMempty = SwaggerInline mempty
729− merge (SwaggerInline x) (SwaggerInline y) = SwaggerInline (x <> y)
731+ swaggerMappend (SwaggerInline x) (SwaggerInline y) = SwaggerInline (x <> y)
730− merge _ y = y
732+ swaggerMappend _ y = y
731
733
732instance SwaggerMonoid (HashMap Text SwaggerParameter) where
734instance SwaggerMonoid (HashMap Text SwaggerParameter) where
733 swaggerMempty = HashMap.empty
735 swaggerMempty = HashMap.empty
@@ -778,11 +780,11 @@ deriveJSON (jsonPrefix "swaggerSchema") ''SwaggerSchemaCommon
778deriveJSONDefault ''SwaggerScheme
780deriveJSONDefault ''SwaggerScheme
779deriveJSON' ''SwaggerTag
781deriveJSON' ''SwaggerTag
780deriveJSON' ''SwaggerExternalDocs
782deriveJSON' ''SwaggerExternalDocs
781−deriveJSON' ''SwaggerXml
782
783
783deriveToJSON' ''SwaggerOperation
784deriveToJSON' ''SwaggerOperation
784deriveToJSON' ''SwaggerResponse
785deriveToJSON' ''SwaggerResponse
785deriveToJSON' ''SwaggerPathItem
786deriveToJSON' ''SwaggerPathItem
787+deriveToJSON' ''SwaggerXml
786
788
787-- =======================================================================
789-- =======================================================================
788-- Manual ToJSON instances
790-- Manual ToJSON instances
@@ -850,7 +852,7 @@ instance ToJSON SwaggerParameter where
850 toJSON = genericToJSONWithSub "schema" (jsonPrefix "swaggerParameter")
852 toJSON = genericToJSONWithSub "schema" (jsonPrefix "swaggerParameter")
851
853
852instance ToJSON SwaggerParameterSchema where
854instance ToJSON SwaggerParameterSchema where
853− toJSON (SwaggerParameterBody s) = toJSON s <+> object [ "in" .= ("body" :: Text) ]
855+ toJSON (SwaggerParameterBody s) = object [ "in" .= ("body" :: Text), "schema" .= s ]
854 toJSON (SwaggerParameterOther s) = toJSON s
856 toJSON (SwaggerParameterOther s) = toJSON s
855
857
856instance ToJSON SwaggerParameterOtherSchema where
858instance ToJSON SwaggerParameterOtherSchema where
@@ -957,7 +959,9 @@ instance FromJSON SwaggerParameterSchema where
957 parseJSON json@(Object o) = do
959 parseJSON json@(Object o) = do
958 (i :: Text) <- o .: "in"
960 (i :: Text) <- o .: "in"
959 case i of
961 case i of
962+ "body" -> do
963+ schema <- o .: "schema"
960− "body" -> SwaggerParameterBody <$> parseJSON json
964+ SwaggerParameterBody <$> parseJSON schema
961 _ -> SwaggerParameterOther <$> parseJSON json
965 _ -> SwaggerParameterOther <$> parseJSON json
962 parseJSON _ = empty
966 parseJSON _ = empty
963
967
@@ -1003,3 +1007,7 @@ instance FromJSON a => FromJSON (SwaggerReferenced a) where
1003 = SwaggerRef <$> parseJSON json
1007 = SwaggerRef <$> parseJSON json
1004 <|> SwaggerInline <$> parseJSON json
1008 <|> SwaggerInline <$> parseJSON json
1005
1009
1010+instance FromJSON SwaggerXml where
1011+ parseJSON = genericParseJSON (jsonPrefix "swaggerXml")
1012+ `withDefaults` [ "attribute" .= False, "wrapped" .= False ]
1013+