git.iko.soy/typeable/servant-swagger-ui
on master help sign in
Support servant-0.10
commitfcf928068aaa0f9fdc8d66a9bdaec2a9ef4ab6d4 authorOleg Grenrus <oleg.grenrus@iki.fi> dateFri 27 Jan 2017, 21:57 (10 years ago) parent962520a
8 files changed+77−110
.travis.meta.yml+3 .travis.yml+30 CHANGELOG.md+3 example/Main.hs+8−2 package.yaml−70 servant-0.10-cabal.config+1 servant-swagger-ui.cabal+13−32 src/Servant/Swagger/UI.hs+19−6
.travis.meta.yml+3
@@ -2,17 +2,20 @@ language: haskell-multi-ghc
22
33env:
44 - GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=swagger2-2.1-cabal.config
5+ - GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=servant-0.10-cabal.config
56 - GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=servant-0.9-cabal.config
67 - GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=servant-0.8-cabal.config
78 - GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=servant-0.7-cabal.config
89
910 - GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=swagger2-2.1-cabal.config
11+ - GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=servant-0.10-cabal.config
1012 - GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=servant-0.9-cabal.config
1113 - GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=servant-0.8-cabal.config
1214 - GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=servant-0.7-cabal.config
1315
1416 - GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=swagger2-2.1-cabal.config
1517 - GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=swagger2-2.0-cabal.config
18+ - GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=servant-0.10-cabal.config
1619 - GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=servant-0.9-cabal.config
1720 - GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=servant-0.8-cabal.config
1821 - GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=servant-0.7-cabal.config
.travis.yml+30
@@ -54,6 +54,16 @@ matrix:
5454 - ghc-8.0.2
5555 - libgmp-dev
5656 compiler: ! ': # ghc-8.0.2 cabal-1.24 swagger2-2.1-cabal.config'
57+ - env: GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=servant-0.10-cabal.config
58+ addons:
59+ apt:
60+ sources:
61+ - hvr-ghc
62+ packages:
63+ - cabal-install-1.24
64+ - ghc-8.0.2
65+ - libgmp-dev
66+ compiler: ! ': # ghc-8.0.2 cabal-1.24 servant-0.10-cabal.config'
5767 - env: GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=servant-0.9-cabal.config
5868 addons:
5969 apt:
@@ -94,6 +104,16 @@ matrix:
94104 - ghc-8.0.1
95105 - libgmp-dev
96106 compiler: ! ': # ghc-8.0.1 cabal-1.24 swagger2-2.1-cabal.config'
107+ - env: GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=servant-0.10-cabal.config
108+ addons:
109+ apt:
110+ sources:
111+ - hvr-ghc
112+ packages:
113+ - cabal-install-1.24
114+ - ghc-8.0.1
115+ - libgmp-dev
116+ compiler: ! ': # ghc-8.0.1 cabal-1.24 servant-0.10-cabal.config'
97117 - env: GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=servant-0.9-cabal.config
98118 addons:
99119 apt:
@@ -144,6 +164,16 @@ matrix:
144164 - ghc-7.10.3
145165 - libgmp-dev
146166 compiler: ! ': # ghc-7.10.3 cabal-1.22 swagger2-2.0-cabal.config'
167+ - env: GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=servant-0.10-cabal.config
168+ addons:
169+ apt:
170+ sources:
171+ - hvr-ghc
172+ packages:
173+ - cabal-install-1.22
174+ - ghc-7.10.3
175+ - libgmp-dev
176+ compiler: ! ': # ghc-7.10.3 cabal-1.22 servant-0.10-cabal.config'
147177 - env: GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=servant-0.9-cabal.config
148178 addons:
149179 apt:
CHANGELOG.md+3
@@ -1,3 +1,6 @@
1+- 0.2.2.2.2.8
2+ - Support `servant-0.10`
3+
14- 0.2.1.2.2.8
25 - Update to `swagger-ui-2.2.8`
36 - Add support for [jensoleg](https://github.com/jensoleg/swagger-ui>) theme
example/Main.hs+8−2
@@ -32,13 +32,19 @@ import Servant.Swagger.UI
3232
3333import qualified Network.Wai.Handler.Warp as Warp
3434
35+#if MIN_VERSION_servant(0,7,0)
36+-- do nothing
37+#else
3538#if MIN_VERSION_servant(0,5,0)
3639import Control.Monad.Trans.Except (ExceptT)
40+#define Handler ExceptT ServantErr IO
3741#else
3842import Control.Monad.Trans.Either (EitherT)
39−#define ExceptT EitherT
43+#define Handler EitherT ServantErr IO
44+#endif
4045#endif
4146
47+
4248-- data types
4349data Cat = Cat { catName :: CatName, catIsMale :: Bool }
4450 deriving (Generic, Show)
@@ -106,7 +112,7 @@ server' uiFlavour = server Normal
106112 -- Unfortunately we have to specify the basePath manually atm.
107113
108114 schemaUiServer
109− :: (Server api ~ ExceptT ServantErr IO Swagger)
115+ :: (Server api ~ Handler Swagger)
110116 => Swagger -> Server (SwaggerSchemaUI' dir api)
111117 schemaUiServer = case uiFlavour of
112118 Original -> swaggerSchemaUIServer
package.yamldeleted−70
@@ -1,70 +0,0 @@
1−name: servant-swagger-ui
2−version: 0.2.1.2.2.8
3−synopsis: Servant swagger ui
4−description: Provide embedded swagger UI for servant and swagger (i.e. servant-swagger)
5−author: Oleg Grenrus <oleg.grenrus@iki.fi>
6−maintainer: Oleg Grenrus <oleg.grenrus@iki.fi>
7−license: BSD3
8−github: phadej/servant-swagger-ui
9−category: Web
10−tested-with: GHC==7.8.4, GHC==7.10.3, GHC==8.0.1
11−extra-source-files:
12−- README.md
13−- CHANGELOG.md
14−- index.html.tmpl
15−- swagger-dist-2.2.8/**/*
16−- jensoleg.index.html.tmpl
17−- jensoleg-dist/**/*
18−
19−ghc-options: -Wall
20−
21−dependencies:
22− - base >=4.7 && <4.10
23− - blaze-markup >=0.7.0.2 && <0.8
24− - bytestring >=0.10.4.0 && <0.11
25− - directory >=1.2.1.0 && <1.4
26− - file-embed >=0.0.9 && <0.1
27− - filepath >=1.3.0.2 && <1.5
28− - http-media >=0.6.2 && <0.8
29− - servant >=0.4.4.5 && <0.10
30− - servant-blaze >=0.4.4.5 && <0.9
31− - servant-server >=0.4.4.5 && <0.10
32− - servant-swagger >=1.0.3 && <1.2
33− - swagger2 >=2.0.1 && <2.2
34− - template-haskell >=2.9 && <2.12
35− - text >=1.2.0.6 && <1.3
36− - wai-app-static >=3.0.1.1 && <3.2
37−
38−flags:
39− servant-0-5:
40− description: "Whether use servant >= 0.5"
41− manual: false
42− default: true
43−
44−when:
45− - condition: flag(servant-0-5)
46− then:
47− dependencies:
48− - servant >=0.5
49− - transformers >=0.3 && <0.6
50− - transformers-compat >=0.3 && <0.6
51− else:
52− dependencies:
53− - servant <0.5
54− - either
55−
56−library:
57− source-dirs: src
58−
59−tests:
60− example:
61− main: Main.hs
62− source-dirs: example
63− dependencies:
64− - servant-swagger-ui
65− - servant-server >=0.4.4.5 && <0.10
66− - aeson >=0.8.0.2 && <1.1
67− - base-compat >=0.6.0 && <0.10
68− - lens >=4.7.0.1 && <4.16
69− - wai >=3.0.3.0 && <3.3
70− - warp >=3.0.13.1 && <3.3
servant-0.10-cabal.confignew file+1
@@ -0,0 +1 @@
1+constraints: servant ==0.10.*
servant-swagger-ui.cabal+13−32
@@ -1,9 +1,5 @@
1−-- This file has been generated from package.yaml by hpack version 0.15.0.
2−--
3−-- see: https://github.com/sol/hpack
4−
51name: servant-swagger-ui
6−version: 0.2.1.2.2.8
2+version: 0.2.2.2.2.8
73synopsis: Servant swagger ui
84description: Provide embedded swagger UI for servant and swagger (i.e. servant-swagger)
95category: Web
@@ -13,7 +9,7 @@ author: Oleg Grenrus <oleg.grenrus@iki.fi>
139maintainer: Oleg Grenrus <oleg.grenrus@iki.fi>
1410license: BSD3
1511license-file: LICENSE
16−tested-with: GHC==7.8.4, GHC==7.10.3, GHC==8.0.1
12+tested-with: GHC==7.8.4, GHC==7.10.3, GHC==8.0.2
1713build-type: Simple
1814cabal-version: >= 1.10
1915
@@ -144,9 +140,9 @@ library
144140 , file-embed >=0.0.9 && <0.1
145141 , filepath >=1.3.0.2 && <1.5
146142 , http-media >=0.6.2 && <0.8
147− , servant >=0.4.4.5 && <0.10
143+ , servant >=0.4.4.5 && <0.11
148144 , servant-blaze >=0.4.4.5 && <0.9
149− , servant-server >=0.4.4.5 && <0.10
145+ , servant-server >=0.4.4.5 && <0.11
150146 , servant-swagger >=1.0.3 && <1.2
151147 , swagger2 >=2.0.1 && <2.2
152148 , template-haskell >=2.9 && <2.12
@@ -173,35 +169,20 @@ test-suite example
173169 example
174170 ghc-options: -Wall
175171 build-depends:
176− base >=4.7 && <4.10
177− , blaze-markup >=0.7.0.2 && <0.8
178− , bytestring >=0.10.4.0 && <0.11
179− , directory >=1.2.1.0 && <1.4
180− , file-embed >=0.0.9 && <0.1
181− , filepath >=1.3.0.2 && <1.5
182− , http-media >=0.6.2 && <0.8
183− , servant >=0.4.4.5 && <0.10
184− , servant-blaze >=0.4.4.5 && <0.9
185− , servant-server >=0.4.4.5 && <0.10
186− , servant-swagger >=1.0.3 && <1.2
187− , swagger2 >=2.0.1 && <2.2
188− , template-haskell >=2.9 && <2.12
189− , text >=1.2.0.6 && <1.3
190− , wai-app-static >=3.0.1.1 && <3.2
172+ base
173+ , servant
174+ , servant-server
175+ , servant-swagger
191176 , servant-swagger-ui
192− , servant-server >=0.4.4.5 && <0.10
193− , aeson >=0.8.0.2 && <1.1
177+ , swagger2
178+ , text
179+ , aeson >=0.8.0.2 && <1.2
194180 , base-compat >=0.6.0 && <0.10
195181 , lens >=4.7.0.1 && <4.16
196182 , wai >=3.0.3.0 && <3.3
197183 , warp >=3.0.13.1 && <3.3
198184 if flag(servant-0-5)
199− build-depends:
200− servant >=0.5
201− , transformers >=0.3 && <0.6
202− , transformers-compat >=0.3 && <0.6
185+ build-depends: transformers, transformers-compat
203186 else
204− build-depends:
205− servant <0.5
206− , either
187+ build-depends: either
207188 default-language: Haskell2010
src/Servant/Swagger/UI.hs+19−6
@@ -74,11 +74,16 @@ import Text.Blaze (ToMarkup (..))
7474
7575import qualified Data.Text as T
7676
77+#if MIN_VERSION_servant(0,7,0)
78+-- do nothing
79+#else
7780#if MIN_VERSION_servant(0,5,0)
7881import Control.Monad.Trans.Except (ExceptT)
82+#define Handler ExceptT ServantErr IO
7983#else
8084import Control.Monad.Trans.Either (EitherT)
81−#define ExceptT EitherT
85+#define Handler EitherT ServantErr IO
86+#endif
8287#endif
8388
8489-- | Swagger schema + ui api.
@@ -113,7 +118,15 @@ type SwaggerSchemaUI' (dir :: Symbol) (api :: *) =
113118-- to find schema file automatically.
114119data SwaggerUiHtml (dir :: Symbol) (api :: *) = SwaggerUiHtml T.Text
115120
116−instance (KnownSymbol dir, HasLink api, URI ~ MkLink api, IsElem api api)
121+#if MIN_VERSION_servant(0,10,0)
122+#define LINK Link
123+#define LINKPATH uriPath . linkURI
124+#else
125+#define LINK URI
126+#define LINKPATH uriPath
127+#endif
128+
129+instance (KnownSymbol dir, HasLink api, LINK ~ MkLink api, IsElem api api)
117130 => ToMarkup (SwaggerUiHtml dir api)
118131 where
119132 toMarkup (SwaggerUiHtml template) = preEscapedToMarkup
@@ -121,7 +134,7 @@ instance (KnownSymbol dir, HasLink api, URI ~ MkLink api, IsElem api api)
121134 $ T.replace "SERVANT_SWAGGER_UI_DIR" dir
122135 $ template
123136 where
124− schema = T.pack $ uriPath $ safeLink proxyApi proxyApi
137+ schema = T.pack $ LINKPATH $ safeLink proxyApi proxyApi
125138 dir = T.pack $ symbolVal (Proxy :: Proxy dir)
126139 proxyApi = Proxy :: Proxy api
127140
@@ -131,7 +144,7 @@ instance (KnownSymbol dir, HasLink api, URI ~ MkLink api, IsElem api api)
131144-- swaggerSchemaUIServer :: Swagger -> Server (SwaggerSchemaUI schema dir)
132145-- @
133146swaggerSchemaUIServer
134− :: (Server api ~ ExceptT ServantErr IO Swagger)
147+ :: (Server api ~ Handler Swagger)
135148 => Swagger -> Server (SwaggerSchemaUI' dir api)
136149swaggerSchemaUIServer =
137150 swaggerSchemaUIServerImpl swaggerUiIndexTemplate swaggerUiFiles
@@ -140,13 +153,13 @@ swaggerSchemaUIServer =
140153--
141154-- See <https://github.com/jensoleg/swagger-ui>
142155jensolegSwaggerSchemaUIServer
143− :: (Server api ~ ExceptT ServantErr IO Swagger)
156+ :: (Server api ~ Handler Swagger)
144157 => Swagger -> Server (SwaggerSchemaUI' dir api)
145158jensolegSwaggerSchemaUIServer =
146159 swaggerSchemaUIServerImpl jensolegIndexTemplate jensolegFiles
147160
148161swaggerSchemaUIServerImpl
149− :: (Server api ~ ExceptT ServantErr IO Swagger)
162+ :: (Server api ~ Handler Swagger)
150163 => T.Text -> [(FilePath, ByteString)]
151164 -> Swagger -> Server (SwaggerSchemaUI' dir api)
152165swaggerSchemaUIServerImpl indexTemplate files swagger = return swagger