webgear-swagger-ui 1.1.1 → 1.2.0
raw patch · 4 files changed
+23/−49 lines, 4 filesdep +wai-app-staticdep −mime-typesdep ~basedep ~webgear-corePVP ok
version bump matches the API change (PVP)
Dependencies added: wai-app-static
Dependencies removed: mime-types
Dependency ranges changed: base, webgear-core
API changes (from Hackage documentation)
- WebGear.Swagger.UI: swaggerUI :: (StdHandler h m, Sets h [RequiredResponseHeader "Content-Type" Text, RequiredResponseHeader "Content-Type" MimeType, Body HTML ByteString, Body JSON apiSpec, UnknownContentBody] Response) => apiSpec -> RequestHandler h ts
+ WebGear.Swagger.UI: swaggerUI :: (StdHandler h m, Sets h [RequiredResponseHeader "Content-Type" Text, Body HTML ByteString, Body JSON apiSpec, UnknownContentBody] Response) => apiSpec -> RequestHandler h ts
Files
- CHANGELOG.md +7/−1
- src/WebGear/Swagger/UI.hs +9/−44
- src/WebGear/Swagger/UI/Embedded.hs +3/−0
- webgear-swagger-ui.cabal +4/−4
CHANGELOG.md view
@@ -2,6 +2,11 @@ ## [Unreleased] +## [1.2.0] - 2024-03-18++### Changed+- Support for embedding WAI applications in handlers (#36)+ ## [1.1.1] - 2024-01-01 ### Changed@@ -12,6 +17,7 @@ ### Added - First version of webgear-swagger-ui -[Unreleased]: https://github.com/haskell-webgear/webgear/compare/v1.1.1...HEAD+[Unreleased]: https://github.com/haskell-webgear/webgear/compare/v1.2.0...HEAD+[1.2.0]: https://github.com/haskell-webgear/webgear/releases/tag/v1.2.0 [1.1.1]: https://github.com/haskell-webgear/webgear/releases/tag/v1.1.1 [1.1.0]: https://github.com/haskell-webgear/webgear/releases/tag/v1.1.0
src/WebGear/Swagger/UI.hs view
@@ -5,36 +5,27 @@ swaggerUI, ) where -import Control.Arrow (returnA, (<+>))+import Control.Arrow ((<+>)) import Data.ByteString (ByteString)-import Data.ByteString.Builder (byteString)-import Data.Text (Text, unpack)+import Data.Text (Text) import qualified Network.HTTP.Types as HTTP-import qualified Network.Mime as Mime+import Network.Wai.Application.Static (embeddedSettings) import WebGear.Core ( Body, HTML (..),- Handler (consumeRoute), JSON (..),- PlainText (..), RequestHandler, RequiredResponseHeader, Response (..),- ResponseBody (ResponseBodyBuilder),- RoutePath (..), Sets, StdHandler, UnknownContentBody, match, method,- ok200, pathEnd, respondA, route,- setBodyWithoutContentType,- setHeader,- unwitnessA,- (>->),+ serveStatic, ) import qualified WebGear.Swagger.UI.Embedded as Embedded @@ -50,7 +41,6 @@ , Sets h [ RequiredResponseHeader "Content-Type" Text- , RequiredResponseHeader "Content-Type" Mime.MimeType , Body HTML ByteString , Body JSON apiSpec , UnknownContentBody@@ -96,35 +86,10 @@ apiSpec -> RequestHandler h ts swaggerJson apiSpec =- [route| HTTP.GET /swagger.json |]- $ proc _request -> respondA HTTP.ok200 JSON -< apiSpec+ [route| HTTP.GET /swagger.json |] $+ proc _request -> respondA HTTP.ok200 JSON -< apiSpec -uiAssets ::- ( StdHandler h m- , Sets- h- [ RequiredResponseHeader "Content-Type" Text- , RequiredResponseHeader "Content-Type" Mime.MimeType- , UnknownContentBody- ]- Response- ) =>- RequestHandler h ts+uiAssets :: (StdHandler h m) => RequestHandler h ts uiAssets =- [match| HTTP.GET / |]- $ proc _request -> do- RoutePath path <- consumeRoute returnA -< ()- case path of- [filename] ->- case lookup (unpack filename) Embedded.uiAssetsDir of- Nothing -> notFound -< ()- Just content -> do- let contentType = Mime.defaultMimeLookup filename- (ok200 -< ())- >-> (\resp -> setBodyWithoutContentType -< (resp, ResponseBodyBuilder $ byteString content))- >-> (\resp -> setHeader @"Content-Type" -< (resp, contentType))- >-> (\resp -> unwitnessA -< resp)- _ -> notFound -< ()- where- notFound = proc () -> do- respondA HTTP.notFound404 PlainText -< "" :: Text+ [match| HTTP.GET / |] $+ serveStatic (embeddedSettings Embedded.uiAssetsDir)
src/WebGear/Swagger/UI/Embedded.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE TemplateHaskell #-} +-- | Embed a swagger-ui distribution in Haskell. module WebGear.Swagger.UI.Embedded ( indexHtmlFile, uiAssetsDir,@@ -8,8 +9,10 @@ import Data.ByteString (ByteString) import qualified Data.FileEmbed as FileEmbed +-- | Contents of index.html from a swagger-ui distribution indexHtmlFile :: ByteString indexHtmlFile = $(FileEmbed.embedFile "index.html") +-- | UI assets from a swagger-ui distribution indexed by their filename uiAssetsDir :: [(FilePath, ByteString)] uiAssetsDir = $(FileEmbed.embedDir "swagger-ui-5.10.5/dist")
webgear-swagger-ui.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.4 name: webgear-swagger-ui-version: 1.1.1+version: 1.2.0 synopsis: Host swagger UI based on WebGear API specifications. description: WebGear is a library to for building composable, type-safe HTTP API servers.@@ -49,13 +49,13 @@ , WebGear.Swagger.UI.Embedded hs-source-dirs: src default-language: Haskell2010- build-depends: base >=4.13.0.0 && <4.19+ build-depends: base >=4.13.0.0 && <4.20 , bytestring >=0.10.10.1 && <0.13 , file-embed ==0.0.* , http-types ==0.12.*- , mime-types ==0.1.* , text >=1.2.0.0 && <2.2- , webgear-core ^>=1.1.1+ , wai-app-static ==3.1.*+ , webgear-core ^>=1.2.0 default-extensions: Arrows DataKinds FlexibleContexts