@@ -1,16 +1,23 @@
1{-# LANGUAGE DeriveGeneric #-}
1{-# LANGUAGE DeriveGeneric #-}
2+{-# LANGUAGE DeriveTraversable #-}
2{-# LANGUAGE GeneralizedNewtypeDeriving #-}
3{-# LANGUAGE GeneralizedNewtypeDeriving #-}
4+{-# LANGUAGE OverloadedStrings #-}
5+{-# LANGUAGE TemplateHaskell #-}
3module Data.Swagger.Internal where
6module Data.Swagger.Internal where
5import Data.Aeson (ToJSON, FromJSON)
8import Data.Aeson (ToJSON, FromJSON)
6import qualified Data.Aeson as JSON
9import qualified Data.Aeson as JSON
10+import Data.Foldable (Foldable)
7import Data.HashMap.Strict (HashMap)
11import Data.HashMap.Strict (HashMap)
8import Data.Text (Text)
12import Data.Text (Text)
13+import Data.Traversable (Traversable)
9import Data.Hashable (Hashable)
14import Data.Hashable (Hashable)
10import GHC.Generics (Generic)
15import GHC.Generics (Generic)
11import Network (HostName, PortNumber)
16import Network (HostName, PortNumber)
12import Network.HTTP.Media (MediaType)
17import Network.HTTP.Media (MediaType)
19+import Data.Swagger.Internal.Utils
14-- | This is the root document object for the API specification.
21-- | This is the root document object for the API specification.
15data Swagger = Swagger
22data Swagger = Swagger
16 { -- | Provides metadata about the API.
23 { -- | Provides metadata about the API.
@@ -42,18 +49,18 @@ data Swagger = Swagger
42 , swaggerPaths :: SwaggerPaths
49 , swaggerPaths :: SwaggerPaths
44 -- | An object to hold data types produced and consumed by operations.
51 -- | An object to hold data types produced and consumed by operations.
45− , swaggerDefinitions :: HashMap Text SwaggerSchema
52+ , swaggerDefinitions :: Definitions SwaggerSchema
47 -- | An object to hold parameters that can be used across operations.
54 -- | An object to hold parameters that can be used across operations.
48 -- This property does not define global parameters for all operations.
55 -- This property does not define global parameters for all operations.
49− , swaggerParameters :: HashMap Text SwaggerParameter
56+ , swaggerParameters :: Definitions SwaggerParameter
51 -- | An object to hold responses that can be used across operations.
58 -- | An object to hold responses that can be used across operations.
52 -- This property does not define global responses for all operations.
59 -- This property does not define global responses for all operations.
53− , swaggerResponses :: HashMap Text SwaggerResponse
60+ , swaggerResponses :: Definitions SwaggerResponse
55 -- | Security scheme definitions that can be used across the specification.
62 -- | Security scheme definitions that can be used across the specification.
56− , swaggerSecurityDefinitions :: HashMap Text SwaggerSecurityScheme
63+ , swaggerSecurityDefinitions :: Definitions SwaggerSecurityScheme
58 -- | A declaration of which security schemes are applied for the API as a whole.
65 -- | A declaration of which security schemes are applied for the API as a whole.
59 -- The list of values describes alternative security schemes that can be used
66 -- The list of values describes alternative security schemes that can be used
@@ -386,7 +393,7 @@ data SwaggerSchema = SwaggerSchema
387 , swaggerSchemaItems :: SwaggerSchemaItems
394 , swaggerSchemaItems :: SwaggerSchemaItems
388 , swaggerSchemaAllOf :: [SwaggerSchema]
395 , swaggerSchemaAllOf :: [SwaggerSchema]
389− , swaggerSchemaProperties :: HashMap Text SwaggerSchema
396+ , swaggerSchemaProperties :: Definitions SwaggerSchema
390 , swaggerSchemaAdditionalProperties :: Maybe SwaggerSchema
397 , swaggerSchemaAdditionalProperties :: Maybe SwaggerSchema
392 , swaggerSchemaDiscriminator :: Maybe Text
399 , swaggerSchemaDiscriminator :: Maybe Text
@@ -582,7 +589,7 @@ data SwaggerSecuritySchemeTypeName
582 = SwaggerSecuritySchemeTypeBasic
589 = SwaggerSecuritySchemeTypeBasic
583 | SwaggerSecuritySchemeTypeApiKey
590 | SwaggerSecuritySchemeTypeApiKey
584 | SwaggerSecuritySchemeTypeOAuth2
591 | SwaggerSecuritySchemeTypeOAuth2
585− deriving (Show, Generic)
592+ deriving (Eq, Read, Show, Generic)
587instance Hashable SwaggerSecuritySchemeTypeName
594instance Hashable SwaggerSecuritySchemeTypeName
@@ -597,7 +604,9 @@ data SwaggerSecurityScheme = SwaggerSecurityScheme
597-- | Lists the required security schemes to execute this operation.
604-- | Lists the required security schemes to execute this operation.
598-- The object can have multiple security schemes declared in it which are all required
605-- The object can have multiple security schemes declared in it which are all required
599-- (that is, there is a logical AND between the schemes).
606-- (that is, there is a logical AND between the schemes).
607+newtype SwaggerSecurityRequirement = SwaggerSecurityRequirement
600−type SwaggerSecurityRequirement = HashMap SwaggerSecuritySchemeTypeName Text
608+ { getSwaggerSecurityRequirement :: HashMap SwaggerSecuritySchemeTypeName Text
609+ } deriving (Eq, Read, Show, Monoid)
602-- | Allows adding meta data to a single tag that is used by @SwaggerOperation@.
611-- | Allows adding meta data to a single tag that is used by @SwaggerOperation@.
603-- It is not mandatory to have a @SwaggerTag@ per tag used there.
612-- It is not mandatory to have a @SwaggerTag@ per tag used there.
@@ -625,3 +634,6 @@ data SwaggerExternalDocs = SwaggerExternalDocs
626newtype URL = URL { getUrl :: Text } deriving (Show, ToJSON, FromJSON)
635newtype URL = URL { getUrl :: Text } deriving (Show, ToJSON, FromJSON)
637+newtype Definitions v = Definitions { getDefinitions :: HashMap Text v }
638+ deriving (Eq, Read, Show, Monoid, Functor, Foldable, Traversable)