@@ -1,6 +1,6 @@
2{-# LANGUAGE DataKinds #-}
1{-# LANGUAGE DataKinds #-}
3{-# LANGUAGE DeriveDataTypeable #-}
2{-# LANGUAGE DeriveDataTypeable #-}
3+{-# LANGUAGE DeriveFunctor #-}
4{-# LANGUAGE DeriveGeneric #-}
4{-# LANGUAGE DeriveGeneric #-}
5{-# LANGUAGE DeriveTraversable #-}
5{-# LANGUAGE DeriveTraversable #-}
6{-# LANGUAGE FlexibleContexts #-}
6{-# LANGUAGE FlexibleContexts #-}
@@ -14,91 +14,87 @@
14{-# LANGUAGE TemplateHaskell #-}
14{-# LANGUAGE TemplateHaskell #-}
15{-# LANGUAGE TypeFamilies #-}
15{-# LANGUAGE TypeFamilies #-}
16{-# LANGUAGE UndecidableInstances #-}
16{-# LANGUAGE UndecidableInstances #-}
17−module Data.OpenApi.Internal where
17+module Data.Swagger.Internal where
19import Prelude ()
19import Prelude ()
20import Prelude.Compat
20import Prelude.Compat
22+import Control.Lens ((&), (.~), (?~))
22import Control.Applicative
23import Control.Applicative
23−import Control.Lens ((&), (.~), (?~))
24−import Data.Aeson hiding (Encoding)
24+import Data.Aeson hiding (Encoding)
25−#if MIN_VERSION_aeson(2,0,0)
26−import qualified Data.Aeson.KeyMap as KeyMap
28−import qualified Data.Aeson.Types as JSON
25+import qualified Data.Aeson.Types as JSON
29−import Data.Data (Constr, Data (..), DataType, Fixity (..), Typeable,
26+import Data.Data (Data(..), Typeable, mkConstr, mkDataType, Fixity(..), Constr, DataType, constrIndex)
30− constrIndex, mkConstr, mkDataType)
31−import Data.Hashable (Hashable (..))
27+import Data.Hashable (Hashable)
32−import qualified Data.HashMap.Strict as HashMap
28+import qualified Data.HashMap.Strict as HashMap
33−import Data.HashSet.InsOrd (InsOrdHashSet)
29+import Data.HashSet.InsOrd (InsOrdHashSet)
34−import Data.Map (Map)
30+import Data.Map (Map)
35−import qualified Data.Map as Map
31+import qualified Data.Map as Map
36−import Data.Monoid (Monoid (..))
32+import Data.Monoid (Monoid (..))
37−import Data.Scientific (Scientific)
38−import Data.Semigroup.Compat (Semigroup (..))
33+import Data.Semigroup.Compat (Semigroup (..))
34+import Data.Scientific (Scientific)
39−import Data.String (IsString (..))
35+import Data.String (IsString(..))
40−import Data.Text (Text)
36+import Data.Text (Text)
41−import qualified Data.Text as Text
37+import qualified Data.Text as Text
42−import Data.Text.Encoding (encodeUtf8)
43−import GHC.Generics (Generic)
38+import GHC.Generics (Generic)
44−import Network.HTTP.Media (MediaType, mainType, parameters, parseAccept, subType, (//),
39+import Network.Socket (HostName, PortNumber)
45− (/:))
40+import Network.HTTP.Media (MediaType)
46−import Network.Socket (HostName, PortNumber)
47−import Text.Read (readMaybe)
41+import Text.Read (readMaybe)
49import Data.HashMap.Strict.InsOrd (InsOrdHashMap)
43import Data.HashMap.Strict.InsOrd (InsOrdHashMap)
50import qualified Data.HashMap.Strict.InsOrd as InsOrdHashMap
44import qualified Data.HashMap.Strict.InsOrd as InsOrdHashMap
52−import Data.OpenApi.Aeson.Compat (deleteKey)
53−import Data.OpenApi.Internal.AesonUtils (AesonDefaultValue (..), HasSwaggerAesonOptions (..),
54− mkSwaggerAesonOptions, saoAdditionalPairs, saoSubObject,
55− sopSwaggerGenericParseJSON, sopSwaggerGenericToEncoding,
56− sopSwaggerGenericToJSON, sopSwaggerGenericToJSONWithOpts)
57−import Data.OpenApi.Internal.Utils
58import Generics.SOP.TH (deriveGeneric)
46import Generics.SOP.TH (deriveGeneric)
47+import Data.Swagger.Internal.AesonUtils (sopSwaggerGenericToJSON
48+ ,sopSwaggerGenericToJSONWithOpts
49+ ,sopSwaggerGenericParseJSON
50+ ,HasSwaggerAesonOptions(..)
51+ ,AesonDefaultValue(..)
52+ ,mkSwaggerAesonOptions
55+import Data.Swagger.Internal.Utils
56+import Data.Swagger.Internal.AesonUtils (sopSwaggerGenericToEncoding)
61-- >>> :seti -XDataKinds
59-- >>> :seti -XDataKinds
62-- >>> import Data.Aeson
60-- >>> import Data.Aeson
63−-- >>> import Data.ByteString.Lazy.Char8 as BSL
64−-- >>> import Data.OpenApi.Internal.Utils
66-- | A list of definitions that can be used in references.
62-- | A list of definitions that can be used in references.
67type Definitions = InsOrdHashMap Text
63type Definitions = InsOrdHashMap Text
69-- | This is the root document object for the API specification.
65-- | This is the root document object for the API specification.
70−data OpenApi = OpenApi
66+data Swagger = Swagger
71 { -- | Provides metadata about the API.
67 { -- | Provides metadata about the API.
72 -- The metadata can be used by the clients if needed.
68 -- The metadata can be used by the clients if needed.
73− _openApiInfo :: Info
69+ _swaggerInfo :: Info
75 -- | An array of Server Objects, which provide connectivity information
71 -- | An array of Server Objects, which provide connectivity information
76 -- to a target server. If the servers property is not provided, or is an empty array,
72 -- to a target server. If the servers property is not provided, or is an empty array,
77 -- the default value would be a 'Server' object with a url value of @/@.
73 -- the default value would be a 'Server' object with a url value of @/@.
78− , _openApiServers :: [Server]
74+ , _swaggerServers :: [Server]
80 -- | The available paths and operations for the API.
76 -- | The available paths and operations for the API.
81− , _openApiPaths :: InsOrdHashMap FilePath PathItem
77+ , _swaggerPaths :: InsOrdHashMap FilePath PathItem
83 -- | An element to hold various schemas for the specification.
79 -- | An element to hold various schemas for the specification.
84− , _openApiComponents :: Components
80+ , _swaggerComponents :: Components
86 -- | A declaration of which security mechanisms can be used across the API.
82 -- | A declaration of which security mechanisms can be used across the API.
87 -- The list of values includes alternative security requirement objects that can be used.
83 -- The list of values includes alternative security requirement objects that can be used.
88 -- Only one of the security requirement objects need to be satisfied to authorize a request.
84 -- Only one of the security requirement objects need to be satisfied to authorize a request.
89 -- Individual operations can override this definition.
85 -- Individual operations can override this definition.
90 -- To make security optional, an empty security requirement can be included in the array.
86 -- To make security optional, an empty security requirement can be included in the array.
91− , _openApiSecurity :: [SecurityRequirement]
87+ , _swaggerSecurity :: [SecurityRequirement]
93 -- | A list of tags used by the specification with additional metadata.
89 -- | A list of tags used by the specification with additional metadata.
94 -- The order of the tags can be used to reflect on their order by the parsing tools.
90 -- The order of the tags can be used to reflect on their order by the parsing tools.
95 -- Not all tags that are used by the 'Operation' Object must be declared.
91 -- Not all tags that are used by the 'Operation' Object must be declared.
96 -- The tags that are not declared MAY be organized randomly or based on the tools' logic.
92 -- The tags that are not declared MAY be organized randomly or based on the tools' logic.
97 -- Each tag name in the list MUST be unique.
93 -- Each tag name in the list MUST be unique.
98− , _openApiTags :: InsOrdHashSet Tag
94+ , _swaggerTags :: InsOrdHashSet Tag
100 -- | Additional external documentation.
96 -- | Additional external documentation.
101− , _openApiExternalDocs :: Maybe ExternalDocs
97+ , _swaggerExternalDocs :: Maybe ExternalDocs
102 } deriving (Eq, Show, Generic, Data, Typeable)
98 } deriving (Eq, Show, Generic, Data, Typeable)
104-- | The object provides metadata about the API.
100-- | The object provides metadata about the API.
@@ -195,10 +191,10 @@ data Components = Components
195 , _componentsParameters :: Definitions Param
191 , _componentsParameters :: Definitions Param
196 , _componentsExamples :: Definitions Example
192 , _componentsExamples :: Definitions Example
197 , _componentsRequestBodies :: Definitions RequestBody
193 , _componentsRequestBodies :: Definitions RequestBody
198− , _componentsHeaders :: Definitions Header
194+ , _componentsHeader :: Definitions Header
199− , _componentsSecuritySchemes :: SecurityDefinitions
195+ , _componentsSecuritySchemes :: Definitions SecurityScheme
200− , _componentsLinks :: Definitions Link
196+-- , _componentsLinks
201− , _componentsCallbacks :: Definitions Callback
197+-- , _componentsCallbacks
202 } deriving (Eq, Show, Generic, Data, Typeable)
198 } deriving (Eq, Show, Generic, Data, Typeable)
204-- | Describes the operations available on a single path.
200-- | Describes the operations available on a single path.
@@ -288,11 +284,7 @@ data Operation = Operation
288 -- | The list of possible responses as they are returned from executing this operation.
284 -- | The list of possible responses as they are returned from executing this operation.
289 , _operationResponses :: Responses
285 , _operationResponses :: Responses
291− -- | A map of possible out-of band callbacks related to the parent operation.
287+ -- TODO callbacks
292− -- The key is a unique identifier for the 'Callback' Object.
293− -- Each value in the map is a 'Callback' Object that describes a request
294− -- that may be initiated by the API provider and the expected responses.
295− , _operationCallbacks :: InsOrdHashMap Text (Referenced Callback)
297 -- | Declares this operation to be deprecated.
289 -- | Declares this operation to be deprecated.
298 -- Usage of the declared operation should be refrained.
290 -- Usage of the declared operation should be refrained.
@@ -312,22 +304,6 @@ data Operation = Operation
312 , _operationServers :: [Server]
304 , _operationServers :: [Server]
313 } deriving (Eq, Show, Generic, Data, Typeable)
305 } deriving (Eq, Show, Generic, Data, Typeable)
315−-- This instance should be in @http-media@.
316−instance Data MediaType where
317− gunfold k z c = case constrIndex c of
318− 1 -> k (k (k (z (\main sub params -> foldl (/:) (main // sub) (Map.toList params)))))
319− _ -> error $ "Data.Data.gunfold: Constructor " ++ show c ++ " is not of type MediaType."
321− toConstr _ = mediaTypeConstr
323− dataTypeOf _ = mediaTypeData
325−mediaTypeConstr = mkConstr mediaTypeData "MediaType" [] Prefix
326−mediaTypeData = mkDataType "MediaType" [mediaTypeConstr]
328−instance Hashable MediaType where
329− hashWithSalt salt mt = salt `hashWithSalt` show mt
331-- | Describes a single request body.
307-- | Describes a single request body.
332data RequestBody = RequestBody
308data RequestBody = RequestBody
333 { -- | A brief description of the request body. This could contain examples of use.
309 { -- | A brief description of the request body. This could contain examples of use.
@@ -337,11 +313,9 @@ data RequestBody = RequestBody
337 -- | The content of the request body.
313 -- | The content of the request body.
338 -- The key is a media type or media type range and the value describes it.
314 -- The key is a media type or media type range and the value describes it.
339 -- For requests that match multiple keys, only the most specific key is applicable.
315 -- For requests that match multiple keys, only the most specific key is applicable.
340− -- e.g. @text/plain@ overrides @text/\*@
316+ -- e.g. @text/plain@ overrides @text/*@
341− , _requestBodyContent :: InsOrdHashMap MediaType MediaTypeObject
317+ , _requestBodyContent :: InsOrdHashMap {-MediaType-} Text MediaTypeObject -- FIXME Data MediaType
343− -- | Determines if the request body is required in the request.
344− -- Defaults to 'False'.
345 , _requestBodyRequired :: Maybe Bool
319 , _requestBodyRequired :: Maybe Bool
346 } deriving (Eq, Show, Generic, Data, Typeable)
320 } deriving (Eq, Show, Generic, Data, Typeable)
@@ -394,8 +368,8 @@ data Encoding = Encoding
394 -- for other primitive types – @text/plain@; for object - @application/json@;
368 -- for other primitive types – @text/plain@; for object - @application/json@;
395 -- for array – the default is defined based on the inner type.
369 -- for array – the default is defined based on the inner type.
396 -- The value can be a specific media type (e.g. @application/json@),
370 -- The value can be a specific media type (e.g. @application/json@),
397− -- a wildcard media type (e.g. @image/\*@), or a comma-separated list of the two types.
371+ -- a wildcard media type (e.g. @image/*@), or a comma-separated list of the two types.
398− _encodingContentType :: Maybe MediaType
372+ _encodingContentType :: Maybe Text
400 -- | A map allowing additional information to be provided as headers,
374 -- | A map allowing additional information to be provided as headers,
401 -- for example @Content-Disposition@. @Content-Type@ is described separately
375 -- for example @Content-Disposition@. @Content-Type@ is described separately
@@ -434,15 +408,18 @@ mimeListConstr :: Constr
434mimeListConstr = mkConstr mimeListDataType "MimeList" ["getMimeList"] Prefix
408mimeListConstr = mkConstr mimeListDataType "MimeList" ["getMimeList"] Prefix
436mimeListDataType :: DataType
410mimeListDataType :: DataType
437−mimeListDataType = mkDataType "Data.OpenApi.MimeList" [mimeListConstr]
411+mimeListDataType = mkDataType "Data.Swagger.MimeList" [mimeListConstr]
439instance Data MimeList where
413instance Data MimeList where
440 gunfold k z c = case constrIndex c of
414 gunfold k z c = case constrIndex c of
441− 1 -> k (z (MimeList . map fromString))
415+ 1 -> k (z (\xs -> MimeList (map fromString xs)))
442 _ -> error $ "Data.Data.gunfold: Constructor " ++ show c ++ " is not of type MimeList."
416 _ -> error $ "Data.Data.gunfold: Constructor " ++ show c ++ " is not of type MimeList."
443 toConstr (MimeList _) = mimeListConstr
417 toConstr (MimeList _) = mimeListConstr
444 dataTypeOf _ = mimeListDataType
418 dataTypeOf _ = mimeListDataType
446-- | Describes a single operation parameter.
423-- | Describes a single operation parameter.
447-- A unique parameter is defined by a combination of a name and location.
424-- A unique parameter is defined by a combination of a name and location.
448data Param = Param
425data Param = Param
@@ -452,7 +429,7 @@ data Param = Param
453 -- | A brief description of the parameter.
430 -- | A brief description of the parameter.
454 -- This could contain examples of use.
431 -- This could contain examples of use.
455− -- CommonMark syntax MAY be used for rich text representation.
432+ -- GFM syntax can be used for rich text representation.
456 , _paramDescription :: Maybe Text
433 , _paramDescription :: Maybe Text
458 -- | Determines whether this parameter is mandatory.
435 -- | Determines whether this parameter is mandatory.
@@ -472,13 +449,6 @@ data Param = Param
472 -- a parameter with an empty value. Default value is @false@.
449 -- a parameter with an empty value. Default value is @false@.
473 , _paramAllowEmptyValue :: Maybe Bool
450 , _paramAllowEmptyValue :: Maybe Bool
475− -- | Determines whether the parameter value SHOULD allow reserved characters,
476− -- as defined by [RFC3986](https://tools.ietf.org/html/rfc3986#section-2.2)
477− -- @:/?#[]@!$&'()*+,;=@ to be included without percent-encoding.
478− -- This property only applies to parameters with an '_paramIn' value of 'ParamQuery'.
479− -- The default value is 'False'.
480− , _paramAllowReserved :: Maybe Bool
482 -- | Parameter schema.
452 -- | Parameter schema.
483 , _paramSchema :: Maybe (Referenced Schema)
453 , _paramSchema :: Maybe (Referenced Schema)
@@ -509,10 +479,6 @@ data Param = Param
509 -- Furthermore, if referencing a schema that contains an example,
479 -- Furthermore, if referencing a schema that contains an example,
510 -- the examples value SHALL override the example provided by the schema.
480 -- the examples value SHALL override the example provided by the schema.
511 , _paramExamples :: InsOrdHashMap Text (Referenced Example)
481 , _paramExamples :: InsOrdHashMap Text (Referenced Example)
514− -- _paramContent :: InsOrdHashMap MediaType MediaTypeObject
515− -- should be singleton. mutually exclusive with _paramSchema.
516 } deriving (Eq, Show, Generic, Data, Typeable)
482 } deriving (Eq, Show, Generic, Data, Typeable)
518data Example = Example
484data Example = Example
@@ -537,63 +503,27 @@ data Example = Example
537 , _exampleExternalValue :: Maybe URL
503 , _exampleExternalValue :: Maybe URL
538 } deriving (Eq, Show, Generic, Typeable, Data)
504 } deriving (Eq, Show, Generic, Typeable, Data)
540−data ExpressionOrValue
543− deriving (Eq, Show, Generic, Typeable, Data)
545−-- | The Link object represents a possible design-time link for a response.
546−-- The presence of a link does not guarantee the caller's ability to successfully invoke it,
547−-- rather it provides a known relationship and traversal mechanism between responses and other operations.
549− { -- | A relative or absolute URI reference to an OAS operation.
550− -- This field is mutually exclusive of the '_linkOperationId' field,
551− -- and MUST point to an 'Operation' Object. Relative '_linkOperationRef'
552− -- values MAY be used to locate an existing 'Operation' Object in the OpenAPI definition.
553− _linkOperationRef :: Maybe Text
555− -- | The name of an /existing/, resolvable OAS operation, as defined with a unique
556− -- '_operationOperationId'. This field is mutually exclusive of the '_linkOperationRef' field.
557− , _linkOperationId :: Maybe Text
559− -- | A map representing parameters to pass to an operation as specified with '_linkOperationId'
560− -- or identified via '_linkOperationRef'. The key is the parameter name to be used, whereas
561− -- the value can be a constant or an expression to be evaluated and passed to the linked operation.
562− -- The parameter name can be qualified using the parameter location @[{in}.]{name}@
563− -- for operations that use the same parameter name in different locations (e.g. path.id).
564− , _linkParameters :: InsOrdHashMap Text ExpressionOrValue
566− -- | A literal value or @{expression}@ to use as a request body when calling the target operation.
567− , _linkRequestBody :: Maybe ExpressionOrValue
569− -- | A description of the link.
570− , _linkDescription :: Maybe Text
572− -- | A server object to be used by the target operation.
573− , _linkServer :: Maybe Server
574− } deriving (Eq, Show, Generic, Typeable, Data)
576−-- | Items for @'OpenApiArray'@ schemas.
506+-- | Items for @'SwaggerArray'@ schemas.
578-- __Warning__: OpenAPI 3.0 does not support tuple arrays. However, OpenAPI 3.1 will, as
508-- __Warning__: OpenAPI 3.0 does not support tuple arrays. However, OpenAPI 3.1 will, as
579-- it will incorporate Json Schema mostly verbatim.
509-- it will incorporate Json Schema mostly verbatim.
581−-- @'OpenApiItemsObject'@ should be used to specify homogenous array @'Schema'@s.
511+-- @'SwaggerItemsObject'@ should be used to specify homogenous array @'Schema'@s.
583−-- @'OpenApiItemsArray'@ should be used to specify tuple @'Schema'@s.
513+-- @'SwaggerItemsArray'@ should be used to specify tuple @'Schema'@s.
584−data OpenApiItems where
514+data SwaggerItems where
585− OpenApiItemsObject :: Referenced Schema -> OpenApiItems
515+ SwaggerItemsObject :: Referenced Schema -> SwaggerItems
586− OpenApiItemsArray :: [Referenced Schema] -> OpenApiItems
516+ SwaggerItemsArray :: [Referenced Schema] -> SwaggerItems
587 deriving (Eq, Show, Typeable, Data)
517 deriving (Eq, Show, Typeable, Data)
589−data OpenApiType where
519+data SwaggerType where
590− OpenApiString :: OpenApiType
520+ SwaggerString :: SwaggerType
591− OpenApiNumber :: OpenApiType
521+ SwaggerNumber :: SwaggerType
592− OpenApiInteger :: OpenApiType
522+ SwaggerInteger :: SwaggerType
593− OpenApiBoolean :: OpenApiType
523+ SwaggerBoolean :: SwaggerType
594− OpenApiArray :: OpenApiType
524+ SwaggerArray :: SwaggerType
595− OpenApiNull :: OpenApiType
525+ SwaggerNull :: SwaggerType
596− OpenApiObject :: OpenApiType
526+ SwaggerObject :: SwaggerType
597 deriving (Eq, Show, Typeable, Generic, Data)
527 deriving (Eq, Show, Typeable, Generic, Data)
599data ParamLocation
529data ParamLocation
@@ -638,33 +568,9 @@ data Schema = Schema
638 , _schemaMaxProperties :: Maybe Integer
568 , _schemaMaxProperties :: Maybe Integer
639 , _schemaMinProperties :: Maybe Integer
569 , _schemaMinProperties :: Maybe Integer
641− , -- | Declares the value of the parameter that the server will use if none is provided,
571+ , _schemaParamSchema :: ParamSchema
642− -- for example a @"count"@ to control the number of results per page might default to @100@
643− -- if not supplied by the client in the request.
644− -- (Note: "default" has no meaning for required parameters.)
645− -- Unlike JSON Schema this value MUST conform to the defined type for this parameter.
646− _schemaDefault :: Maybe Value
648− , _schemaType :: Maybe OpenApiType
649− , _schemaFormat :: Maybe Format
650− , _schemaItems :: Maybe OpenApiItems
651− , _schemaMaximum :: Maybe Scientific
652− , _schemaExclusiveMaximum :: Maybe Bool
653− , _schemaMinimum :: Maybe Scientific
654− , _schemaExclusiveMinimum :: Maybe Bool
655− , _schemaMaxLength :: Maybe Integer
656− , _schemaMinLength :: Maybe Integer
657− , _schemaPattern :: Maybe Pattern
658− , _schemaMaxItems :: Maybe Integer
659− , _schemaMinItems :: Maybe Integer
660− , _schemaUniqueItems :: Maybe Bool
661− , _schemaEnum :: Maybe [Value]
662− , _schemaMultipleOf :: Maybe Scientific
663 } deriving (Eq, Show, Generic, Data, Typeable)
572 } deriving (Eq, Show, Generic, Data, Typeable)
665−-- | Regex pattern for @string@ type.
668data Discriminator = Discriminator
574data Discriminator = Discriminator
669 { -- | The name of the property in the payload that will hold the discriminator value.
575 { -- | The name of the property in the payload that will hold the discriminator value.
670 _discriminatorPropertyName :: Text
576 _discriminatorPropertyName :: Text
@@ -680,9 +586,37 @@ data NamedSchema = NamedSchema
680 , _namedSchemaSchema :: Schema
586 , _namedSchemaSchema :: Schema
681 } deriving (Eq, Show, Generic, Data, Typeable)
587 } deriving (Eq, Show, Generic, Data, Typeable)
589+-- | Regex pattern for @string@ type.
592+data ParamSchema = ParamSchema
593+ { -- | Declares the value of the parameter that the server will use if none is provided,
594+ -- for example a @"count"@ to control the number of results per page might default to @100@
595+ -- if not supplied by the client in the request.
596+ -- (Note: "default" has no meaning for required parameters.)
597+ -- Unlike JSON Schema this value MUST conform to the defined type for this parameter.
598+ _paramSchemaDefault :: Maybe Value
600+ , _paramSchemaType :: Maybe SwaggerType
601+ , _paramSchemaFormat :: Maybe Format
602+ , _paramSchemaItems :: Maybe SwaggerItems
603+ , _paramSchemaMaximum :: Maybe Scientific
604+ , _paramSchemaExclusiveMaximum :: Maybe Bool
605+ , _paramSchemaMinimum :: Maybe Scientific
606+ , _paramSchemaExclusiveMinimum :: Maybe Bool
607+ , _paramSchemaMaxLength :: Maybe Integer
608+ , _paramSchemaMinLength :: Maybe Integer
609+ , _paramSchemaPattern :: Maybe Pattern
610+ , _paramSchemaMaxItems :: Maybe Integer
611+ , _paramSchemaMinItems :: Maybe Integer
612+ , _paramSchemaUniqueItems :: Maybe Bool
613+ , _paramSchemaEnum :: Maybe [Value]
614+ , _paramSchemaMultipleOf :: Maybe Scientific
615+ } deriving (Eq, Show, Generic, Typeable, Data)
683data Xml = Xml
617data Xml = Xml
684 { -- | Replaces the name of the element/attribute used for the described schema property.
618 { -- | Replaces the name of the element/attribute used for the described schema property.
685− -- When defined within the @'OpenApiItems'@ (items), it will affect the name of the individual XML elements within the list.
619+ -- When defined within the @'SwaggerItems'@ (items), it will affect the name of the individual XML elements within the list.
686 -- When defined alongside type being array (outside the items),
620 -- When defined alongside type being array (outside the items),
687 -- it will affect the wrapping element and only if wrapped is true.
621 -- it will affect the wrapping element and only if wrapped is true.
688 -- If wrapped is false, it will be ignored.
622 -- If wrapped is false, it will be ignored.
@@ -734,44 +668,25 @@ data Response = Response
734 -- | A map containing descriptions of potential response payloads.
668 -- | A map containing descriptions of potential response payloads.
735 -- The key is a media type or media type range and the value describes it.
669 -- The key is a media type or media type range and the value describes it.
736 -- For responses that match multiple keys, only the most specific key is applicable.
670 -- For responses that match multiple keys, only the most specific key is applicable.
737− -- e.g. @text/plain@ overrides @text/\*@.
671+ -- e.g. @text/plain@ overrides @text/*@.
738− , _responseContent :: InsOrdHashMap MediaType MediaTypeObject
672+ , _responseContent :: InsOrdHashMap Text MediaTypeObject
740 -- | Maps a header name to its definition.
674 -- | Maps a header name to its definition.
741 , _responseHeaders :: InsOrdHashMap HeaderName (Referenced Header)
675 , _responseHeaders :: InsOrdHashMap HeaderName (Referenced Header)
743− -- | A map of operations links that can be followed from the response.
677+ -- TODO links
744− -- The key of the map is a short name for the link, following the naming
745− -- constraints of the names for 'Component' Objects.
746− , _responseLinks :: InsOrdHashMap Text (Referenced Link)
747 } deriving (Eq, Show, Generic, Data, Typeable)
678 } deriving (Eq, Show, Generic, Data, Typeable)
749instance IsString Response where
680instance IsString Response where
750− fromString s = Response (fromString s) mempty mempty mempty
681+ fromString s = Response (fromString s) mempty mempty
752−-- | A map of possible out-of band callbacks related to the parent operation.
753−-- Each value in the map is a 'PathItem' Object that describes a set of requests that
754−-- may be initiated by the API provider and the expected responses.
755−-- The key value used to identify the path item object is an expression, evaluated at runtime,
756−-- that identifies a URL to use for the callback operation.
757−newtype Callback = Callback (InsOrdHashMap Text PathItem)
758− deriving (Eq, Show, Generic, Data, Typeable)
760type HeaderName = Text
683type HeaderName = Text
762−-- | Header fields have the same meaning as for 'Param'.
685+
763−--
686+-- TODO this is mostly a copy of 'Param'.
764−-- Style is always treated as 'StyleSimple', as it is the only value allowed for headers.
765data Header = Header
687data Header = Header
766 { -- | A short description of the header.
688 { -- | A short description of the header.
767− _headerDescription :: Maybe HeaderName
689+ _headerDescription :: Maybe Text
769− , _headerRequired :: Maybe Bool
770− , _headerDeprecated :: Maybe Bool
771− , _headerAllowEmptyValue :: Maybe Bool
772− , _headerExplode :: Maybe Bool
773− , _headerExample :: Maybe Value
774− , _headerExamples :: InsOrdHashMap Text (Referenced Example)
776 , _headerSchema :: Maybe (Referenced Schema)
691 , _headerSchema :: Maybe (Referenced Schema)
777 } deriving (Eq, Show, Generic, Data, Typeable)
692 } deriving (Eq, Show, Generic, Data, Typeable)
@@ -797,17 +712,17 @@ type AuthorizationURL = Text
797-- | The token URL to be used for OAuth2 flow. This SHOULD be in the form of a URL.
712-- | The token URL to be used for OAuth2 flow. This SHOULD be in the form of a URL.
798type TokenURL = Text
713type TokenURL = Text
800−newtype OAuth2ImplicitFlow
715+data OAuth2ImplicitFlow = OAuth2ImplicitFlow
801− = OAuth2ImplicitFlow {_oAuth2ImplicitFlowAuthorizationUrl :: AuthorizationURL}
716+ { _oAuth2ImplicitFlowAuthorizationUrl :: AuthorizationURL
802− deriving (Eq, Show, Generic, Data, Typeable)
717+ } deriving (Eq, Show, Generic, Data, Typeable)
804−newtype OAuth2PasswordFlow
719+data OAuth2PasswordFlow = OAuth2PasswordFlow
805− = OAuth2PasswordFlow {_oAuth2PasswordFlowTokenUrl :: TokenURL}
720+ { _oAuth2PasswordFlowTokenUrl :: TokenURL
806− deriving (Eq, Show, Generic, Data, Typeable)
721+ } deriving (Eq, Show, Generic, Data, Typeable)
808−newtype OAuth2ClientCredentialsFlow
723+data OAuth2ClientCredentialsFlow = OAuth2ClientCredentialsFlow
809− = OAuth2ClientCredentialsFlow {_oAuth2ClientCredentialsFlowTokenUrl :: TokenURL}
724+ { _oAuth2ClientCredentialsFlowTokenUrl :: TokenURL
810− deriving (Eq, Show, Generic, Data, Typeable)
725+ } deriving (Eq, Show, Generic, Data, Typeable)
812data OAuth2AuthorizationCodeFlow = OAuth2AuthorizationCodeFlow
727data OAuth2AuthorizationCodeFlow = OAuth2AuthorizationCodeFlow
813 { _oAuth2AuthorizationCodeFlowAuthorizationUrl :: AuthorizationURL
728 { _oAuth2AuthorizationCodeFlowAuthorizationUrl :: AuthorizationURL
@@ -840,50 +755,8 @@ data OAuth2Flows = OAuth2Flows
840 , _oAuth2FlowsAuthorizationCode :: Maybe (OAuth2Flow OAuth2AuthorizationCodeFlow)
755 , _oAuth2FlowsAuthorizationCode :: Maybe (OAuth2Flow OAuth2AuthorizationCodeFlow)
841 } deriving (Eq, Show, Generic, Data, Typeable)
756 } deriving (Eq, Show, Generic, Data, Typeable)
843−type BearerFormat = Text
846− = HttpSchemeBearer (Maybe BearerFormat)
848− | HttpSchemeCustom Text
849− deriving (Eq, Show, Generic, Data, Typeable)
853−-- >>> BSL.putStrLn $ encodePretty (SecuritySchemeHttp (HttpSchemeBearer Nothing))
855−-- "scheme": "bearer",
859−-- >>> BSL.putStrLn $ encodePretty (SecuritySchemeHttp (HttpSchemeBearer (Just "jwt")))
861−-- "bearerFormat": "jwt",
862−-- "scheme": "bearer",
866−-- >>> BSL.putStrLn $ encodePretty (SecuritySchemeHttp HttpSchemeBasic)
868−-- "scheme": "basic",
872−-- >>> BSL.putStrLn $ encodePretty (SecuritySchemeHttp (HttpSchemeCustom "CANARY"))
874−-- "scheme": "CANARY",
878−-- >>> BSL.putStrLn $ encodePretty (SecuritySchemeApiKey (ApiKeyParams "id" ApiKeyCookie))
885data SecuritySchemeType
758data SecuritySchemeType
886− = SecuritySchemeHttp HttpSchemeType
759+ = SecuritySchemeHttp
887 | SecuritySchemeApiKey ApiKeyParams
760 | SecuritySchemeApiKey ApiKeyParams
888 | SecuritySchemeOAuth2 OAuth2Flows
761 | SecuritySchemeOAuth2 OAuth2Flows
889 | SecuritySchemeOpenIdConnect URL
762 | SecuritySchemeOpenIdConnect URL
@@ -918,7 +791,7 @@ data Tag = Tag
918 _tagName :: TagName
791 _tagName :: TagName
920 -- | A short description for the tag.
793 -- | A short description for the tag.
921− -- [CommonMark syntax](https://spec.commonmark.org/) MAY be used for rich text representation.
794+ -- GFM syntax can be used for rich text representation.
922 , _tagDescription :: Maybe Text
795 , _tagDescription :: Maybe Text
924 -- | Additional external documentation for this tag.
797 -- | Additional external documentation for this tag.
@@ -933,7 +806,7 @@ instance IsString Tag where
933-- | Allows referencing an external resource for extended documentation.
806-- | Allows referencing an external resource for extended documentation.
934data ExternalDocs = ExternalDocs
807data ExternalDocs = ExternalDocs
935 { -- | A short description of the target documentation.
808 { -- | A short description of the target documentation.
936− -- [CommonMark syntax](https://spec.commonmark.org/) MAY be used for rich text representation.
809+ -- GFM syntax can be used for rich text representation.
937 _externalDocsDescription :: Maybe Text
810 _externalDocsDescription :: Maybe Text
939 -- | The URL for the target documentation.
812 -- | The URL for the target documentation.
@@ -980,18 +853,18 @@ deriveGeneric ''MediaTypeObject
980deriveGeneric ''Responses
853deriveGeneric ''Responses
981deriveGeneric ''SecurityScheme
854deriveGeneric ''SecurityScheme
982deriveGeneric ''Schema
855deriveGeneric ''Schema
983−deriveGeneric ''OpenApi
856+deriveGeneric ''ParamSchema
857+deriveGeneric ''Swagger
984deriveGeneric ''Example
858deriveGeneric ''Example
985deriveGeneric ''Encoding
859deriveGeneric ''Encoding
988-- =======================================================================
861-- =======================================================================
989-- Monoid instances
862-- Monoid instances
990-- =======================================================================
863-- =======================================================================
992−instance Semigroup OpenApi where
865+instance Semigroup Swagger where
993 (<>) = genericMappend
866 (<>) = genericMappend
994−instance Monoid OpenApi where
867+instance Monoid Swagger where
995 mempty = genericMempty
868 mempty = genericMempty
996 mappend = (<>)
869 mappend = (<>)
@@ -1025,6 +898,12 @@ instance Monoid Schema where
1025 mempty = genericMempty
898 mempty = genericMempty
1026 mappend = (<>)
899 mappend = (<>)
901+instance Semigroup ParamSchema where
902+ (<>) = genericMappend
903+instance Monoid ParamSchema where
904+ mempty = genericMempty
1028instance Semigroup Param where
907instance Semigroup Param where
1029 (<>) = genericMappend
908 (<>) = genericMappend
1030instance Monoid Param where
909instance Monoid Param where
@@ -1119,19 +998,19 @@ instance SwaggerMonoid Info
1119instance SwaggerMonoid Components
998instance SwaggerMonoid Components
1120instance SwaggerMonoid PathItem
999instance SwaggerMonoid PathItem
1121instance SwaggerMonoid Schema
1000instance SwaggerMonoid Schema
1001+instance SwaggerMonoid ParamSchema
1122instance SwaggerMonoid Param
1002instance SwaggerMonoid Param
1123instance SwaggerMonoid Responses
1003instance SwaggerMonoid Responses
1124instance SwaggerMonoid Response
1004instance SwaggerMonoid Response
1125instance SwaggerMonoid ExternalDocs
1005instance SwaggerMonoid ExternalDocs
1126instance SwaggerMonoid Operation
1006instance SwaggerMonoid Operation
1127instance (Eq a, Hashable a) => SwaggerMonoid (InsOrdHashSet a)
1007instance (Eq a, Hashable a) => SwaggerMonoid (InsOrdHashSet a)
1128−instance SwaggerMonoid SecurityDefinitions
1130instance SwaggerMonoid MimeList
1009instance SwaggerMonoid MimeList
1131deriving instance SwaggerMonoid URL
1010deriving instance SwaggerMonoid URL
1133−instance SwaggerMonoid OpenApiType where
1012+instance SwaggerMonoid SwaggerType where
1134− swaggerMempty = OpenApiString
1013+ swaggerMempty = SwaggerString
1135 swaggerMappend _ y = y
1014 swaggerMappend _ y = y
1137instance SwaggerMonoid ParamLocation where
1016instance SwaggerMonoid ParamLocation where
@@ -1154,7 +1033,7 @@ instance Monoid a => SwaggerMonoid (Referenced a) where
1154instance ToJSON Style where
1033instance ToJSON Style where
1155 toJSON = genericToJSON (jsonPrefix "Style")
1034 toJSON = genericToJSON (jsonPrefix "Style")
1157−instance ToJSON OpenApiType where
1036+instance ToJSON SwaggerType where
1158 toJSON = genericToJSON (jsonPrefix "Swagger")
1037 toJSON = genericToJSON (jsonPrefix "Swagger")
1160instance ToJSON ParamLocation where
1039instance ToJSON ParamLocation where
@@ -1209,7 +1088,7 @@ instance ToJSON OAuth2AuthorizationCodeFlow where
1209instance FromJSON Style where
1088instance FromJSON Style where
1210 parseJSON = genericParseJSON (jsonPrefix "Style")
1089 parseJSON = genericParseJSON (jsonPrefix "Style")
1212−instance FromJSON OpenApiType where
1091+instance FromJSON SwaggerType where
1213 parseJSON = genericParseJSON (jsonPrefix "Swagger")
1092 parseJSON = genericParseJSON (jsonPrefix "Swagger")
1215instance FromJSON ParamLocation where
1094instance FromJSON ParamLocation where
@@ -1258,14 +1137,7 @@ instance FromJSON OAuth2AuthorizationCodeFlow where
1258-- Manual ToJSON instances
1137-- Manual ToJSON instances
1259-- =======================================================================
1138-- =======================================================================
1261−instance ToJSON MediaType where
1262− toJSON = toJSON . show
1263− toEncoding = toEncoding . show
1265−instance ToJSONKey MediaType where
1266− toJSONKey = JSON.toJSONKeyText (Text.pack . show)
1268−instance (Eq p, ToJSON p, AesonDefaultValue p) => ToJSON (OAuth2Flow p) where
1140+instance (Eq p, ToJSON p, AesonDefaultValue p) =>ToJSON (OAuth2Flow p) where
1269 toJSON = sopSwaggerGenericToJSON
1141 toJSON = sopSwaggerGenericToJSON
1270 toEncoding = sopSwaggerGenericToEncoding
1142 toEncoding = sopSwaggerGenericToEncoding
@@ -1274,19 +1146,8 @@ instance ToJSON OAuth2Flows where
1274 toEncoding = sopSwaggerGenericToEncoding
1146 toEncoding = sopSwaggerGenericToEncoding
1276instance ToJSON SecuritySchemeType where
1148instance ToJSON SecuritySchemeType where
1277− toJSON (SecuritySchemeHttp ty) = case ty of
1149+ toJSON SecuritySchemeHttp
1278− HttpSchemeBearer mFmt ->
1279− object $ [ "type" .= ("http" :: Text)
1280− , "scheme" .= ("bearer" :: Text)
1281− ] <> maybe [] (\t -> ["bearerFormat" .= t]) mFmt
1283− object [ "type" .= ("http" :: Text)
1284− , "scheme" .= ("basic" :: Text)
1286− HttpSchemeCustom t ->
1287− object [ "type" .= ("http" :: Text)
1150+ = object [ "type" .= ("http" :: Text) ]
1290 toJSON (SecuritySchemeApiKey params)
1151 toJSON (SecuritySchemeApiKey params)
1291 = toJSON params
1152 = toJSON params
1292 <+> object [ "type" .= ("apiKey" :: Text) ]
1153 <+> object [ "type" .= ("apiKey" :: Text) ]
@@ -1299,9 +1160,9 @@ instance ToJSON SecuritySchemeType where
1299 , "openIdConnectUrl" .= url
1160 , "openIdConnectUrl" .= url
1302−instance ToJSON OpenApi where
1163+instance ToJSON Swagger where
1303 toJSON a = sopSwaggerGenericToJSON a &
1164 toJSON a = sopSwaggerGenericToJSON a &
1304− if InsOrdHashMap.null (_openApiPaths a)
1165+ if InsOrdHashMap.null (_swaggerPaths a)
1305 then (<+> object ["paths" .= object []])
1166 then (<+> object ["paths" .= object []])
1307 toEncoding = sopSwaggerGenericToEncoding
1168 toEncoding = sopSwaggerGenericToEncoding
@@ -1315,8 +1176,8 @@ instance ToJSON SecurityScheme where
1315 toEncoding = sopSwaggerGenericToEncoding
1176 toEncoding = sopSwaggerGenericToEncoding
1317instance ToJSON Schema where
1178instance ToJSON Schema where
1318− toJSON = sopSwaggerGenericToJSONWithOpts $
1179+ toJSON = sopSwaggerGenericToJSON
1319− mkSwaggerAesonOptions "schema" & saoSubObject ?~ "items"
1180+ toEncoding = sopSwaggerGenericToEncoding
1321instance ToJSON Header where
1182instance ToJSON Header where
1322 toJSON = sopSwaggerGenericToJSON
1183 toJSON = sopSwaggerGenericToJSON
@@ -1325,21 +1186,17 @@ instance ToJSON Header where
1325-- | As for nullary schema for 0-arity type constructors, see
1186-- | As for nullary schema for 0-arity type constructors, see
1326-- <https://github.com/GetShopTV/swagger2/issues/167>.
1187-- <https://github.com/GetShopTV/swagger2/issues/167>.
1328−-- >>> BSL.putStrLn $ encodePretty (OpenApiItemsArray [])
1189+-- >>> encode (SwaggerItemsArray [])
1332−-- "maxItems": 0
1190+-- "{\"example\":[],\"items\":{},\"maxItems\":0}"
1335−instance ToJSON OpenApiItems where
1192+instance ToJSON SwaggerItems where
1336− toJSON (OpenApiItemsObject x) = object [ "items" .= x ]
1193+ toJSON (SwaggerItemsObject x) = object [ "items" .= x ]
1337− toJSON (OpenApiItemsArray []) = object
1194+ toJSON (SwaggerItemsArray []) = object
1338 [ "items" .= object []
1195 [ "items" .= object []
1339 , "maxItems" .= (0 :: Int)
1196 , "maxItems" .= (0 :: Int)
1340 , "example" .= Array mempty
1197 , "example" .= Array mempty
1342− toJSON (OpenApiItemsArray x) = object [ "items" .= x ]
1199+ toJSON (SwaggerItemsArray x) = object [ "items" .= x ]
1344instance ToJSON Components where
1201instance ToJSON Components where
1345 toJSON = sopSwaggerGenericToJSON
1202 toJSON = sopSwaggerGenericToJSON
@@ -1384,10 +1241,6 @@ instance ToJSON Encoding where
1384 toJSON = sopSwaggerGenericToJSON
1241 toJSON = sopSwaggerGenericToJSON
1385 toEncoding = sopSwaggerGenericToEncoding
1242 toEncoding = sopSwaggerGenericToEncoding
1387−instance ToJSON Link where
1388− toJSON = sopSwaggerGenericToJSON
1389− toEncoding = sopSwaggerGenericToEncoding
1391instance ToJSON SecurityDefinitions where
1244instance ToJSON SecurityDefinitions where
1392 toJSON (SecurityDefinitions sd) = toJSON sd
1245 toJSON (SecurityDefinitions sd) = toJSON sd
@@ -1404,31 +1257,20 @@ instance ToJSON (Referenced Response) where toJSON = referencedToJSON "#/compone
1404instance ToJSON (Referenced RequestBody) where toJSON = referencedToJSON "#/components/requestBodies/"
1257instance ToJSON (Referenced RequestBody) where toJSON = referencedToJSON "#/components/requestBodies/"
1405instance ToJSON (Referenced Example) where toJSON = referencedToJSON "#/components/examples/"
1258instance ToJSON (Referenced Example) where toJSON = referencedToJSON "#/components/examples/"
1406instance ToJSON (Referenced Header) where toJSON = referencedToJSON "#/components/headers/"
1259instance ToJSON (Referenced Header) where toJSON = referencedToJSON "#/components/headers/"
1407−instance ToJSON (Referenced Link) where toJSON = referencedToJSON "#/components/links/"
1260+
1408−instance ToJSON (Referenced Callback) where toJSON = referencedToJSON "#/components/callbacks/"
1261+instance ToJSON ParamSchema where
1262+ -- TODO: this is a bit fishy, why we need sub object only in `ToJSON`?
1263+ toJSON = sopSwaggerGenericToJSONWithOpts $
1264+ mkSwaggerAesonOptions "paramSchema" & saoSubObject ?~ "items"
1410instance ToJSON AdditionalProperties where
1266instance ToJSON AdditionalProperties where
1411 toJSON (AdditionalPropertiesAllowed b) = toJSON b
1267 toJSON (AdditionalPropertiesAllowed b) = toJSON b
1412 toJSON (AdditionalPropertiesSchema s) = toJSON s
1268 toJSON (AdditionalPropertiesSchema s) = toJSON s
1414−instance ToJSON ExpressionOrValue where
1415− toJSON (Expression expr) = toJSON expr
1416− toJSON (Value val) = toJSON val
1418−instance ToJSON Callback where
1419− toJSON (Callback ps) = toJSON ps
1421-- =======================================================================
1270-- =======================================================================
1422-- Manual FromJSON instances
1271-- Manual FromJSON instances
1423-- =======================================================================
1272-- =======================================================================
1425−instance FromJSON MediaType where
1426− parseJSON = withText "MediaType" $ \str ->
1427− maybe (fail $ "Invalid media type literal " <> Text.unpack str) pure $ parseAccept $ encodeUtf8 str
1429−instance FromJSONKey MediaType where
1430− fromJSONKey = FromJSONKeyTextParser (parseJSON . String)
1432instance (Eq p, FromJSON p, AesonDefaultValue p) => FromJSON (OAuth2Flow p) where
1274instance (Eq p, FromJSON p, AesonDefaultValue p) => FromJSON (OAuth2Flow p) where
1433 parseJSON = sopSwaggerGenericParseJSON
1275 parseJSON = sopSwaggerGenericParseJSON
@@ -1439,19 +1281,14 @@ instance FromJSON SecuritySchemeType where
1439 parseJSON js@(Object o) = do
1281 parseJSON js@(Object o) = do
1440 (t :: Text) <- o .: "type"
1282 (t :: Text) <- o .: "type"
1441 case t of
1283 case t of
1443− scheme <- o .: "scheme"
1444− SecuritySchemeHttp <$> case scheme of
1284+ "http" -> pure SecuritySchemeHttp
1445− "bearer" -> HttpSchemeBearer <$> (o .:! "bearerFormat")
1446− "basic" -> pure HttpSchemeBasic
1447− t -> pure $ HttpSchemeCustom t
1448 "apiKey" -> SecuritySchemeApiKey <$> parseJSON js
1285 "apiKey" -> SecuritySchemeApiKey <$> parseJSON js
1449 "oauth2" -> SecuritySchemeOAuth2 <$> (o .: "flows")
1286 "oauth2" -> SecuritySchemeOAuth2 <$> (o .: "flows")
1450 "openIdConnect" -> SecuritySchemeOpenIdConnect <$> (o .: "openIdConnectUrl")
1287 "openIdConnect" -> SecuritySchemeOpenIdConnect <$> (o .: "openIdConnectUrl")
1451 _ -> empty
1288 _ -> empty
1452 parseJSON _ = empty
1289 parseJSON _ = empty
1454−instance FromJSON OpenApi where
1291+instance FromJSON Swagger where
1455 parseJSON = sopSwaggerGenericParseJSON
1292 parseJSON = sopSwaggerGenericParseJSON
1457instance FromJSON Server where
1294instance FromJSON Server where
@@ -1463,28 +1300,27 @@ instance FromJSON SecurityScheme where
1463instance FromJSON Schema where
1300instance FromJSON Schema where
1464 parseJSON = fmap nullaryCleanup . sopSwaggerGenericParseJSON
1301 parseJSON = fmap nullaryCleanup . sopSwaggerGenericParseJSON
1465 where nullaryCleanup :: Schema -> Schema
1302 where nullaryCleanup :: Schema -> Schema
1466− nullaryCleanup s =
1303+ nullaryCleanup s@Schema{_schemaParamSchema=ps} =
1467− if _schemaItems s == Just (OpenApiItemsArray [])
1304+ if _paramSchemaItems ps == Just (SwaggerItemsArray [])
1468 then s { _schemaExample = Nothing
1305 then s { _schemaExample = Nothing
1469− , _schemaMaxItems = Nothing
1306+ , _schemaParamSchema = ps { _paramSchemaMaxItems = Nothing } }
1473instance FromJSON Header where
1309instance FromJSON Header where
1474 parseJSON = sopSwaggerGenericParseJSON
1310 parseJSON = sopSwaggerGenericParseJSON
1476−instance FromJSON OpenApiItems where
1312+instance FromJSON SwaggerItems where
1477 parseJSON js@(Object obj)
1313 parseJSON js@(Object obj)
1478− | null obj = pure $ OpenApiItemsArray [] -- Nullary schema.
1314+ | null obj = pure $ SwaggerItemsArray [] -- Nullary schema.
1479− | otherwise = OpenApiItemsObject <$> parseJSON js
1315+ | otherwise = SwaggerItemsObject <$> parseJSON js
1480− parseJSON js@(Array _) = OpenApiItemsArray <$> parseJSON js
1316+ parseJSON js@(Array _) = SwaggerItemsArray <$> parseJSON js
1481 parseJSON _ = empty
1317 parseJSON _ = empty
1483instance FromJSON Components where
1319instance FromJSON Components where
1484 parseJSON = sopSwaggerGenericParseJSON
1320 parseJSON = sopSwaggerGenericParseJSON
1486instance FromJSON MimeList where
1322instance FromJSON MimeList where
1487− parseJSON js = MimeList . map fromString <$> parseJSON js
1323+ parseJSON js = (MimeList . map fromString) <$> parseJSON js
1489instance FromJSON Param where
1325instance FromJSON Param where
1490 parseJSON = sopSwaggerGenericParseJSON
1326 parseJSON = sopSwaggerGenericParseJSON
@@ -1492,7 +1328,7 @@ instance FromJSON Param where
1492instance FromJSON Responses where
1328instance FromJSON Responses where
1493 parseJSON (Object o) = Responses
1329 parseJSON (Object o) = Responses
1494 <$> o .:? "default"
1330 <$> o .:? "default"
1495− <*> parseJSON (Object (deleteKey "default" o))
1331+ <*> (parseJSON (Object (HashMap.delete "default" o)))
1496 parseJSON _ = empty
1332 parseJSON _ = empty
1498instance FromJSON Example where
1334instance FromJSON Example where
@@ -1519,9 +1355,6 @@ instance FromJSON MediaTypeObject where
1519instance FromJSON Encoding where
1355instance FromJSON Encoding where
1520 parseJSON = sopSwaggerGenericParseJSON
1356 parseJSON = sopSwaggerGenericParseJSON
1522−instance FromJSON Link where
1523− parseJSON = sopSwaggerGenericParseJSON
1525instance FromJSON Reference where
1358instance FromJSON Reference where
1526 parseJSON (Object o) = Reference <$> o .: "$ref"
1359 parseJSON (Object o) = Reference <$> o .: "$ref"
1527 parseJSON _ = empty
1360 parseJSON _ = empty
@@ -1545,24 +1378,17 @@ instance FromJSON (Referenced Response) where parseJSON = referencedParseJSON "#
1545instance FromJSON (Referenced RequestBody) where parseJSON = referencedParseJSON "#/components/requestBodies/"
1378instance FromJSON (Referenced RequestBody) where parseJSON = referencedParseJSON "#/components/requestBodies/"
1546instance FromJSON (Referenced Example) where parseJSON = referencedParseJSON "#/components/examples/"
1379instance FromJSON (Referenced Example) where parseJSON = referencedParseJSON "#/components/examples/"
1547instance FromJSON (Referenced Header) where parseJSON = referencedParseJSON "#/components/headers/"
1380instance FromJSON (Referenced Header) where parseJSON = referencedParseJSON "#/components/headers/"
1548−instance FromJSON (Referenced Link) where parseJSON = referencedParseJSON "#/components/links/"
1549−instance FromJSON (Referenced Callback) where parseJSON = referencedParseJSON "#/components/callbacks/"
1551instance FromJSON Xml where
1382instance FromJSON Xml where
1552 parseJSON = genericParseJSON (jsonPrefix "xml")
1383 parseJSON = genericParseJSON (jsonPrefix "xml")
1385+instance FromJSON ParamSchema where
1386+ parseJSON = sopSwaggerGenericParseJSON
1554instance FromJSON AdditionalProperties where
1388instance FromJSON AdditionalProperties where
1555 parseJSON (Bool b) = pure $ AdditionalPropertiesAllowed b
1389 parseJSON (Bool b) = pure $ AdditionalPropertiesAllowed b
1556 parseJSON js = AdditionalPropertiesSchema <$> parseJSON js
1390 parseJSON js = AdditionalPropertiesSchema <$> parseJSON js
1558−-- | All strings are parsed as expressions
1559−instance FromJSON ExpressionOrValue where
1560− parseJSON (String expr) = pure $ Expression expr
1561− parseJSON v = pure $ Value v
1563−instance FromJSON Callback where
1564− parseJSON = fmap Callback . parseJSON
1566instance HasSwaggerAesonOptions Server where
1392instance HasSwaggerAesonOptions Server where
1567 swaggerAesonOptions _ = mkSwaggerAesonOptions "server"
1393 swaggerAesonOptions _ = mkSwaggerAesonOptions "server"
1568instance HasSwaggerAesonOptions Components where
1394instance HasSwaggerAesonOptions Components where
@@ -1591,18 +1417,19 @@ instance HasSwaggerAesonOptions SecurityScheme where
1591 swaggerAesonOptions _ = mkSwaggerAesonOptions "securityScheme" & saoSubObject ?~ "type"
1417 swaggerAesonOptions _ = mkSwaggerAesonOptions "securityScheme" & saoSubObject ?~ "type"
1592instance HasSwaggerAesonOptions Schema where
1418instance HasSwaggerAesonOptions Schema where
1593 swaggerAesonOptions _ = mkSwaggerAesonOptions "schema" & saoSubObject ?~ "paramSchema"
1419 swaggerAesonOptions _ = mkSwaggerAesonOptions "schema" & saoSubObject ?~ "paramSchema"
1594−instance HasSwaggerAesonOptions OpenApi where
1420+instance HasSwaggerAesonOptions Swagger where
1595 swaggerAesonOptions _ = mkSwaggerAesonOptions "swagger" & saoAdditionalPairs .~ [("openapi", "3.0.0")]
1421 swaggerAesonOptions _ = mkSwaggerAesonOptions "swagger" & saoAdditionalPairs .~ [("openapi", "3.0.0")]
1596instance HasSwaggerAesonOptions Example where
1422instance HasSwaggerAesonOptions Example where
1597 swaggerAesonOptions _ = mkSwaggerAesonOptions "example"
1423 swaggerAesonOptions _ = mkSwaggerAesonOptions "example"
1598instance HasSwaggerAesonOptions Encoding where
1424instance HasSwaggerAesonOptions Encoding where
1599 swaggerAesonOptions _ = mkSwaggerAesonOptions "encoding"
1425 swaggerAesonOptions _ = mkSwaggerAesonOptions "encoding"
1601−instance HasSwaggerAesonOptions Link where
1427+instance HasSwaggerAesonOptions ParamSchema where
1602− swaggerAesonOptions _ = mkSwaggerAesonOptions "link"
1428+ swaggerAesonOptions _ = mkSwaggerAesonOptions "paramSchema"
1604instance AesonDefaultValue Server
1430instance AesonDefaultValue Server
1605instance AesonDefaultValue Components
1431instance AesonDefaultValue Components
1432+instance AesonDefaultValue ParamSchema
1606instance AesonDefaultValue OAuth2ImplicitFlow
1433instance AesonDefaultValue OAuth2ImplicitFlow
1607instance AesonDefaultValue OAuth2PasswordFlow
1434instance AesonDefaultValue OAuth2PasswordFlow
1608instance AesonDefaultValue OAuth2ClientCredentialsFlow
1435instance AesonDefaultValue OAuth2ClientCredentialsFlow
@@ -1610,10 +1437,7 @@ instance AesonDefaultValue OAuth2AuthorizationCodeFlow
1610instance AesonDefaultValue p => AesonDefaultValue (OAuth2Flow p)
1437instance AesonDefaultValue p => AesonDefaultValue (OAuth2Flow p)
1611instance AesonDefaultValue Responses
1438instance AesonDefaultValue Responses
1612instance AesonDefaultValue SecuritySchemeType
1439instance AesonDefaultValue SecuritySchemeType
1613−instance AesonDefaultValue OpenApiType
1440+instance AesonDefaultValue SwaggerType
1614instance AesonDefaultValue MimeList where defaultValue = Just mempty
1441instance AesonDefaultValue MimeList where defaultValue = Just mempty
1615instance AesonDefaultValue Info
1442instance AesonDefaultValue Info
1616instance AesonDefaultValue ParamLocation
1443instance AesonDefaultValue ParamLocation
1617−instance AesonDefaultValue Link
1618−instance AesonDefaultValue SecurityDefinitions where
1619− defaultValue = Just mempty