git.iko.soy/typeable/openapi3
on master help sign in
Add newtype wrappers for some HashMaps
0267740Nickolay Kudasov
src/Data/Swagger/Internal.hs+19−7
@@ -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
4
7
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)
13
18
19+import Data.Swagger.Internal.Utils
20+
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
43
50
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
46
53
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
50
57
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
54
61
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
57
64
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
386
393
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
391
398
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)
586
593
587instance Hashable SwaggerSecuritySchemeTypeName
594instance Hashable SwaggerSecuritySchemeTypeName
588
595
@@ -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)
601
610
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
625
634
626newtype URL = URL { getUrl :: Text } deriving (Show, ToJSON, FromJSON)
635newtype URL = URL { getUrl :: Text } deriving (Show, ToJSON, FromJSON)
627
636
637+newtype Definitions v = Definitions { getDefinitions :: HashMap Text v }
638+ deriving (Eq, Read, Show, Monoid, Functor, Foldable, Traversable)
639+