@@ -295,7 +295,7 @@ data ParamOtherSchema = ParamOtherSchema
295 -- Default value is csv.
295 -- Default value is csv.
296 , _paramOtherSchemaCollectionFormat :: Maybe (CollectionFormat Param)
296 , _paramOtherSchemaCollectionFormat :: Maybe (CollectionFormat Param)
298− , _paramOtherSchemaCommon :: SchemaCommon Param Items
298+ , _paramOtherSchemaCommon :: SchemaCommon ParamOtherSchema Items
299 } deriving (Eq, Show, Generic)
299 } deriving (Eq, Show, Generic)
301data SwaggerType t where
301data SwaggerType t where
@@ -304,7 +304,7 @@ data SwaggerType t where
304 SwaggerInteger :: SwaggerType t
304 SwaggerInteger :: SwaggerType t
305 SwaggerBoolean :: SwaggerType t
305 SwaggerBoolean :: SwaggerType t
306 SwaggerArray :: SwaggerType t
306 SwaggerArray :: SwaggerType t
307− SwaggerFile :: SwaggerType Param
307+ SwaggerFile :: SwaggerType ParamOtherSchema
308 SwaggerNull :: SwaggerType Schema
308 SwaggerNull :: SwaggerType Schema
309 SwaggerObject :: SwaggerType Schema
309 SwaggerObject :: SwaggerType Schema
@@ -487,7 +487,7 @@ data Header = Header
487 -- Default value is @'ItemsCollectionCSV'@.
487 -- Default value is @'ItemsCollectionCSV'@.
488 , _headerCollectionFormat :: Maybe (CollectionFormat Items)
488 , _headerCollectionFormat :: Maybe (CollectionFormat Items)
490− , _headerCommon :: SchemaCommon Items Items
490+ , _headerCommon :: SchemaCommon Header Items
491 } deriving (Eq, Show, Generic)
491 } deriving (Eq, Show, Generic)
493data Example = Example { getExample :: Map MediaType Value }
493data Example = Example { getExample :: Map MediaType Value }
@@ -968,10 +968,10 @@ instance FromJSON Xml where
968instance FromJSON (SwaggerType Schema) where
968instance FromJSON (SwaggerType Schema) where
969 parseJSON = parseOneOf [SwaggerString, SwaggerInteger, SwaggerNumber, SwaggerBoolean, SwaggerArray, SwaggerNull, SwaggerObject]
969 parseJSON = parseOneOf [SwaggerString, SwaggerInteger, SwaggerNumber, SwaggerBoolean, SwaggerArray, SwaggerNull, SwaggerObject]
971−instance FromJSON (SwaggerType Param) where
971+instance FromJSON (SwaggerType ParamOtherSchema) where
972 parseJSON = parseOneOf [SwaggerString, SwaggerInteger, SwaggerNumber, SwaggerBoolean, SwaggerArray, SwaggerFile]
972 parseJSON = parseOneOf [SwaggerString, SwaggerInteger, SwaggerNumber, SwaggerBoolean, SwaggerArray, SwaggerFile]
974−instance FromJSON (SwaggerType Items) where
974+instance {-# OVERLAPPABLE #-} FromJSON (SwaggerType t) where
975 parseJSON = parseOneOf [SwaggerString, SwaggerInteger, SwaggerNumber, SwaggerBoolean, SwaggerArray]
975 parseJSON = parseOneOf [SwaggerString, SwaggerInteger, SwaggerNumber, SwaggerBoolean, SwaggerArray]
977instance FromJSON (CollectionFormat Param) where
977instance FromJSON (CollectionFormat Param) where
@@ -980,5 +980,8 @@ instance FromJSON (CollectionFormat Param) where
980instance FromJSON (CollectionFormat Items) where
980instance FromJSON (CollectionFormat Items) where
981 parseJSON = parseOneOf [CollectionCSV, CollectionSSV, CollectionTSV, CollectionPipes]
981 parseJSON = parseOneOf [CollectionCSV, CollectionSSV, CollectionTSV, CollectionPipes]
983+-- NOTE: The constraint @FromJSON (SwaggerType t)@ is necessary here!
984+-- Without the constraint the general instance will be used
985+-- that only accepts common types (i.e. NOT object, null or file).
983instance (FromJSON (SwaggerType t), FromJSON i) => FromJSON (SchemaCommon t i) where
986instance (FromJSON (SwaggerType t), FromJSON i) => FromJSON (SchemaCommon t i) where
984 parseJSON = genericParseJSON (jsonPrefix "SchemaCommon")
987 parseJSON = genericParseJSON (jsonPrefix "SchemaCommon")