Skip to content

Commit b48cc5f

Browse files
KtorZphadej
authored andcommitted
Add support for ReDoc alternative UI
1 parent 127dea6 commit b48cc5f

File tree

4 files changed

+49
-1
lines changed

4 files changed

+49
-1
lines changed

example/Main.hs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ data Variant
165165
data UIFlavour
166166
= Original
167167
| JensOleG
168+
| ReDoc
168169
deriving (Eq)
169170

170171
server' :: UIFlavour -> Server API'
@@ -187,6 +188,7 @@ server' uiFlavour = server Normal
187188
schemaUiServer = case uiFlavour of
188189
Original -> swaggerSchemaUIServer
189190
JensOleG -> jensolegSwaggerSchemaUIServer
191+
ReDoc -> redocSchemaUIServer
190192

191193
swaggerDoc' Normal = swaggerDoc
192194
swaggerDoc' Nested = swaggerDoc
@@ -212,7 +214,9 @@ app = serve api . server'
212214
main :: IO ()
213215
main = do
214216
args <- getArgs
215-
let uiFlavour = if "jensoleg" `elem` args then JensOleG else Original
217+
let uiFlavour | "jensoleg" `elem` args = JensOleG
218+
| "redoc" `elem` args = ReDoc
219+
| otherwise = Original
216220
case args of
217221
("run":_) -> do
218222
p <- fromMaybe 8000 . (>>= readMaybe) <$> lookupEnv "PORT"

redoc-dist/redoc.min.js

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

redoc.index.html.tmpl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<title>ReDoc</title>
5+
<meta charset="utf-8"/>
6+
<meta name="viewport" content="width=device-width, initial-scale=1">
7+
<style>
8+
body { margin: 0; padding: 0; }
9+
</style>
10+
</head>
11+
<body>
12+
<redoc spec-url='/SERVANT_SWAGGER_UI_SCHEMA'></redoc>
13+
<script src="redoc.min.js"> </script>
14+
</body>
15+
</html>

src/Servant/Swagger/UI.hs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ module Servant.Swagger.UI (
4747
SwaggerSchemaUI',
4848
swaggerSchemaUIServer,
4949
jensolegSwaggerSchemaUIServer,
50+
redocSchemaUIServer,
51+
5052
-- * Internals
5153
--
5254
-- /Note:/ in next major version, these will be moved to separate module.
@@ -60,6 +62,11 @@ module Servant.Swagger.UI (
6062
-- Current version: @79f3bba07b070cfab1d8c245c4f9229052e20a1a@
6163
jensolegIndexTemplate,
6264
jensolegFiles,
65+
-- ** ReDoc theme
66+
--
67+
-- Current Version: v1.21.2 https://rebilly.github.io/ReDoc/releases/v1.21.2/redoc.min.js
68+
redocIndexTemplate,
69+
redocFiles
6370
) where
6471

6572
import Data.ByteString (ByteString)
@@ -158,6 +165,15 @@ jensolegSwaggerSchemaUIServer
158165
jensolegSwaggerSchemaUIServer =
159166
swaggerSchemaUIServerImpl jensolegIndexTemplate jensolegFiles
160167

168+
-- | Serve alternative Swagger UI.
169+
--
170+
-- See <https://github.com/Rebilly/ReDoc/tree/v1.x>
171+
redocSchemaUIServer
172+
:: (Server api ~ Handler Swagger)
173+
=> Swagger -> Server (SwaggerSchemaUI' dir api)
174+
redocSchemaUIServer =
175+
swaggerSchemaUIServerImpl redocIndexTemplate redocFiles
176+
161177
swaggerSchemaUIServerImpl
162178
:: (Server api ~ Handler Swagger)
163179
=> T.Text -> [(FilePath, ByteString)]
@@ -184,3 +200,9 @@ jensolegIndexTemplate = $(embedStringFile "jensoleg.index.html.tmpl")
184200

185201
jensolegFiles :: [(FilePath, ByteString)]
186202
jensolegFiles = $(mkRecursiveEmbedded "jensoleg-dist")
203+
204+
redocIndexTemplate :: T.Text
205+
redocIndexTemplate = $(embedStringFile "redoc.index.html.tmpl")
206+
207+
redocFiles :: [(FilePath, ByteString)]
208+
redocFiles = $(mkRecursiveEmbedded "redoc-dist")

0 commit comments

Comments
 (0)