servant-swagger 1.1.4 → 1.1.5
raw patch · 3 files changed
+63/−25 lines, 3 filesdep +singleton-booldep ~aesondep ~basedep ~doctestPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: singleton-bool
Dependency ranges changed: aeson, base, doctest, lens, servant, swagger2
API changes (from Hackage documentation)
- Servant.Swagger.Internal: instance forall k (desc :: GHC.Types.Symbol) (api :: k). (GHC.TypeLits.KnownSymbol desc, Servant.Swagger.Internal.HasSwagger api) => Servant.Swagger.Internal.HasSwagger (Servant.API.Description.Description desc Servant.API.Sub.:> api)
- Servant.Swagger.Internal: instance forall k (desc :: GHC.Types.Symbol) (api :: k). (GHC.TypeLits.KnownSymbol desc, Servant.Swagger.Internal.HasSwagger api) => Servant.Swagger.Internal.HasSwagger (Servant.API.Description.Summary desc Servant.API.Sub.:> api)
- Servant.Swagger.Internal: instance forall k (sub :: k). Servant.Swagger.Internal.HasSwagger sub => Servant.Swagger.Internal.HasSwagger (Data.Vault.Lazy.Vault Servant.API.Sub.:> sub)
- Servant.Swagger.Internal: instance forall k (sub :: k). Servant.Swagger.Internal.HasSwagger sub => Servant.Swagger.Internal.HasSwagger (Network.HTTP.Types.Version.HttpVersion Servant.API.Sub.:> sub)
- Servant.Swagger.Internal: instance forall k (sub :: k). Servant.Swagger.Internal.HasSwagger sub => Servant.Swagger.Internal.HasSwagger (Servant.API.IsSecure.IsSecure Servant.API.Sub.:> sub)
- Servant.Swagger.Internal: instance forall k (sub :: k). Servant.Swagger.Internal.HasSwagger sub => Servant.Swagger.Internal.HasSwagger (Servant.API.RemoteHost.RemoteHost Servant.API.Sub.:> sub)
- Servant.Swagger.Internal: instance forall k (sym :: GHC.Types.Symbol) (sub :: k). (GHC.TypeLits.KnownSymbol sym, Servant.Swagger.Internal.HasSwagger sub) => Servant.Swagger.Internal.HasSwagger (Servant.API.QueryParam.QueryFlag sym Servant.API.Sub.:> sub)
- Servant.Swagger.Internal: instance forall k (sym :: GHC.Types.Symbol) (sub :: k). (GHC.TypeLits.KnownSymbol sym, Servant.Swagger.Internal.HasSwagger sub) => Servant.Swagger.Internal.HasSwagger (sym Servant.API.Sub.:> sub)
- Servant.Swagger.Internal: instance forall k (sym :: GHC.Types.Symbol) a (sub :: k). (GHC.TypeLits.KnownSymbol sym, Data.Swagger.Internal.ParamSchema.ToParamSchema a, Servant.Swagger.Internal.HasSwagger sub) => Servant.Swagger.Internal.HasSwagger (Servant.API.Capture.Capture sym a Servant.API.Sub.:> sub)
- Servant.Swagger.Internal: instance forall k (sym :: GHC.Types.Symbol) a (sub :: k). (GHC.TypeLits.KnownSymbol sym, Data.Swagger.Internal.ParamSchema.ToParamSchema a, Servant.Swagger.Internal.HasSwagger sub) => Servant.Swagger.Internal.HasSwagger (Servant.API.Capture.CaptureAll sym a Servant.API.Sub.:> sub)
- Servant.Swagger.Internal: instance forall k (sym :: GHC.Types.Symbol) a (sub :: k). (GHC.TypeLits.KnownSymbol sym, Data.Swagger.Internal.ParamSchema.ToParamSchema a, Servant.Swagger.Internal.HasSwagger sub) => Servant.Swagger.Internal.HasSwagger (Servant.API.Header.Header sym a Servant.API.Sub.:> sub)
- Servant.Swagger.Internal: instance forall k (sym :: GHC.Types.Symbol) a (sub :: k). (GHC.TypeLits.KnownSymbol sym, Data.Swagger.Internal.ParamSchema.ToParamSchema a, Servant.Swagger.Internal.HasSwagger sub) => Servant.Swagger.Internal.HasSwagger (Servant.API.QueryParam.QueryParam sym a Servant.API.Sub.:> sub)
- Servant.Swagger.Internal: instance forall k (sym :: GHC.Types.Symbol) a (sub :: k). (GHC.TypeLits.KnownSymbol sym, Data.Swagger.Internal.ParamSchema.ToParamSchema a, Servant.Swagger.Internal.HasSwagger sub) => Servant.Swagger.Internal.HasSwagger (Servant.API.QueryParam.QueryParams sym a Servant.API.Sub.:> sub)
- Servant.Swagger.Internal: instance forall k a (cs :: [GHC.Types.*]) (sub :: k). (Data.Swagger.Internal.Schema.ToSchema a, Servant.Swagger.Internal.AllAccept cs, Servant.Swagger.Internal.HasSwagger sub) => Servant.Swagger.Internal.HasSwagger (Servant.API.ReqBody.ReqBody cs a Servant.API.Sub.:> sub)
- Servant.Swagger.Internal: instance forall k1 (cs :: [GHC.Types.*]) (hs :: [*]) (status :: GHC.Types.Nat) (method :: k1). (Servant.Swagger.Internal.AllAccept cs, Servant.Swagger.Internal.AllToResponseHeader hs, GHC.TypeLits.KnownNat status, Servant.Swagger.Internal.SwaggerMethod method) => Servant.Swagger.Internal.HasSwagger (Servant.API.Verbs.Verb method status cs (Servant.API.ResponseHeaders.Headers hs Servant.API.ContentTypes.NoContent))
- Servant.Swagger.Internal: instance forall k1 (cs :: [GHC.Types.*]) (status :: GHC.Types.Nat) (method :: k1). (Servant.Swagger.Internal.AllAccept cs, GHC.TypeLits.KnownNat status, Servant.Swagger.Internal.SwaggerMethod method) => Servant.Swagger.Internal.HasSwagger (Servant.API.Verbs.Verb method status cs Servant.API.ContentTypes.NoContent)
- Servant.Swagger.Internal: instance forall k1 a (cs :: [GHC.Types.*]) (hs :: [*]) (status :: GHC.Types.Nat) (method :: k1). (Data.Swagger.Internal.Schema.ToSchema a, Servant.Swagger.Internal.AllAccept cs, Servant.Swagger.Internal.AllToResponseHeader hs, GHC.TypeLits.KnownNat status, Servant.Swagger.Internal.SwaggerMethod method) => Servant.Swagger.Internal.HasSwagger (Servant.API.Verbs.Verb method status cs (Servant.API.ResponseHeaders.Headers hs a))
- Servant.Swagger.Internal: instance forall k1 a (cs :: [GHC.Types.*]) (status :: GHC.Types.Nat) (method :: k1). (Data.Swagger.Internal.Schema.ToSchema a, Servant.Swagger.Internal.AllAccept cs, GHC.TypeLits.KnownNat status, Servant.Swagger.Internal.SwaggerMethod method) => Servant.Swagger.Internal.HasSwagger (Servant.API.Verbs.Verb method status cs a)
+ Servant.Swagger.Internal: instance (Data.Swagger.Internal.Schema.ToSchema a, Servant.Swagger.Internal.AllAccept cs, Servant.Swagger.Internal.HasSwagger sub, GHC.TypeLits.KnownSymbol (Servant.API.Description.FoldDescription mods)) => Servant.Swagger.Internal.HasSwagger (Servant.API.ReqBody.ReqBody' mods cs a Servant.API.Sub.:> sub)
+ Servant.Swagger.Internal: instance (GHC.TypeLits.KnownSymbol desc, Servant.Swagger.Internal.HasSwagger api) => Servant.Swagger.Internal.HasSwagger (Servant.API.Description.Description desc Servant.API.Sub.:> api)
+ Servant.Swagger.Internal: instance (GHC.TypeLits.KnownSymbol desc, Servant.Swagger.Internal.HasSwagger api) => Servant.Swagger.Internal.HasSwagger (Servant.API.Description.Summary desc Servant.API.Sub.:> api)
+ Servant.Swagger.Internal: instance (GHC.TypeLits.KnownSymbol sym, Data.Swagger.Internal.ParamSchema.ToParamSchema a, Servant.Swagger.Internal.HasSwagger sub) => Servant.Swagger.Internal.HasSwagger (Servant.API.Capture.CaptureAll sym a Servant.API.Sub.:> sub)
+ Servant.Swagger.Internal: instance (GHC.TypeLits.KnownSymbol sym, Data.Swagger.Internal.ParamSchema.ToParamSchema a, Servant.Swagger.Internal.HasSwagger sub) => Servant.Swagger.Internal.HasSwagger (Servant.API.QueryParam.QueryParams sym a Servant.API.Sub.:> sub)
+ Servant.Swagger.Internal: instance (GHC.TypeLits.KnownSymbol sym, Data.Swagger.Internal.ParamSchema.ToParamSchema a, Servant.Swagger.Internal.HasSwagger sub, Data.Singletons.Bool.SBoolI (Servant.API.Modifiers.FoldRequired mods), GHC.TypeLits.KnownSymbol (Servant.API.Description.FoldDescription mods)) => Servant.Swagger.Internal.HasSwagger (Servant.API.Header.Header' mods sym a Servant.API.Sub.:> sub)
+ Servant.Swagger.Internal: instance (GHC.TypeLits.KnownSymbol sym, Data.Swagger.Internal.ParamSchema.ToParamSchema a, Servant.Swagger.Internal.HasSwagger sub, Data.Singletons.Bool.SBoolI (Servant.API.Modifiers.FoldRequired mods), GHC.TypeLits.KnownSymbol (Servant.API.Description.FoldDescription mods)) => Servant.Swagger.Internal.HasSwagger (Servant.API.QueryParam.QueryParam' mods sym a Servant.API.Sub.:> sub)
+ Servant.Swagger.Internal: instance (GHC.TypeLits.KnownSymbol sym, Data.Swagger.Internal.ParamSchema.ToParamSchema a, Servant.Swagger.Internal.HasSwagger sub, GHC.TypeLits.KnownSymbol (Servant.API.Description.FoldDescription mods)) => Servant.Swagger.Internal.HasSwagger (Servant.API.Capture.Capture' mods sym a Servant.API.Sub.:> sub)
+ Servant.Swagger.Internal: instance (GHC.TypeLits.KnownSymbol sym, Servant.Swagger.Internal.HasSwagger sub) => Servant.Swagger.Internal.HasSwagger (Servant.API.QueryParam.QueryFlag sym Servant.API.Sub.:> sub)
+ Servant.Swagger.Internal: instance (GHC.TypeLits.KnownSymbol sym, Servant.Swagger.Internal.HasSwagger sub) => Servant.Swagger.Internal.HasSwagger (sym Servant.API.Sub.:> sub)
+ Servant.Swagger.Internal: instance Servant.Swagger.Internal.HasSwagger sub => Servant.Swagger.Internal.HasSwagger (Data.Vault.Lazy.Vault Servant.API.Sub.:> sub)
+ Servant.Swagger.Internal: instance Servant.Swagger.Internal.HasSwagger sub => Servant.Swagger.Internal.HasSwagger (Network.HTTP.Types.Version.HttpVersion Servant.API.Sub.:> sub)
+ Servant.Swagger.Internal: instance Servant.Swagger.Internal.HasSwagger sub => Servant.Swagger.Internal.HasSwagger (Servant.API.IsSecure.IsSecure Servant.API.Sub.:> sub)
+ Servant.Swagger.Internal: instance Servant.Swagger.Internal.HasSwagger sub => Servant.Swagger.Internal.HasSwagger (Servant.API.RemoteHost.RemoteHost Servant.API.Sub.:> sub)
+ Servant.Swagger.Internal: instance forall k1 (cs :: [*]) (hs :: [*]) (status :: GHC.Types.Nat) (method :: k1). (Servant.Swagger.Internal.AllAccept cs, Servant.Swagger.Internal.AllToResponseHeader hs, GHC.TypeNats.KnownNat status, Servant.Swagger.Internal.SwaggerMethod method) => Servant.Swagger.Internal.HasSwagger (Servant.API.Verbs.Verb method status cs (Servant.API.ResponseHeaders.Headers hs Servant.API.ContentTypes.NoContent))
+ Servant.Swagger.Internal: instance forall k1 (cs :: [*]) (status :: GHC.Types.Nat) (method :: k1). (Servant.Swagger.Internal.AllAccept cs, GHC.TypeNats.KnownNat status, Servant.Swagger.Internal.SwaggerMethod method) => Servant.Swagger.Internal.HasSwagger (Servant.API.Verbs.Verb method status cs Servant.API.ContentTypes.NoContent)
+ Servant.Swagger.Internal: instance forall k1 a (cs :: [*]) (hs :: [*]) (status :: GHC.Types.Nat) (method :: k1). (Data.Swagger.Internal.Schema.ToSchema a, Servant.Swagger.Internal.AllAccept cs, Servant.Swagger.Internal.AllToResponseHeader hs, GHC.TypeNats.KnownNat status, Servant.Swagger.Internal.SwaggerMethod method) => Servant.Swagger.Internal.HasSwagger (Servant.API.Verbs.Verb method status cs (Servant.API.ResponseHeaders.Headers hs a))
+ Servant.Swagger.Internal: instance forall k1 a (cs :: [*]) (status :: GHC.Types.Nat) (method :: k1). (Data.Swagger.Internal.Schema.ToSchema a, Servant.Swagger.Internal.AllAccept cs, GHC.TypeNats.KnownNat status, Servant.Swagger.Internal.SwaggerMethod method) => Servant.Swagger.Internal.HasSwagger (Servant.API.Verbs.Verb method status cs a)
- Servant.Swagger: validateEveryToJSON :: forall proxy api. TMap (Every '[Typeable, Show, Arbitrary, ToJSON, ToSchema]) (BodyTypes JSON api) => proxy api -> Spec
+ Servant.Swagger: validateEveryToJSON :: forall proxy api. TMap (Every [Typeable, Show, Arbitrary, ToJSON, ToSchema]) (BodyTypes JSON api) => proxy api -> Spec
- Servant.Swagger: validateEveryToJSONWithPatternChecker :: forall proxy api. TMap (Every '[Typeable, Show, Arbitrary, ToJSON, ToSchema]) (BodyTypes JSON api) => (Pattern -> Text -> Bool) -> proxy api -> Spec
+ Servant.Swagger: validateEveryToJSONWithPatternChecker :: forall proxy api. TMap (Every [Typeable, Show, Arbitrary, ToJSON, ToSchema]) (BodyTypes JSON api) => (Pattern -> Text -> Bool) -> proxy api -> Spec
- Servant.Swagger.Internal.Test: validateEveryToJSON :: forall proxy api. TMap (Every '[Typeable, Show, Arbitrary, ToJSON, ToSchema]) (BodyTypes JSON api) => proxy api -> Spec
+ Servant.Swagger.Internal.Test: validateEveryToJSON :: forall proxy api. TMap (Every [Typeable, Show, Arbitrary, ToJSON, ToSchema]) (BodyTypes JSON api) => proxy api -> Spec
- Servant.Swagger.Internal.Test: validateEveryToJSONWithPatternChecker :: forall proxy api. TMap (Every '[Typeable, Show, Arbitrary, ToJSON, ToSchema]) (BodyTypes JSON api) => (Pattern -> Text -> Bool) -> proxy api -> Spec
+ Servant.Swagger.Internal.Test: validateEveryToJSONWithPatternChecker :: forall proxy api. TMap (Every [Typeable, Show, Arbitrary, ToJSON, ToSchema]) (BodyTypes JSON api) => (Pattern -> Text -> Bool) -> proxy api -> Spec
- Servant.Swagger.Test: validateEveryToJSON :: forall proxy api. TMap (Every '[Typeable, Show, Arbitrary, ToJSON, ToSchema]) (BodyTypes JSON api) => proxy api -> Spec
+ Servant.Swagger.Test: validateEveryToJSON :: forall proxy api. TMap (Every [Typeable, Show, Arbitrary, ToJSON, ToSchema]) (BodyTypes JSON api) => proxy api -> Spec
- Servant.Swagger.Test: validateEveryToJSONWithPatternChecker :: forall proxy api. TMap (Every '[Typeable, Show, Arbitrary, ToJSON, ToSchema]) (BodyTypes JSON api) => (Pattern -> Text -> Bool) -> proxy api -> Spec
+ Servant.Swagger.Test: validateEveryToJSONWithPatternChecker :: forall proxy api. TMap (Every [Typeable, Show, Arbitrary, ToJSON, ToSchema]) (BodyTypes JSON api) => (Pattern -> Text -> Bool) -> proxy api -> Spec
Files
- CHANGELOG.md +7/−0
- servant-swagger.cabal +24/−7
- src/Servant/Swagger/Internal.hs +32/−18
CHANGELOG.md view
@@ -1,3 +1,10 @@+1.1.5+-----++* Notes:+ * `servant-0.13` compatible release+ * Drops compatibility with previous `servant` versions.+ 1.1.4 -----
servant-swagger.cabal view
@@ -1,22 +1,37 @@ name: servant-swagger-version: 1.1.4+version: 1.1.5 synopsis: Generate Swagger specification for your servant API.-description: Please see README.md+description:+ Swagger™ is a project used to describe and document RESTful APIs.+ Unlike Servant it is language-agnostic and thus is quite popular among developers+ in different languages. It also exists for a longer time and has more tools to work with.+ .+ This package provides means to generate Swagger specification for a Servant API+ and also to partially test whether API conforms with its specification.+ .+ Generated Swagger specification then can be used for many things such as+ .+ * displaying interactive documentation using [Swagger UI](http://swagger.io/swagger-ui/);+ .+ * generating clients and servers in many languages using [Swagger Codegen](http://swagger.io/swagger-codegen/);+ .+ * and [many others](http://swagger.io/open-source-integrations/). homepage: https://github.com/haskell-servant/servant-swagger bug-reports: https://github.com/haskell-servant/servant-swagger/issues license: BSD3 license-file: LICENSE author: David Johnson, Nickolay Kudasov maintainer: nickolay.kudasov@gmail.com-copyright: (c) 2015-2016, Servant contributors+copyright: (c) 2015-2018, Servant contributors category: Web, Servant, Swagger build-type: Custom-cabal-version: >=1.18+cabal-version: 1.18 tested-with: GHC==7.8.4, GHC==7.10.3, GHC==8.0.2,- GHC==8.2.1+ GHC==8.2.2+ extra-source-files: README.md , CHANGELOG.md@@ -60,8 +75,9 @@ , bytestring >=0.10.4.0 && <0.11 , http-media >=0.6.3 && <0.8 , insert-ordered-containers >=0.1.0.0 && <0.3- , lens >=4.7.0.1 && <4.16- , servant >=0.5 && <0.13+ , lens >=4.7.0.1 && <4.17+ , servant >=0.13 && <0.14+ , singleton-bool >=0.1.3 && <0.2 , swagger2 >=2.1 && <2.3 , text >=1.2.0.6 && <1.3 , unordered-containers >=0.2.5.1 && <0.3@@ -89,6 +105,7 @@ type: exitcode-stdio-1.0 hs-source-dirs: test main-is: Spec.hs+ build-tool-depends: hspec-discover:hspec-discover build-depends: base , aeson , aeson-qq >=0.8.1
src/Servant/Swagger/Internal.hs view
@@ -30,6 +30,9 @@ import GHC.TypeLits import Network.HTTP.Media (MediaType) import Servant.API+import Servant.API.Description (FoldDescription, reflectDescription)+import Servant.API.Modifiers (FoldRequired)+import Data.Singletons.Bool import Servant.Swagger.Internal.TypeLevel.API @@ -71,10 +74,8 @@ instance HasSwagger Raw where toSwagger _ = mempty & paths . at "/" ?~ mempty -#if MIN_VERSION_servant(0,11,0) instance HasSwagger EmptyAPI where toSwagger _ = mempty-#endif -- | All operations of sub API. -- This is similar to @'operationsOf'@ but ensures that operations@@ -214,7 +215,7 @@ where piece = symbolVal (Proxy :: Proxy sym) -instance (KnownSymbol sym, ToParamSchema a, HasSwagger sub) => HasSwagger (Capture sym a :> sub) where+instance (KnownSymbol sym, ToParamSchema a, HasSwagger sub, KnownSymbol (FoldDescription mods)) => HasSwagger (Capture' mods sym a :> sub) where toSwagger _ = toSwagger (Proxy :: Proxy sub) & addParam param & prependPath capture@@ -222,21 +223,21 @@ where pname = symbolVal (Proxy :: Proxy sym) tname = Text.pack pname+ transDesc "" = Nothing+ transDesc desc = Just (Text.pack desc) capture = "{" <> pname <> "}" param = mempty & name .~ tname+ & description .~ transDesc (reflectDescription (Proxy :: Proxy mods)) & required ?~ True & schema .~ ParamOther (mempty & in_ .~ ParamPath & paramSchema .~ toParamSchema (Proxy :: Proxy a)) -#if MIN_VERSION_servant(0,8,1) -- | Swagger Spec doesn't have a notion of CaptureAll, this instance is the best effort. instance (KnownSymbol sym, ToParamSchema a, HasSwagger sub) => HasSwagger (CaptureAll sym a :> sub) where toSwagger _ = toSwagger (Proxy :: Proxy (Capture sym a :> sub))-#endif -#if MIN_VERSION_servant(0,12,0) instance (KnownSymbol desc, HasSwagger api) => HasSwagger (Description desc :> api) where toSwagger _ = toSwagger (Proxy :: Proxy api) & allOperations.description %~ (Just (Text.pack (symbolVal (Proxy :: Proxy desc))) <>)@@ -244,19 +245,23 @@ instance (KnownSymbol desc, HasSwagger api) => HasSwagger (Summary desc :> api) where toSwagger _ = toSwagger (Proxy :: Proxy api) & allOperations.summary %~ (Just (Text.pack (symbolVal (Proxy :: Proxy desc))) <>)-#endif -instance (KnownSymbol sym, ToParamSchema a, HasSwagger sub) => HasSwagger (QueryParam sym a :> sub) where+instance (KnownSymbol sym, ToParamSchema a, HasSwagger sub, SBoolI (FoldRequired mods), KnownSymbol (FoldDescription mods)) => HasSwagger (QueryParam' mods sym a :> sub) where toSwagger _ = toSwagger (Proxy :: Proxy sub) & addParam param & addDefaultResponse400 tname where tname = Text.pack (symbolVal (Proxy :: Proxy sym))+ transDesc "" = Nothing+ transDesc desc = Just (Text.pack desc) param = mempty & name .~ tname- & schema .~ ParamOther (mempty- & in_ .~ ParamQuery- & paramSchema .~ toParamSchema (Proxy :: Proxy a))+ & description .~ transDesc (reflectDescription (Proxy :: Proxy mods))+ & required ?~ reflectBool (Proxy :: Proxy (FoldRequired mods))+ & schema .~ ParamOther sch+ sch = mempty+ & in_ .~ ParamQuery+ & paramSchema .~ toParamSchema (Proxy :: Proxy a) instance (KnownSymbol sym, ToParamSchema a, HasSwagger sub) => HasSwagger (QueryParams sym a :> sub) where toSwagger _ = toSwagger (Proxy :: Proxy sub)@@ -266,11 +271,13 @@ tname = Text.pack (symbolVal (Proxy :: Proxy sym)) param = mempty & name .~ tname- & schema .~ ParamOther (mempty- & in_ .~ ParamQuery- & paramSchema .~ (mempty- & type_ .~ SwaggerArray- & items ?~ SwaggerItemsPrimitive (Just CollectionMulti) (toParamSchema (Proxy :: Proxy a))))+ & schema .~ ParamOther sch+ sch = mempty+ & in_ .~ ParamQuery+ & paramSchema .~ pschema+ pschema = mempty+ & type_ .~ SwaggerArray+ & items ?~ SwaggerItemsPrimitive (Just CollectionMulti) (toParamSchema (Proxy :: Proxy a)) instance (KnownSymbol sym, HasSwagger sub) => HasSwagger (QueryFlag sym :> sub) where toSwagger _ = toSwagger (Proxy :: Proxy sub)@@ -286,19 +293,23 @@ & paramSchema .~ (toParamSchema (Proxy :: Proxy Bool) & default_ ?~ toJSON False)) -instance (KnownSymbol sym, ToParamSchema a, HasSwagger sub) => HasSwagger (Header sym a :> sub) where+instance (KnownSymbol sym, ToParamSchema a, HasSwagger sub, SBoolI (FoldRequired mods), KnownSymbol (FoldDescription mods)) => HasSwagger (Header' mods sym a :> sub) where toSwagger _ = toSwagger (Proxy :: Proxy sub) & addParam param & addDefaultResponse400 tname where tname = Text.pack (symbolVal (Proxy :: Proxy sym))+ transDesc "" = Nothing+ transDesc desc = Just (Text.pack desc) param = mempty & name .~ tname+ & description .~ transDesc (reflectDescription (Proxy :: Proxy mods))+ & required ?~ reflectBool (Proxy :: Proxy (FoldRequired mods)) & schema .~ ParamOther (mempty & in_ .~ ParamHeader & paramSchema .~ toParamSchema (Proxy :: Proxy a)) -instance (ToSchema a, AllAccept cs, HasSwagger sub) => HasSwagger (ReqBody cs a :> sub) where+instance (ToSchema a, AllAccept cs, HasSwagger sub, KnownSymbol (FoldDescription mods)) => HasSwagger (ReqBody' mods cs a :> sub) where toSwagger _ = toSwagger (Proxy :: Proxy sub) & addParam param & addConsumes (allContentType (Proxy :: Proxy cs))@@ -306,9 +317,12 @@ & definitions %~ (<> defs) where tname = "body"+ transDesc "" = Nothing+ transDesc desc = Just (Text.pack desc) (defs, ref) = runDeclare (declareSchemaRef (Proxy :: Proxy a)) mempty param = mempty & name .~ tname+ & description .~ transDesc (reflectDescription (Proxy :: Proxy mods)) & required ?~ True & schema .~ ParamBody ref