@@ -1,4 +1,5 @@
1{-# LANGUAGE CPP #-}
1{-# LANGUAGE CPP #-}
2+{-# LANGUAGE DataKinds #-}
2{-# LANGUAGE DeriveDataTypeable #-}
3{-# LANGUAGE DeriveDataTypeable #-}
3{-# LANGUAGE DeriveFunctor #-}
4{-# LANGUAGE DeriveFunctor #-}
4{-# LANGUAGE DeriveGeneric #-}
5{-# LANGUAGE DeriveGeneric #-}
@@ -8,15 +9,15 @@
8{-# LANGUAGE GADTs #-}
9{-# LANGUAGE GADTs #-}
9{-# LANGUAGE GeneralizedNewtypeDeriving #-}
10{-# LANGUAGE GeneralizedNewtypeDeriving #-}
10{-# LANGUAGE OverloadedStrings #-}
11{-# LANGUAGE OverloadedStrings #-}
11−{-# LANGUAGE PolyKinds #-}
12{-# LANGUAGE RecordWildCards #-}
12{-# LANGUAGE RecordWildCards #-}
13{-# LANGUAGE ScopedTypeVariables #-}
13{-# LANGUAGE ScopedTypeVariables #-}
14{-# LANGUAGE StandaloneDeriving #-}
14{-# LANGUAGE StandaloneDeriving #-}
15−{-# LANGUAGE UndecidableInstances #-}
17−{-# LANGUAGE DataKinds #-}
18−{-# LANGUAGE TypeFamilies #-}
19{-# LANGUAGE TemplateHaskell #-}
15{-# LANGUAGE TemplateHaskell #-}
16+{-# LANGUAGE TypeFamilies #-}
17+{-# LANGUAGE UndecidableInstances #-}
18+#if __GLASGOW_HASKELL__ <710
19+{-# LANGUAGE PolyKinds #-}
20#include "overlapping-compat.h"
21#include "overlapping-compat.h"
21module Data.Swagger.Internal where
22module Data.Swagger.Internal where
@@ -25,22 +26,22 @@ import Prelude.Compat
26import Control.Lens ((&), (.~), (?~))
27import Control.Lens ((&), (.~), (?~))
27import Control.Applicative
28import Control.Applicative
29import Data.Aeson
29import Data.Aeson
30import qualified Data.Aeson.Types as JSON
30import qualified Data.Aeson.Types as JSON
31import Data.Data (Data(..), Typeable, mkConstr, mkDataType, Fixity(..), Constr, DataType, constrIndex)
31import Data.Data (Data(..), Typeable, mkConstr, mkDataType, Fixity(..), Constr, DataType, constrIndex)
32−import Data.HashMap.Strict (HashMap)
32+import Data.Hashable (Hashable)
33import qualified Data.HashMap.Strict as HashMap
33import qualified Data.HashMap.Strict as HashMap
34+import Data.HashSet.InsOrd (InsOrdHashSet)
34import Data.Map (Map)
35import Data.Map (Map)
35import qualified Data.Map as Map
36import qualified Data.Map as Map
36−import Data.Monoid
37+import Data.Monoid (Monoid (..))
38+import Data.Semigroup.Compat (Semigroup (..))
37import Data.Scientific (Scientific)
39import Data.Scientific (Scientific)
39import Data.String (IsString(..))
40import Data.String (IsString(..))
40import Data.Text (Text)
41import Data.Text (Text)
41import qualified Data.Text as Text
42import qualified Data.Text as Text
42import GHC.Generics (Generic)
43import GHC.Generics (Generic)
43−import Network (HostName, PortNumber)
44+import Network.Socket (HostName, PortNumber)
44import Network.HTTP.Media (MediaType)
45import Network.HTTP.Media (MediaType)
45import Text.Read (readMaybe)
46import Text.Read (readMaybe)
@@ -65,6 +66,10 @@ import Data.Swagger.Internal.AesonUtils (sopSwaggerGenericToEncoding)
65#define DEFINE_TOENCODING
66#define DEFINE_TOENCODING
70+-- >>> :seti -XDataKinds
71+-- >>> import Data.Aeson
68-- | A list of definitions that can be used in references.
73-- | A list of definitions that can be used in references.
69type Definitions = InsOrdHashMap Text
74type Definitions = InsOrdHashMap Text
@@ -112,7 +117,7 @@ data Swagger = Swagger
112 , _swaggerResponses :: Definitions Response
117 , _swaggerResponses :: Definitions Response
114 -- | Security scheme definitions that can be used across the specification.
119 -- | Security scheme definitions that can be used across the specification.
115− , _swaggerSecurityDefinitions :: Definitions SecurityScheme
120+ , _swaggerSecurityDefinitions :: SecurityDefinitions
117 -- | A declaration of which security schemes are applied for the API as a whole.
122 -- | A declaration of which security schemes are applied for the API as a whole.
118 -- The list of values describes alternative security schemes that can be used
123 -- The list of values describes alternative security schemes that can be used
@@ -125,7 +130,7 @@ data Swagger = Swagger
125 -- Not all tags that are used by the Operation Object must be declared.
130 -- Not all tags that are used by the Operation Object must be declared.
126 -- The tags that are not declared may be organized randomly or based on the tools' logic.
131 -- The tags that are not declared may be organized randomly or based on the tools' logic.
127 -- Each tag name in the list MUST be unique.
132 -- Each tag name in the list MUST be unique.
128− , _swaggerTags :: Set Tag
133+ , _swaggerTags :: InsOrdHashSet Tag
130 -- | Additional external documentation.
135 -- | Additional external documentation.
131 , _swaggerExternalDocs :: Maybe ExternalDocs
136 , _swaggerExternalDocs :: Maybe ExternalDocs
@@ -247,7 +252,7 @@ data PathItem = PathItem
247data Operation = Operation
252data Operation = Operation
248 { -- | A list of tags for API documentation control.
253 { -- | A list of tags for API documentation control.
249 -- Tags can be used for logical grouping of operations by resources or any other qualifier.
254 -- Tags can be used for logical grouping of operations by resources or any other qualifier.
250− _operationTags :: Set TagName
255+ _operationTags :: InsOrdHashSet TagName
252 -- | A short summary of what the operation does.
257 -- | A short summary of what the operation does.
253 -- For maximum readability in the swagger-ui, this field SHOULD be less than 120 characters.
258 -- For maximum readability in the swagger-ui, this field SHOULD be less than 120 characters.
@@ -304,7 +309,7 @@ data Operation = Operation
304 } deriving (Eq, Show, Generic, Data, Typeable)
309 } deriving (Eq, Show, Generic, Data, Typeable)
306newtype MimeList = MimeList { getMimeList :: [MediaType] }
311newtype MimeList = MimeList { getMimeList :: [MediaType] }
307− deriving (Eq, Show, Monoid, Typeable)
312+ deriving (Eq, Show, Semigroup, Monoid, Typeable)
309mimeListConstr :: Constr
314mimeListConstr :: Constr
310mimeListConstr = mkConstr mimeListDataType "MimeList" ["getMimeList"] Prefix
315mimeListConstr = mkConstr mimeListDataType "MimeList" ["getMimeList"] Prefix
@@ -355,7 +360,7 @@ data ParamOtherSchema = ParamOtherSchema
355 -- Default value is @False@.
360 -- Default value is @False@.
356 , _paramOtherSchemaAllowEmptyValue :: Maybe Bool
361 , _paramOtherSchemaAllowEmptyValue :: Maybe Bool
358− , _paramOtherSchemaParamSchema :: ParamSchema SwaggerKindParamOtherSchema
363+ , _paramOtherSchemaParamSchema :: ParamSchema 'SwaggerKindParamOtherSchema
359 } deriving (Eq, Show, Generic, Typeable, Data)
364 } deriving (Eq, Show, Generic, Typeable, Data)
361-- | Items for @'SwaggerArray'@ schemas.
366-- | Items for @'SwaggerArray'@ schemas.
@@ -370,8 +375,8 @@ data ParamOtherSchema = ParamOtherSchema
370-- @'SwaggerItemsArray'@ should be used to specify tuple @'Schema'@s.
375-- @'SwaggerItemsArray'@ should be used to specify tuple @'Schema'@s.
371data SwaggerItems t where
376data SwaggerItems t where
372 SwaggerItemsPrimitive :: Maybe (CollectionFormat k) -> ParamSchema k-> SwaggerItems k
377 SwaggerItemsPrimitive :: Maybe (CollectionFormat k) -> ParamSchema k-> SwaggerItems k
373− SwaggerItemsObject :: Referenced Schema -> SwaggerItems SwaggerKindSchema
378+ SwaggerItemsObject :: Referenced Schema -> SwaggerItems 'SwaggerKindSchema
374− SwaggerItemsArray :: [Referenced Schema] -> SwaggerItems SwaggerKindSchema
379+ SwaggerItemsArray :: [Referenced Schema] -> SwaggerItems 'SwaggerKindSchema
375 deriving (Typeable)
380 deriving (Typeable)
377deriving instance Eq (SwaggerItems t)
382deriving instance Eq (SwaggerItems t)
@@ -393,7 +398,7 @@ swaggerItemsDataType = mkDataType "Data.Swagger.SwaggerItems" [swaggerItemsPrimi
393-- Note: unfortunately we have to write these Data instances by hand,
398-- Note: unfortunately we have to write these Data instances by hand,
394-- to get better contexts / avoid duplicate name when using standalone deriving
399-- to get better contexts / avoid duplicate name when using standalone deriving
396−instance Data t => Data (SwaggerItems (SwaggerKindNormal t)) where
401+instance Data t => Data (SwaggerItems ('SwaggerKindNormal t)) where
397 -- TODO: define gfoldl
402 -- TODO: define gfoldl
398 gunfold k z c = case constrIndex c of
403 gunfold k z c = case constrIndex c of
399 1 -> k (k (z SwaggerItemsPrimitive))
404 1 -> k (k (z SwaggerItemsPrimitive))
@@ -402,7 +407,7 @@ instance Data t => Data (SwaggerItems (SwaggerKindNormal t)) where
402 dataTypeOf _ = swaggerItemsDataType
407 dataTypeOf _ = swaggerItemsDataType
404-- SwaggerItems SwaggerKindParamOtherSchema can be constructed using SwaggerItemsPrimitive only
409-- SwaggerItems SwaggerKindParamOtherSchema can be constructed using SwaggerItemsPrimitive only
405−instance Data (SwaggerItems SwaggerKindParamOtherSchema) where
410+instance Data (SwaggerItems 'SwaggerKindParamOtherSchema) where
406 -- TODO: define gfoldl
411 -- TODO: define gfoldl
407 gunfold k z c = case constrIndex c of
412 gunfold k z c = case constrIndex c of
408 1 -> k (k (z SwaggerItemsPrimitive))
413 1 -> k (k (z SwaggerItemsPrimitive))
@@ -410,18 +415,19 @@ instance Data (SwaggerItems SwaggerKindParamOtherSchema) where
410 toConstr _ = swaggerItemsPrimitiveConstr
415 toConstr _ = swaggerItemsPrimitiveConstr
411 dataTypeOf _ = swaggerItemsDataType
416 dataTypeOf _ = swaggerItemsDataType
413−instance Data (SwaggerItems SwaggerKindSchema) where
418+instance Data (SwaggerItems 'SwaggerKindSchema) where
414 gfoldl _ _ (SwaggerItemsPrimitive _ _) = error $ " Data.Data.gfoldl: Constructor SwaggerItemsPrimitive used to construct SwaggerItems SwaggerKindSchema"
419 gfoldl _ _ (SwaggerItemsPrimitive _ _) = error $ " Data.Data.gfoldl: Constructor SwaggerItemsPrimitive used to construct SwaggerItems SwaggerKindSchema"
415 gfoldl k z (SwaggerItemsObject ref) = z SwaggerItemsObject `k` ref
420 gfoldl k z (SwaggerItemsObject ref) = z SwaggerItemsObject `k` ref
416 gfoldl k z (SwaggerItemsArray ref) = z SwaggerItemsArray `k` ref
421 gfoldl k z (SwaggerItemsArray ref) = z SwaggerItemsArray `k` ref
418 gunfold k z c = case constrIndex c of
423 gunfold k z c = case constrIndex c of
419− 1 -> error $ "Data.Data.gunfold: Constructor " ++ show c ++ " is not of type (SwaggerItems SwaggerKindSchema)"
420 2 -> k (z SwaggerItemsObject)
424 2 -> k (z SwaggerItemsObject)
421 3 -> k (z SwaggerItemsArray)
425 3 -> k (z SwaggerItemsArray)
426+ _ -> error $ "Data.Data.gunfold: Constructor " ++ show c ++ " is not of type (SwaggerItems SwaggerKindSchema)."
428+ toConstr (SwaggerItemsPrimitive _ _) = error "Not supported"
423− toConstr (SwaggerItemsObject _) = swaggerItemsObjectConstr
429+ toConstr (SwaggerItemsObject _) = swaggerItemsObjectConstr
424− toConstr (SwaggerItemsArray _) = swaggerItemsArrayConstr
430+ toConstr (SwaggerItemsArray _) = swaggerItemsArrayConstr
426 dataTypeOf _ = swaggerItemsDataType
432 dataTypeOf _ = swaggerItemsDataType
@@ -430,17 +436,16 @@ data SwaggerKind t
430 = SwaggerKindNormal t
436 = SwaggerKindNormal t
431 | SwaggerKindParamOtherSchema
437 | SwaggerKindParamOtherSchema
432 | SwaggerKindSchema
438 | SwaggerKindSchema
434−#if __GLASGLOW_HASKELL__ < 710
435deriving instance Typeable 'SwaggerKindNormal
441deriving instance Typeable 'SwaggerKindNormal
436deriving instance Typeable 'SwaggerKindParamOtherSchema
442deriving instance Typeable 'SwaggerKindParamOtherSchema
437deriving instance Typeable 'SwaggerKindSchema
443deriving instance Typeable 'SwaggerKindSchema
440type family SwaggerKindType (k :: SwaggerKind *) :: *
445type family SwaggerKindType (k :: SwaggerKind *) :: *
441−type instance SwaggerKindType (SwaggerKindNormal t) = t
446+type instance SwaggerKindType ('SwaggerKindNormal t) = t
442−type instance SwaggerKindType SwaggerKindSchema = Schema
447+type instance SwaggerKindType 'SwaggerKindSchema = Schema
443−type instance SwaggerKindType SwaggerKindParamOtherSchema = ParamOtherSchema
448+type instance SwaggerKindType 'SwaggerKindParamOtherSchema = ParamOtherSchema
445data SwaggerType t where
450data SwaggerType t where
446 SwaggerString :: SwaggerType t
451 SwaggerString :: SwaggerType t
@@ -448,9 +453,9 @@ data SwaggerType t where
448 SwaggerInteger :: SwaggerType t
453 SwaggerInteger :: SwaggerType t
449 SwaggerBoolean :: SwaggerType t
454 SwaggerBoolean :: SwaggerType t
450 SwaggerArray :: SwaggerType t
455 SwaggerArray :: SwaggerType t
451− SwaggerFile :: SwaggerType SwaggerKindParamOtherSchema
456+ SwaggerFile :: SwaggerType 'SwaggerKindParamOtherSchema
452− SwaggerNull :: SwaggerType SwaggerKindSchema
457+ SwaggerNull :: SwaggerType 'SwaggerKindSchema
453− SwaggerObject :: SwaggerType SwaggerKindSchema
458+ SwaggerObject :: SwaggerType 'SwaggerKindSchema
454 deriving (Typeable)
459 deriving (Typeable)
456deriving instance Eq (SwaggerType t)
461deriving instance Eq (SwaggerType t)
@@ -459,33 +464,33 @@ deriving instance Show (SwaggerType t)
459swaggerTypeConstr :: Data (SwaggerType t) => SwaggerType t -> Constr
464swaggerTypeConstr :: Data (SwaggerType t) => SwaggerType t -> Constr
460swaggerTypeConstr t = mkConstr (dataTypeOf t) (show t) [] Prefix
465swaggerTypeConstr t = mkConstr (dataTypeOf t) (show t) [] Prefix
462−swaggerTypeDataType :: Data (SwaggerType t) => SwaggerType t -> DataType
467+swaggerTypeDataType :: {- Data (SwaggerType t) => -} SwaggerType t -> DataType
463swaggerTypeDataType _ = mkDataType "Data.Swagger.SwaggerType" swaggerTypeConstrs
468swaggerTypeDataType _ = mkDataType "Data.Swagger.SwaggerType" swaggerTypeConstrs
465swaggerCommonTypes :: [SwaggerType k]
470swaggerCommonTypes :: [SwaggerType k]
466swaggerCommonTypes = [SwaggerString, SwaggerNumber, SwaggerInteger, SwaggerBoolean, SwaggerArray]
471swaggerCommonTypes = [SwaggerString, SwaggerNumber, SwaggerInteger, SwaggerBoolean, SwaggerArray]
468−swaggerParamTypes :: [SwaggerType SwaggerKindParamOtherSchema]
473+swaggerParamTypes :: [SwaggerType 'SwaggerKindParamOtherSchema]
469swaggerParamTypes = swaggerCommonTypes ++ [SwaggerFile]
474swaggerParamTypes = swaggerCommonTypes ++ [SwaggerFile]
471−swaggerSchemaTypes :: [SwaggerType SwaggerKindSchema]
476+swaggerSchemaTypes :: [SwaggerType 'SwaggerKindSchema]
472swaggerSchemaTypes = swaggerCommonTypes ++ [error "SwaggerFile is invalid SwaggerType Schema", SwaggerNull, SwaggerObject]
477swaggerSchemaTypes = swaggerCommonTypes ++ [error "SwaggerFile is invalid SwaggerType Schema", SwaggerNull, SwaggerObject]
474swaggerTypeConstrs :: [Constr]
479swaggerTypeConstrs :: [Constr]
475−swaggerTypeConstrs = map swaggerTypeConstr (swaggerCommonTypes :: [SwaggerType SwaggerKindSchema])
480+swaggerTypeConstrs = map swaggerTypeConstr (swaggerCommonTypes :: [SwaggerType 'SwaggerKindSchema])
476 ++ [swaggerTypeConstr SwaggerFile, swaggerTypeConstr SwaggerNull, swaggerTypeConstr SwaggerObject]
481 ++ [swaggerTypeConstr SwaggerFile, swaggerTypeConstr SwaggerNull, swaggerTypeConstr SwaggerObject]
478−instance Typeable t => Data (SwaggerType (SwaggerKindNormal t)) where
483+instance Typeable t => Data (SwaggerType ('SwaggerKindNormal t)) where
479 gunfold = gunfoldEnum "SwaggerType" swaggerCommonTypes
484 gunfold = gunfoldEnum "SwaggerType" swaggerCommonTypes
480 toConstr = swaggerTypeConstr
485 toConstr = swaggerTypeConstr
481 dataTypeOf = swaggerTypeDataType
486 dataTypeOf = swaggerTypeDataType
483−instance Data (SwaggerType SwaggerKindParamOtherSchema) where
488+instance Data (SwaggerType 'SwaggerKindParamOtherSchema) where
484 gunfold = gunfoldEnum "SwaggerType ParamOtherSchema" swaggerParamTypes
489 gunfold = gunfoldEnum "SwaggerType ParamOtherSchema" swaggerParamTypes
485 toConstr = swaggerTypeConstr
490 toConstr = swaggerTypeConstr
486 dataTypeOf = swaggerTypeDataType
491 dataTypeOf = swaggerTypeDataType
488−instance Data (SwaggerType SwaggerKindSchema) where
493+instance Data (SwaggerType 'SwaggerKindSchema) where
489 gunfold = gunfoldEnum "SwaggerType Schema" swaggerSchemaTypes
494 gunfold = gunfoldEnum "SwaggerType Schema" swaggerSchemaTypes
490 toConstr = swaggerTypeConstr
495 toConstr = swaggerTypeConstr
491 dataTypeOf = swaggerTypeDataType
496 dataTypeOf = swaggerTypeDataType
@@ -525,7 +530,7 @@ data CollectionFormat t where
525 -- Corresponds to multiple parameter instances
530 -- Corresponds to multiple parameter instances
526 -- instead of multiple values for a single instance @foo=bar&foo=baz@.
531 -- instead of multiple values for a single instance @foo=bar&foo=baz@.
527 -- This is valid only for parameters in @'ParamQuery'@ or @'ParamFormData'@.
532 -- This is valid only for parameters in @'ParamQuery'@ or @'ParamFormData'@.
528− CollectionMulti :: CollectionFormat SwaggerKindParamOtherSchema
533+ CollectionMulti :: CollectionFormat 'SwaggerKindParamOtherSchema
529 deriving (Typeable)
534 deriving (Typeable)
531deriving instance Eq (CollectionFormat t)
536deriving instance Eq (CollectionFormat t)
@@ -541,12 +546,12 @@ collectionFormatDataType = mkDataType "Data.Swagger.CollectionFormat" $
541collectionCommonFormats :: [CollectionFormat t]
546collectionCommonFormats :: [CollectionFormat t]
542collectionCommonFormats = [ CollectionCSV, CollectionSSV, CollectionTSV, CollectionPipes ]
547collectionCommonFormats = [ CollectionCSV, CollectionSSV, CollectionTSV, CollectionPipes ]
544−instance Data t => Data (CollectionFormat (SwaggerKindNormal t)) where
549+instance Data t => Data (CollectionFormat ('SwaggerKindNormal t)) where
545 gunfold = gunfoldEnum "CollectionFormat" collectionCommonFormats
550 gunfold = gunfoldEnum "CollectionFormat" collectionCommonFormats
546 toConstr = collectionFormatConstr
551 toConstr = collectionFormatConstr
547 dataTypeOf _ = collectionFormatDataType
552 dataTypeOf _ = collectionFormatDataType
549−deriving instance Data (CollectionFormat SwaggerKindParamOtherSchema)
554+deriving instance Data (CollectionFormat 'SwaggerKindParamOtherSchema)
551type ParamName = Text
556type ParamName = Text
@@ -555,9 +560,9 @@ data Schema = Schema
555 , _schemaDescription :: Maybe Text
560 , _schemaDescription :: Maybe Text
556 , _schemaRequired :: [ParamName]
561 , _schemaRequired :: [ParamName]
558− , _schemaAllOf :: Maybe [Schema]
563+ , _schemaAllOf :: Maybe [Referenced Schema]
559 , _schemaProperties :: InsOrdHashMap Text (Referenced Schema)
564 , _schemaProperties :: InsOrdHashMap Text (Referenced Schema)
560− , _schemaAdditionalProperties :: Maybe (Referenced Schema)
565+ , _schemaAdditionalProperties :: Maybe AdditionalProperties
562 , _schemaDiscriminator :: Maybe Text
567 , _schemaDiscriminator :: Maybe Text
563 , _schemaReadOnly :: Maybe Bool
568 , _schemaReadOnly :: Maybe Bool
@@ -568,7 +573,7 @@ data Schema = Schema
568 , _schemaMaxProperties :: Maybe Integer
573 , _schemaMaxProperties :: Maybe Integer
569 , _schemaMinProperties :: Maybe Integer
574 , _schemaMinProperties :: Maybe Integer
571− , _schemaParamSchema :: ParamSchema SwaggerKindSchema
576+ , _schemaParamSchema :: ParamSchema 'SwaggerKindSchema
572 } deriving (Eq, Show, Generic, Data, Typeable)
577 } deriving (Eq, Show, Generic, Data, Typeable)
574-- | A @'Schema'@ with an optional name.
579-- | A @'Schema'@ with an optional name.
@@ -589,7 +594,7 @@ data ParamSchema (t :: SwaggerKind *) = ParamSchema
589 -- Unlike JSON Schema this value MUST conform to the defined type for this parameter.
594 -- Unlike JSON Schema this value MUST conform to the defined type for this parameter.
590 _paramSchemaDefault :: Maybe Value
595 _paramSchemaDefault :: Maybe Value
592− , _paramSchemaType :: SwaggerType t
597+ , _paramSchemaType :: Maybe (SwaggerType t)
593 , _paramSchemaFormat :: Maybe Format
598 , _paramSchemaFormat :: Maybe Format
594 , _paramSchemaItems :: Maybe (SwaggerItems t)
599 , _paramSchemaItems :: Maybe (SwaggerItems t)
595 , _paramSchemaMaximum :: Maybe Scientific
600 , _paramSchemaMaximum :: Maybe Scientific
@@ -606,7 +611,7 @@ data ParamSchema (t :: SwaggerKind *) = ParamSchema
606 , _paramSchemaMultipleOf :: Maybe Scientific
611 , _paramSchemaMultipleOf :: Maybe Scientific
607 } deriving (Eq, Show, Generic, Typeable)
612 } deriving (Eq, Show, Generic, Typeable)
609−deriving instance (Typeable k, Data (SwaggerKindType k), Data (SwaggerType k), Data (SwaggerItems k)) => Data (ParamSchema k)
614+deriving instance (Typeable k, Data (Maybe (SwaggerType k)), Data (SwaggerItems k)) => Data (ParamSchema k)
611data Xml = Xml
616data Xml = Xml
612 { -- | Replaces the name of the element/attribute used for the described schema property.
617 { -- | Replaces the name of the element/attribute used for the described schema property.
@@ -682,7 +687,7 @@ data Header = Header
682 { -- | A short description of the header.
687 { -- | A short description of the header.
683 _headerDescription :: Maybe Text
688 _headerDescription :: Maybe Text
685− , _headerParamSchema :: ParamSchema (SwaggerKindNormal Header)
690+ , _headerParamSchema :: ParamSchema ('SwaggerKindNormal Header)
686 } deriving (Eq, Show, Generic, Data, Typeable)
691 } deriving (Eq, Show, Generic, Data, Typeable)
688data Example = Example { getExample :: Map MediaType Value }
693data Example = Example { getExample :: Map MediaType Value }
@@ -750,12 +755,28 @@ data SecurityScheme = SecurityScheme
750 , _securitySchemeDescription :: Maybe Text
755 , _securitySchemeDescription :: Maybe Text
751 } deriving (Eq, Show, Generic, Data, Typeable)
756 } deriving (Eq, Show, Generic, Data, Typeable)
759+-- | merge scopes of two OAuth2 security schemes when their flows are identical.
760+-- In other case returns first security scheme
761+mergeSecurityScheme :: SecurityScheme -> SecurityScheme -> SecurityScheme
762+mergeSecurityScheme s1@(SecurityScheme (SecuritySchemeOAuth2 (OAuth2Params flow1 scopes1)) desc)
763+ s2@(SecurityScheme (SecuritySchemeOAuth2 (OAuth2Params flow2 scopes2)) _)
764+ = if flow1 == flow2 then
765+ SecurityScheme (SecuritySchemeOAuth2 (OAuth2Params flow1 (scopes1 <> scopes2))) desc
768+mergeSecurityScheme s1 _ = s1
770+newtype SecurityDefinitions
771+ = SecurityDefinitions (Definitions SecurityScheme)
772+ deriving (Eq, Show, Generic, Data, Typeable)
753-- | Lists the required security schemes to execute this operation.
774-- | Lists the required security schemes to execute this operation.
754-- The object can have multiple security schemes declared in it which are all required
775-- The object can have multiple security schemes declared in it which are all required
755-- (that is, there is a logical AND between the schemes).
776-- (that is, there is a logical AND between the schemes).
756newtype SecurityRequirement = SecurityRequirement
777newtype SecurityRequirement = SecurityRequirement
757 { getSecurityRequirement :: InsOrdHashMap Text [Text]
778 { getSecurityRequirement :: InsOrdHashMap Text [Text]
758− } deriving (Eq, Read, Show, Monoid, ToJSON, FromJSON, Data, Typeable)
779+ } deriving (Eq, Read, Show, Semigroup, Monoid, ToJSON, FromJSON, Data, Typeable)
760-- | Tag name.
781-- | Tag name.
761type TagName = Text
782type TagName = Text
@@ -774,6 +795,8 @@ data Tag = Tag
774 , _tagExternalDocs :: Maybe ExternalDocs
795 , _tagExternalDocs :: Maybe ExternalDocs
775 } deriving (Eq, Ord, Show, Generic, Data, Typeable)
796 } deriving (Eq, Ord, Show, Generic, Data, Typeable)
798+instance Hashable Tag
777instance IsString Tag where
800instance IsString Tag where
778 fromString s = Tag (fromString s) Nothing Nothing
801 fromString s = Tag (fromString s) Nothing Nothing
@@ -787,6 +810,8 @@ data ExternalDocs = ExternalDocs
787 , _externalDocsUrl :: URL
810 , _externalDocsUrl :: URL
788 } deriving (Eq, Ord, Show, Generic, Data, Typeable)
811 } deriving (Eq, Ord, Show, Generic, Data, Typeable)
813+instance Hashable ExternalDocs
790-- | A simple object to allow referencing other definitions in the specification.
815-- | A simple object to allow referencing other definitions in the specification.
791-- It can be used to reference parameters and responses that are defined at the top level for reuse.
816-- It can be used to reference parameters and responses that are defined at the top level for reuse.
792newtype Reference = Reference { getReference :: Text }
817newtype Reference = Reference { getReference :: Text }
@@ -800,67 +825,111 @@ data Referenced a
800instance IsString a => IsString (Referenced a) where
825instance IsString a => IsString (Referenced a) where
801 fromString = Inline . fromString
826 fromString = Inline . fromString
803−newtype URL = URL { getUrl :: Text } deriving (Eq, Ord, Show, ToJSON, FromJSON, Data, Typeable)
828+newtype URL = URL { getUrl :: Text } deriving (Eq, Ord, Show, Hashable, ToJSON, FromJSON, Data, Typeable)
830+data AdditionalProperties
831+ = AdditionalPropertiesAllowed Bool
832+ | AdditionalPropertiesSchema (Referenced Schema)
833+ deriving (Eq, Show, Data, Typeable)
805-- =======================================================================
835-- =======================================================================
806-- Monoid instances
836-- Monoid instances
807-- =======================================================================
837-- =======================================================================
839+instance Semigroup Swagger where
840+ (<>) = genericMappend
809instance Monoid Swagger where
841instance Monoid Swagger where
810 mempty = genericMempty
842 mempty = genericMempty
811− mappend = genericMappend
843+ mappend = (<>)
845+instance Semigroup Info where
846+ (<>) = genericMappend
813instance Monoid Info where
847instance Monoid Info where
814 mempty = genericMempty
848 mempty = genericMempty
815− mappend = genericMappend
849+ mappend = (<>)
851+instance Semigroup Contact where
852+ (<>) = genericMappend
817instance Monoid Contact where
853instance Monoid Contact where
818 mempty = genericMempty
854 mempty = genericMempty
819− mappend = genericMappend
855+ mappend = (<>)
857+instance Semigroup PathItem where
858+ (<>) = genericMappend
821instance Monoid PathItem where
859instance Monoid PathItem where
822 mempty = genericMempty
860 mempty = genericMempty
823− mappend = genericMappend
861+ mappend = (<>)
863+instance Semigroup Schema where
864+ (<>) = genericMappend
825instance Monoid Schema where
865instance Monoid Schema where
826 mempty = genericMempty
866 mempty = genericMempty
827− mappend = genericMappend
867+ mappend = (<>)
869+instance Semigroup (ParamSchema t) where
870+ (<>) = genericMappend
829instance Monoid (ParamSchema t) where
871instance Monoid (ParamSchema t) where
830 mempty = genericMempty
872 mempty = genericMempty
831− mappend = genericMappend
873+ mappend = (<>)
875+instance Semigroup Param where
876+ (<>) = genericMappend
833instance Monoid Param where
877instance Monoid Param where
834 mempty = genericMempty
878 mempty = genericMempty
835− mappend = genericMappend
879+ mappend = (<>)
881+instance Semigroup ParamOtherSchema where
882+ (<>) = genericMappend
837instance Monoid ParamOtherSchema where
883instance Monoid ParamOtherSchema where
838 mempty = genericMempty
884 mempty = genericMempty
839− mappend = genericMappend
885+ mappend = (<>)
887+instance Semigroup Header where
888+ (<>) = genericMappend
841instance Monoid Header where
889instance Monoid Header where
842 mempty = genericMempty
890 mempty = genericMempty
843− mappend = genericMappend
891+ mappend = (<>)
893+instance Semigroup Responses where
894+ (<>) = genericMappend
845instance Monoid Responses where
895instance Monoid Responses where
846 mempty = genericMempty
896 mempty = genericMempty
847− mappend = genericMappend
897+ mappend = (<>)
899+instance Semigroup Response where
900+ (<>) = genericMappend
849instance Monoid Response where
901instance Monoid Response where
850 mempty = genericMempty
902 mempty = genericMempty
851− mappend = genericMappend
903+ mappend = (<>)
905+instance Semigroup ExternalDocs where
906+ (<>) = genericMappend
853instance Monoid ExternalDocs where
907instance Monoid ExternalDocs where
854 mempty = genericMempty
908 mempty = genericMempty
855− mappend = genericMappend
909+ mappend = (<>)
911+instance Semigroup Operation where
912+ (<>) = genericMappend
857instance Monoid Operation where
913instance Monoid Operation where
858 mempty = genericMempty
914 mempty = genericMempty
859− mappend = genericMappend
915+ mappend = (<>)
917+instance Semigroup Example where
918+ (<>) = genericMappend
861instance Monoid Example where
919instance Monoid Example where
862 mempty = genericMempty
920 mempty = genericMempty
863− mappend = genericMappend
921+ mappend = (<>)
923+instance Semigroup SecurityScheme where
924+ (<>) = mergeSecurityScheme
926+instance Semigroup SecurityDefinitions where
927+ (SecurityDefinitions sd1) <> (SecurityDefinitions sd2) =
928+ SecurityDefinitions $ InsOrdHashMap.unionWith (<>) sd1 sd2
930+instance Monoid SecurityDefinitions where
931+ mempty = SecurityDefinitions $ InsOrdHashMap.empty
865-- =======================================================================
934-- =======================================================================
866-- SwaggerMonoid helper instances
935-- SwaggerMonoid helper instances
@@ -876,6 +945,8 @@ instance SwaggerMonoid Responses
876instance SwaggerMonoid Response
945instance SwaggerMonoid Response
877instance SwaggerMonoid ExternalDocs
946instance SwaggerMonoid ExternalDocs
878instance SwaggerMonoid Operation
947instance SwaggerMonoid Operation
948+instance SwaggerMonoid SecurityDefinitions
949+instance (Eq a, Hashable a) => SwaggerMonoid (InsOrdHashSet a)
880instance SwaggerMonoid MimeList
951instance SwaggerMonoid MimeList
881deriving instance SwaggerMonoid URL
952deriving instance SwaggerMonoid URL
@@ -894,7 +965,7 @@ instance OVERLAPPING_ SwaggerMonoid (InsOrdHashMap FilePath PathItem) where
895instance Monoid a => SwaggerMonoid (Referenced a) where
966instance Monoid a => SwaggerMonoid (Referenced a) where
896 swaggerMempty = Inline mempty
967 swaggerMempty = Inline mempty
897− swaggerMappend (Inline x) (Inline y) = Inline (x <> y)
968+ swaggerMappend (Inline x) (Inline y) = Inline (mappend x y)
898 swaggerMappend _ y = y
969 swaggerMappend _ y = y
900instance SwaggerMonoid ParamAnySchema where
971instance SwaggerMonoid ParamAnySchema where
@@ -1017,11 +1088,22 @@ instance ToJSON Header where
1017 toJSON = sopSwaggerGenericToJSON
1088 toJSON = sopSwaggerGenericToJSON
1018 DEFINE_TOENCODING
1089 DEFINE_TOENCODING
1091+-- | As for nullary schema for 0-arity type constructors, see
1092+-- <https://github.com/GetShopTV/swagger2/issues/167>.
1094+-- >>> encode (SwaggerItemsArray [])
1095+-- "{\"example\":[],\"items\":{},\"maxItems\":0}"
1020instance ToJSON (ParamSchema t) => ToJSON (SwaggerItems t) where
1097instance ToJSON (ParamSchema t) => ToJSON (SwaggerItems t) where
1021 toJSON (SwaggerItemsPrimitive fmt schema) = object
1098 toJSON (SwaggerItemsPrimitive fmt schema) = object
1022 [ "collectionFormat" .= fmt
1099 [ "collectionFormat" .= fmt
1023 , "items" .= schema ]
1100 , "items" .= schema ]
1024 toJSON (SwaggerItemsObject x) = object [ "items" .= x ]
1101 toJSON (SwaggerItemsObject x) = object [ "items" .= x ]
1102+ toJSON (SwaggerItemsArray []) = object
1103+ [ "items" .= object []
1104+ , "maxItems" .= (0 :: Int)
1105+ , "example" .= Array mempty
1025 toJSON (SwaggerItemsArray x) = object [ "items" .= x ]
1107 toJSON (SwaggerItemsArray x) = object [ "items" .= x ]
1027instance ToJSON Host where
1109instance ToJSON Host where
@@ -1064,6 +1146,9 @@ instance ToJSON PathItem where
1064instance ToJSON Example where
1146instance ToJSON Example where
1065 toJSON = toJSON . Map.mapKeys show . getExample
1147 toJSON = toJSON . Map.mapKeys show . getExample
1149+instance ToJSON SecurityDefinitions where
1150+ toJSON (SecurityDefinitions sd) = toJSON sd
1067instance ToJSON Reference where
1152instance ToJSON Reference where
1068 toJSON (Reference ref) = object [ "$ref" .= ref ]
1153 toJSON (Reference ref) = object [ "$ref" .= ref ]
@@ -1097,6 +1182,10 @@ instance ToJSON (ParamSchema k) where
1097 toJSON = sopSwaggerGenericToJSONWithOpts $
1182 toJSON = sopSwaggerGenericToJSONWithOpts $
1098 mkSwaggerAesonOptions "paramSchema" & saoSubObject ?~ "items"
1183 mkSwaggerAesonOptions "paramSchema" & saoSubObject ?~ "items"
1185+instance ToJSON AdditionalProperties where
1186+ toJSON (AdditionalPropertiesAllowed b) = toJSON b
1187+ toJSON (AdditionalPropertiesSchema s) = toJSON s
1100-- =======================================================================
1189-- =======================================================================
1101-- Manual FromJSON instances
1190-- Manual FromJSON instances
1102-- =======================================================================
1191-- =======================================================================
@@ -1134,23 +1223,42 @@ instance FromJSON SecurityScheme where
1134 parseJSON = sopSwaggerGenericParseJSON
1223 parseJSON = sopSwaggerGenericParseJSON
1136instance FromJSON Schema where
1225instance FromJSON Schema where
1137− parseJSON = sopSwaggerGenericParseJSON
1226+ parseJSON = fmap nullaryCleanup . sopSwaggerGenericParseJSON
1227+ where nullaryCleanup :: Schema -> Schema
1228+ nullaryCleanup s@Schema{_schemaParamSchema=ps} =
1229+ if _paramSchemaItems ps == Just (SwaggerItemsArray [])
1230+ then s { _schemaExample = Nothing
1231+ , _schemaParamSchema = ps { _paramSchemaMaxItems = Nothing } }
1139instance FromJSON Header where
1234instance FromJSON Header where
1140 parseJSON = sopSwaggerGenericParseJSON
1235 parseJSON = sopSwaggerGenericParseJSON
1142−instance (FromJSON (CollectionFormat (SwaggerKindNormal t)), FromJSON (ParamSchema (SwaggerKindNormal t))) => FromJSON (SwaggerItems (SwaggerKindNormal t)) where
1237+instance (FromJSON (CollectionFormat ('SwaggerKindNormal t)), FromJSON (ParamSchema ('SwaggerKindNormal t))) => FromJSON (SwaggerItems ('SwaggerKindNormal t)) where
1143 parseJSON = withObject "SwaggerItemsPrimitive" $ \o -> SwaggerItemsPrimitive
1238 parseJSON = withObject "SwaggerItemsPrimitive" $ \o -> SwaggerItemsPrimitive
1144 <$> o .:? "collectionFormat"
1239 <$> o .:? "collectionFormat"
1145 <*> (o .: "items" >>= parseJSON)
1240 <*> (o .: "items" >>= parseJSON)
1147−instance FromJSON (SwaggerItems SwaggerKindParamOtherSchema) where
1242+instance FromJSON (SwaggerItems 'SwaggerKindParamOtherSchema) where
1148 parseJSON = withObject "SwaggerItemsPrimitive" $ \o -> SwaggerItemsPrimitive
1243 parseJSON = withObject "SwaggerItemsPrimitive" $ \o -> SwaggerItemsPrimitive
1149 <$> o .:? "collectionFormat"
1244 <$> o .:? "collectionFormat"
1150 <*> ((o .: "items" >>= parseJSON) <|> fail ("foo" ++ show o))
1245 <*> ((o .: "items" >>= parseJSON) <|> fail ("foo" ++ show o))
1249+-- >>> decode "{}" :: Maybe (SwaggerItems 'SwaggerKindSchema)
1250+-- Just (SwaggerItemsArray [])
1252+-- >>> eitherDecode "{\"$ref\":\"#/definitions/example\"}" :: Either String (SwaggerItems 'SwaggerKindSchema)
1253+-- Right (SwaggerItemsObject (Ref (Reference {getReference = "example"})))
1255+-- >>> eitherDecode "[{\"$ref\":\"#/definitions/example\"}]" :: Either String (SwaggerItems 'SwaggerKindSchema)
1256+-- Right (SwaggerItemsArray [Ref (Reference {getReference = "example"})])
1152−instance FromJSON (SwaggerItems SwaggerKindSchema) where
1258+instance FromJSON (SwaggerItems 'SwaggerKindSchema) where
1259+ parseJSON js@(Object obj)
1260+ | null obj = pure $ SwaggerItemsArray [] -- Nullary schema.
1153− parseJSON js@(Object _) = SwaggerItemsObject <$> parseJSON js
1261+ | otherwise = SwaggerItemsObject <$> parseJSON js
1154 parseJSON js@(Array _) = SwaggerItemsArray <$> parseJSON js
1262 parseJSON js@(Array _) = SwaggerItemsArray <$> parseJSON js
1155 parseJSON _ = empty
1263 parseJSON _ = empty
@@ -1202,6 +1310,9 @@ instance FromJSON Operation where
1202instance FromJSON PathItem where
1310instance FromJSON PathItem where
1203 parseJSON = sopSwaggerGenericParseJSON
1311 parseJSON = sopSwaggerGenericParseJSON
1313+instance FromJSON SecurityDefinitions where
1314+ parseJSON js = SecurityDefinitions <$> parseJSON js
1205instance FromJSON Reference where
1316instance FromJSON Reference where
1206 parseJSON (Object o) = Reference <$> o .: "$ref"
1317 parseJSON (Object o) = Reference <$> o .: "$ref"
1207 parseJSON _ = empty
1318 parseJSON _ = empty
@@ -1226,32 +1337,36 @@ instance FromJSON (Referenced Response) where parseJSON = referencedParseJSON "#
1226instance FromJSON Xml where
1337instance FromJSON Xml where
1227 parseJSON = genericParseJSON (jsonPrefix "xml")
1338 parseJSON = genericParseJSON (jsonPrefix "xml")
1229−instance FromJSON (SwaggerType SwaggerKindSchema) where
1340+instance FromJSON (SwaggerType 'SwaggerKindSchema) where
1230 parseJSON = parseOneOf [SwaggerString, SwaggerInteger, SwaggerNumber, SwaggerBoolean, SwaggerArray, SwaggerNull, SwaggerObject]
1341 parseJSON = parseOneOf [SwaggerString, SwaggerInteger, SwaggerNumber, SwaggerBoolean, SwaggerArray, SwaggerNull, SwaggerObject]
1232−instance FromJSON (SwaggerType SwaggerKindParamOtherSchema) where
1343+instance FromJSON (SwaggerType 'SwaggerKindParamOtherSchema) where
1233 parseJSON = parseOneOf [SwaggerString, SwaggerInteger, SwaggerNumber, SwaggerBoolean, SwaggerArray, SwaggerFile]
1344 parseJSON = parseOneOf [SwaggerString, SwaggerInteger, SwaggerNumber, SwaggerBoolean, SwaggerArray, SwaggerFile]
1235−instance FromJSON (SwaggerType (SwaggerKindNormal t)) where
1346+instance FromJSON (SwaggerType ('SwaggerKindNormal t)) where
1236 parseJSON = parseOneOf [SwaggerString, SwaggerInteger, SwaggerNumber, SwaggerBoolean, SwaggerArray]
1347 parseJSON = parseOneOf [SwaggerString, SwaggerInteger, SwaggerNumber, SwaggerBoolean, SwaggerArray]
1238−instance FromJSON (CollectionFormat (SwaggerKindNormal t)) where
1349+instance FromJSON (CollectionFormat ('SwaggerKindNormal t)) where
1239 parseJSON = parseOneOf [CollectionCSV, CollectionSSV, CollectionTSV, CollectionPipes]
1350 parseJSON = parseOneOf [CollectionCSV, CollectionSSV, CollectionTSV, CollectionPipes]
1241-- NOTE: There aren't collections of 'Schema'
1352-- NOTE: There aren't collections of 'Schema'
1242--instance FromJSON (CollectionFormat (SwaggerKindSchema)) where
1353--instance FromJSON (CollectionFormat (SwaggerKindSchema)) where
1243-- parseJSON = parseOneOf [CollectionCSV, CollectionSSV, CollectionTSV, CollectionPipes]
1354-- parseJSON = parseOneOf [CollectionCSV, CollectionSSV, CollectionTSV, CollectionPipes]
1245−instance FromJSON (CollectionFormat SwaggerKindParamOtherSchema) where
1356+instance FromJSON (CollectionFormat 'SwaggerKindParamOtherSchema) where
1246 parseJSON = parseOneOf [CollectionCSV, CollectionSSV, CollectionTSV, CollectionPipes, CollectionMulti]
1357 parseJSON = parseOneOf [CollectionCSV, CollectionSSV, CollectionTSV, CollectionPipes, CollectionMulti]
1248−instance (FromJSON (SwaggerType (SwaggerKindNormal t)), FromJSON (SwaggerItems (SwaggerKindNormal t))) => FromJSON (ParamSchema (SwaggerKindNormal t)) where
1359+instance (FromJSON (SwaggerType ('SwaggerKindNormal t)), FromJSON (SwaggerItems ('SwaggerKindNormal t))) => FromJSON (ParamSchema ('SwaggerKindNormal t)) where
1249 parseJSON = sopSwaggerGenericParseJSON
1360 parseJSON = sopSwaggerGenericParseJSON
1250−instance FromJSON (ParamSchema SwaggerKindParamOtherSchema) where
1361+instance FromJSON (ParamSchema 'SwaggerKindParamOtherSchema) where
1251 parseJSON = sopSwaggerGenericParseJSON
1362 parseJSON = sopSwaggerGenericParseJSON
1252−instance FromJSON (ParamSchema SwaggerKindSchema) where
1363+instance FromJSON (ParamSchema 'SwaggerKindSchema) where
1253 parseJSON = sopSwaggerGenericParseJSON
1364 parseJSON = sopSwaggerGenericParseJSON
1366+instance FromJSON AdditionalProperties where
1367+ parseJSON (Bool b) = pure $ AdditionalPropertiesAllowed b
1368+ parseJSON js = AdditionalPropertiesSchema <$> parseJSON js
1255-------------------------------------------------------------------------------
1370-------------------------------------------------------------------------------
1256-- TH splices
1371-- TH splices
1257-------------------------------------------------------------------------------
1372-------------------------------------------------------------------------------
@@ -1292,12 +1407,12 @@ instance HasSwaggerAesonOptions Schema where
1292instance HasSwaggerAesonOptions Swagger where
1407instance HasSwaggerAesonOptions Swagger where
1293 swaggerAesonOptions _ = mkSwaggerAesonOptions "swagger" & saoAdditionalPairs .~ [("swagger", "2.0")]
1408 swaggerAesonOptions _ = mkSwaggerAesonOptions "swagger" & saoAdditionalPairs .~ [("swagger", "2.0")]
1295−instance HasSwaggerAesonOptions (ParamSchema (SwaggerKindNormal t)) where
1410+instance HasSwaggerAesonOptions (ParamSchema ('SwaggerKindNormal t)) where
1296 swaggerAesonOptions _ = mkSwaggerAesonOptions "paramSchema" & saoSubObject ?~ "items"
1411 swaggerAesonOptions _ = mkSwaggerAesonOptions "paramSchema" & saoSubObject ?~ "items"
1297−instance HasSwaggerAesonOptions (ParamSchema SwaggerKindParamOtherSchema) where
1412+instance HasSwaggerAesonOptions (ParamSchema 'SwaggerKindParamOtherSchema) where
1298 swaggerAesonOptions _ = mkSwaggerAesonOptions "paramSchema" & saoSubObject ?~ "items"
1413 swaggerAesonOptions _ = mkSwaggerAesonOptions "paramSchema" & saoSubObject ?~ "items"
1299-- NOTE: Schema doesn't have 'items' sub object!
1414-- NOTE: Schema doesn't have 'items' sub object!
1300−instance HasSwaggerAesonOptions (ParamSchema SwaggerKindSchema) where
1415+instance HasSwaggerAesonOptions (ParamSchema 'SwaggerKindSchema) where
1301 swaggerAesonOptions _ = mkSwaggerAesonOptions "paramSchema"
1416 swaggerAesonOptions _ = mkSwaggerAesonOptions "paramSchema"
1303instance AesonDefaultValue (ParamSchema s)
1418instance AesonDefaultValue (ParamSchema s)
@@ -1309,3 +1424,4 @@ instance AesonDefaultValue (SwaggerType a)
1309instance AesonDefaultValue MimeList where defaultValue = Just mempty
1424instance AesonDefaultValue MimeList where defaultValue = Just mempty
1310instance AesonDefaultValue Info
1425instance AesonDefaultValue Info
1311instance AesonDefaultValue ParamLocation
1426instance AesonDefaultValue ParamLocation
1427+instance AesonDefaultValue SecurityDefinitions where defaultValue = Just $ SecurityDefinitions mempty