@@ -1,4 +1,5 @@
11{-# LANGUAGE CPP #-}
2+{-# LANGUAGE DataKinds #-}
23{-# LANGUAGE DeriveDataTypeable #-}
34{-# LANGUAGE DeriveFunctor #-}
45{-# LANGUAGE DeriveGeneric #-}
@@ -8,15 +9,15 @@
89{-# LANGUAGE GADTs #-}
910{-# LANGUAGE GeneralizedNewtypeDeriving #-}
1011{-# LANGUAGE OverloadedStrings #-}
11−{-# LANGUAGE PolyKinds #-}
1212{-# LANGUAGE RecordWildCards #-}
1313{-# LANGUAGE ScopedTypeVariables #-}
1414{-# LANGUAGE StandaloneDeriving #-}
15−{-# LANGUAGE UndecidableInstances #-}
16−
17−{-# LANGUAGE DataKinds #-}
18−{-# LANGUAGE TypeFamilies #-}
1915{-# LANGUAGE TemplateHaskell #-}
16+{-# LANGUAGE TypeFamilies #-}
17+{-# LANGUAGE UndecidableInstances #-}
18+#if __GLASGOW_HASKELL__ <710
19+{-# LANGUAGE PolyKinds #-}
20+#endif
2021#include "overlapping-compat.h"
2122module Data.Swagger.Internal where
2223
@@ -25,11 +26,9 @@ import Prelude.Compat
2526
2627import Control.Lens ((&), (.~), (?~))
2728import Control.Applicative
28−import Control.Monad
2929import Data.Aeson
3030import qualified Data.Aeson.Types as JSON
3131import Data.Data (Data(..), Typeable, mkConstr, mkDataType, Fixity(..), Constr, DataType, constrIndex)
32−import Data.HashMap.Strict (HashMap)
3332import qualified Data.HashMap.Strict as HashMap
3433import Data.Map (Map)
3534import qualified Data.Map as Map
@@ -355,7 +354,7 @@ data ParamOtherSchema = ParamOtherSchema
355354 -- Default value is @False@.
356355 , _paramOtherSchemaAllowEmptyValue :: Maybe Bool
357356
358− , _paramOtherSchemaParamSchema :: ParamSchema SwaggerKindParamOtherSchema
357+ , _paramOtherSchemaParamSchema :: ParamSchema 'SwaggerKindParamOtherSchema
359358 } deriving (Eq, Show, Generic, Typeable, Data)
360359
361360-- | Items for @'SwaggerArray'@ schemas.
@@ -370,8 +369,8 @@ data ParamOtherSchema = ParamOtherSchema
370369-- @'SwaggerItemsArray'@ should be used to specify tuple @'Schema'@s.
371370data SwaggerItems t where
372371 SwaggerItemsPrimitive :: Maybe (CollectionFormat k) -> ParamSchema k-> SwaggerItems k
373− SwaggerItemsObject :: Referenced Schema -> SwaggerItems SwaggerKindSchema
374− SwaggerItemsArray :: [Referenced Schema] -> SwaggerItems SwaggerKindSchema
372+ SwaggerItemsObject :: Referenced Schema -> SwaggerItems 'SwaggerKindSchema
373+ SwaggerItemsArray :: [Referenced Schema] -> SwaggerItems 'SwaggerKindSchema
375374 deriving (Typeable)
376375
377376deriving instance Eq (SwaggerItems t)
@@ -393,7 +392,7 @@ swaggerItemsDataType = mkDataType "Data.Swagger.SwaggerItems" [swaggerItemsPrimi
393392-- Note: unfortunately we have to write these Data instances by hand,
394393-- to get better contexts / avoid duplicate name when using standalone deriving
395394
396−instance Data t => Data (SwaggerItems (SwaggerKindNormal t)) where
395+instance Data t => Data (SwaggerItems ('SwaggerKindNormal t)) where
397396 -- TODO: define gfoldl
398397 gunfold k z c = case constrIndex c of
399398 1 -> k (k (z SwaggerItemsPrimitive))
@@ -402,7 +401,7 @@ instance Data t => Data (SwaggerItems (SwaggerKindNormal t)) where
402401 dataTypeOf _ = swaggerItemsDataType
403402
404403-- SwaggerItems SwaggerKindParamOtherSchema can be constructed using SwaggerItemsPrimitive only
405−instance Data (SwaggerItems SwaggerKindParamOtherSchema) where
404+instance Data (SwaggerItems 'SwaggerKindParamOtherSchema) where
406405 -- TODO: define gfoldl
407406 gunfold k z c = case constrIndex c of
408407 1 -> k (k (z SwaggerItemsPrimitive))
@@ -410,18 +409,19 @@ instance Data (SwaggerItems SwaggerKindParamOtherSchema) where
410409 toConstr _ = swaggerItemsPrimitiveConstr
411410 dataTypeOf _ = swaggerItemsDataType
412411
413−instance Data (SwaggerItems SwaggerKindSchema) where
412+instance Data (SwaggerItems 'SwaggerKindSchema) where
414413 gfoldl _ _ (SwaggerItemsPrimitive _ _) = error $ " Data.Data.gfoldl: Constructor SwaggerItemsPrimitive used to construct SwaggerItems SwaggerKindSchema"
415414 gfoldl k z (SwaggerItemsObject ref) = z SwaggerItemsObject `k` ref
416415 gfoldl k z (SwaggerItemsArray ref) = z SwaggerItemsArray `k` ref
417416
418417 gunfold k z c = case constrIndex c of
419− 1 -> error $ "Data.Data.gunfold: Constructor " ++ show c ++ " is not of type (SwaggerItems SwaggerKindSchema)"
420418 2 -> k (z SwaggerItemsObject)
421419 3 -> k (z SwaggerItemsArray)
420+ _ -> error $ "Data.Data.gunfold: Constructor " ++ show c ++ " is not of type (SwaggerItems SwaggerKindSchema)."
422421
423− toConstr (SwaggerItemsObject _) = swaggerItemsObjectConstr
424− toConstr (SwaggerItemsArray _) = swaggerItemsArrayConstr
422+ toConstr (SwaggerItemsPrimitive _ _) = error "Not supported"
423+ toConstr (SwaggerItemsObject _) = swaggerItemsObjectConstr
424+ toConstr (SwaggerItemsArray _) = swaggerItemsArrayConstr
425425
426426 dataTypeOf _ = swaggerItemsDataType
427427
@@ -430,17 +430,16 @@ data SwaggerKind t
430430 = SwaggerKindNormal t
431431 | SwaggerKindParamOtherSchema
432432 | SwaggerKindSchema
433+ deriving (Typeable)
433434
434−#if __GLASGLOW_HASKELL__ < 710
435435deriving instance Typeable 'SwaggerKindNormal
436436deriving instance Typeable 'SwaggerKindParamOtherSchema
437437deriving instance Typeable 'SwaggerKindSchema
438−#endif
439438
440439type family SwaggerKindType (k :: SwaggerKind *) :: *
441−type instance SwaggerKindType (SwaggerKindNormal t) = t
442−type instance SwaggerKindType SwaggerKindSchema = Schema
443−type instance SwaggerKindType SwaggerKindParamOtherSchema = ParamOtherSchema
440+type instance SwaggerKindType ('SwaggerKindNormal t) = t
441+type instance SwaggerKindType 'SwaggerKindSchema = Schema
442+type instance SwaggerKindType 'SwaggerKindParamOtherSchema = ParamOtherSchema
444443
445444data SwaggerType t where
446445 SwaggerString :: SwaggerType t
@@ -448,9 +447,9 @@ data SwaggerType t where
448447 SwaggerInteger :: SwaggerType t
449448 SwaggerBoolean :: SwaggerType t
450449 SwaggerArray :: SwaggerType t
451− SwaggerFile :: SwaggerType SwaggerKindParamOtherSchema
452− SwaggerNull :: SwaggerType SwaggerKindSchema
453− SwaggerObject :: SwaggerType SwaggerKindSchema
450+ SwaggerFile :: SwaggerType 'SwaggerKindParamOtherSchema
451+ SwaggerNull :: SwaggerType 'SwaggerKindSchema
452+ SwaggerObject :: SwaggerType 'SwaggerKindSchema
454453 deriving (Typeable)
455454
456455deriving instance Eq (SwaggerType t)
@@ -465,27 +464,27 @@ swaggerTypeDataType _ = mkDataType "Data.Swagger.SwaggerType" swaggerTypeConstrs
465464swaggerCommonTypes :: [SwaggerType k]
466465swaggerCommonTypes = [SwaggerString, SwaggerNumber, SwaggerInteger, SwaggerBoolean, SwaggerArray]
467466
468−swaggerParamTypes :: [SwaggerType SwaggerKindParamOtherSchema]
467+swaggerParamTypes :: [SwaggerType 'SwaggerKindParamOtherSchema]
469468swaggerParamTypes = swaggerCommonTypes ++ [SwaggerFile]
470469
471−swaggerSchemaTypes :: [SwaggerType SwaggerKindSchema]
470+swaggerSchemaTypes :: [SwaggerType 'SwaggerKindSchema]
472471swaggerSchemaTypes = swaggerCommonTypes ++ [error "SwaggerFile is invalid SwaggerType Schema", SwaggerNull, SwaggerObject]
473472
474473swaggerTypeConstrs :: [Constr]
475−swaggerTypeConstrs = map swaggerTypeConstr (swaggerCommonTypes :: [SwaggerType SwaggerKindSchema])
474+swaggerTypeConstrs = map swaggerTypeConstr (swaggerCommonTypes :: [SwaggerType 'SwaggerKindSchema])
476475 ++ [swaggerTypeConstr SwaggerFile, swaggerTypeConstr SwaggerNull, swaggerTypeConstr SwaggerObject]
477476
478−instance Typeable t => Data (SwaggerType (SwaggerKindNormal t)) where
477+instance Typeable t => Data (SwaggerType ('SwaggerKindNormal t)) where
479478 gunfold = gunfoldEnum "SwaggerType" swaggerCommonTypes
480479 toConstr = swaggerTypeConstr
481480 dataTypeOf = swaggerTypeDataType
482481
483−instance Data (SwaggerType SwaggerKindParamOtherSchema) where
482+instance Data (SwaggerType 'SwaggerKindParamOtherSchema) where
484483 gunfold = gunfoldEnum "SwaggerType ParamOtherSchema" swaggerParamTypes
485484 toConstr = swaggerTypeConstr
486485 dataTypeOf = swaggerTypeDataType
487486
488−instance Data (SwaggerType SwaggerKindSchema) where
487+instance Data (SwaggerType 'SwaggerKindSchema) where
489488 gunfold = gunfoldEnum "SwaggerType Schema" swaggerSchemaTypes
490489 toConstr = swaggerTypeConstr
491490 dataTypeOf = swaggerTypeDataType
@@ -525,7 +524,7 @@ data CollectionFormat t where
525524 -- Corresponds to multiple parameter instances
526525 -- instead of multiple values for a single instance @foo=bar&foo=baz@.
527526 -- This is valid only for parameters in @'ParamQuery'@ or @'ParamFormData'@.
528− CollectionMulti :: CollectionFormat SwaggerKindParamOtherSchema
527+ CollectionMulti :: CollectionFormat 'SwaggerKindParamOtherSchema
529528 deriving (Typeable)
530529
531530deriving instance Eq (CollectionFormat t)
@@ -541,12 +540,12 @@ collectionFormatDataType = mkDataType "Data.Swagger.CollectionFormat" $
541540collectionCommonFormats :: [CollectionFormat t]
542541collectionCommonFormats = [ CollectionCSV, CollectionSSV, CollectionTSV, CollectionPipes ]
543542
544−instance Data t => Data (CollectionFormat (SwaggerKindNormal t)) where
543+instance Data t => Data (CollectionFormat ('SwaggerKindNormal t)) where
545544 gunfold = gunfoldEnum "CollectionFormat" collectionCommonFormats
546545 toConstr = collectionFormatConstr
547546 dataTypeOf _ = collectionFormatDataType
548547
549−deriving instance Data (CollectionFormat SwaggerKindParamOtherSchema)
548+deriving instance Data (CollectionFormat 'SwaggerKindParamOtherSchema)
550549
551550type ParamName = Text
552551
@@ -568,7 +567,7 @@ data Schema = Schema
568567 , _schemaMaxProperties :: Maybe Integer
569568 , _schemaMinProperties :: Maybe Integer
570569
571− , _schemaParamSchema :: ParamSchema SwaggerKindSchema
570+ , _schemaParamSchema :: ParamSchema 'SwaggerKindSchema
572571 } deriving (Eq, Show, Generic, Data, Typeable)
573572
574573-- | A @'Schema'@ with an optional name.
@@ -682,7 +681,7 @@ data Header = Header
682681 { -- | A short description of the header.
683682 _headerDescription :: Maybe Text
684683
685− , _headerParamSchema :: ParamSchema (SwaggerKindNormal Header)
684+ , _headerParamSchema :: ParamSchema ('SwaggerKindNormal Header)
686685 } deriving (Eq, Show, Generic, Data, Typeable)
687686
688687data Example = Example { getExample :: Map MediaType Value }
@@ -1139,17 +1138,17 @@ instance FromJSON Schema where
11391138instance FromJSON Header where
11401139 parseJSON = sopSwaggerGenericParseJSON
11411140
1142−instance (FromJSON (CollectionFormat (SwaggerKindNormal t)), FromJSON (ParamSchema (SwaggerKindNormal t))) => FromJSON (SwaggerItems (SwaggerKindNormal t)) where
1141+instance (FromJSON (CollectionFormat ('SwaggerKindNormal t)), FromJSON (ParamSchema ('SwaggerKindNormal t))) => FromJSON (SwaggerItems ('SwaggerKindNormal t)) where
11431142 parseJSON = withObject "SwaggerItemsPrimitive" $ \o -> SwaggerItemsPrimitive
11441143 <$> o .:? "collectionFormat"
11451144 <*> (o .: "items" >>= parseJSON)
11461145
1147−instance FromJSON (SwaggerItems SwaggerKindParamOtherSchema) where
1146+instance FromJSON (SwaggerItems 'SwaggerKindParamOtherSchema) where
11481147 parseJSON = withObject "SwaggerItemsPrimitive" $ \o -> SwaggerItemsPrimitive
11491148 <$> o .:? "collectionFormat"
11501149 <*> ((o .: "items" >>= parseJSON) <|> fail ("foo" ++ show o))
11511150
1152−instance FromJSON (SwaggerItems SwaggerKindSchema) where
1151+instance FromJSON (SwaggerItems 'SwaggerKindSchema) where
11531152 parseJSON js@(Object _) = SwaggerItemsObject <$> parseJSON js
11541153 parseJSON js@(Array _) = SwaggerItemsArray <$> parseJSON js
11551154 parseJSON _ = empty
@@ -1226,30 +1225,30 @@ instance FromJSON (Referenced Response) where parseJSON = referencedParseJSON "#
12261225instance FromJSON Xml where
12271226 parseJSON = genericParseJSON (jsonPrefix "xml")
12281227
1229−instance FromJSON (SwaggerType SwaggerKindSchema) where
1228+instance FromJSON (SwaggerType 'SwaggerKindSchema) where
12301229 parseJSON = parseOneOf [SwaggerString, SwaggerInteger, SwaggerNumber, SwaggerBoolean, SwaggerArray, SwaggerNull, SwaggerObject]
12311230
1232−instance FromJSON (SwaggerType SwaggerKindParamOtherSchema) where
1231+instance FromJSON (SwaggerType 'SwaggerKindParamOtherSchema) where
12331232 parseJSON = parseOneOf [SwaggerString, SwaggerInteger, SwaggerNumber, SwaggerBoolean, SwaggerArray, SwaggerFile]
12341233
1235−instance FromJSON (SwaggerType (SwaggerKindNormal t)) where
1234+instance FromJSON (SwaggerType ('SwaggerKindNormal t)) where
12361235 parseJSON = parseOneOf [SwaggerString, SwaggerInteger, SwaggerNumber, SwaggerBoolean, SwaggerArray]
12371236
1238−instance FromJSON (CollectionFormat (SwaggerKindNormal t)) where
1237+instance FromJSON (CollectionFormat ('SwaggerKindNormal t)) where
12391238 parseJSON = parseOneOf [CollectionCSV, CollectionSSV, CollectionTSV, CollectionPipes]
12401239
12411240-- NOTE: There aren't collections of 'Schema'
12421241--instance FromJSON (CollectionFormat (SwaggerKindSchema)) where
12431242-- parseJSON = parseOneOf [CollectionCSV, CollectionSSV, CollectionTSV, CollectionPipes]
12441243
1245−instance FromJSON (CollectionFormat SwaggerKindParamOtherSchema) where
1244+instance FromJSON (CollectionFormat 'SwaggerKindParamOtherSchema) where
12461245 parseJSON = parseOneOf [CollectionCSV, CollectionSSV, CollectionTSV, CollectionPipes, CollectionMulti]
12471246
1248−instance (FromJSON (SwaggerType (SwaggerKindNormal t)), FromJSON (SwaggerItems (SwaggerKindNormal t))) => FromJSON (ParamSchema (SwaggerKindNormal t)) where
1247+instance (FromJSON (SwaggerType ('SwaggerKindNormal t)), FromJSON (SwaggerItems ('SwaggerKindNormal t))) => FromJSON (ParamSchema ('SwaggerKindNormal t)) where
12491248 parseJSON = sopSwaggerGenericParseJSON
1250−instance FromJSON (ParamSchema SwaggerKindParamOtherSchema) where
1249+instance FromJSON (ParamSchema 'SwaggerKindParamOtherSchema) where
12511250 parseJSON = sopSwaggerGenericParseJSON
1252−instance FromJSON (ParamSchema SwaggerKindSchema) where
1251+instance FromJSON (ParamSchema 'SwaggerKindSchema) where
12531252 parseJSON = sopSwaggerGenericParseJSON
12541253
12551254-------------------------------------------------------------------------------
@@ -1292,12 +1291,12 @@ instance HasSwaggerAesonOptions Schema where
12921291instance HasSwaggerAesonOptions Swagger where
12931292 swaggerAesonOptions _ = mkSwaggerAesonOptions "swagger" & saoAdditionalPairs .~ [("swagger", "2.0")]
12941293
1295−instance HasSwaggerAesonOptions (ParamSchema (SwaggerKindNormal t)) where
1294+instance HasSwaggerAesonOptions (ParamSchema ('SwaggerKindNormal t)) where
12961295 swaggerAesonOptions _ = mkSwaggerAesonOptions "paramSchema" & saoSubObject ?~ "items"
1297−instance HasSwaggerAesonOptions (ParamSchema SwaggerKindParamOtherSchema) where
1296+instance HasSwaggerAesonOptions (ParamSchema 'SwaggerKindParamOtherSchema) where
12981297 swaggerAesonOptions _ = mkSwaggerAesonOptions "paramSchema" & saoSubObject ?~ "items"
12991298-- NOTE: Schema doesn't have 'items' sub object!
1300−instance HasSwaggerAesonOptions (ParamSchema SwaggerKindSchema) where
1299+instance HasSwaggerAesonOptions (ParamSchema 'SwaggerKindSchema) where
13011300 swaggerAesonOptions _ = mkSwaggerAesonOptions "paramSchema"
13021301
13031302instance AesonDefaultValue (ParamSchema s)