git.iko.soy/typeable/servant-swagger-ui
on master help sign in
Support servant-0.10
fcf9280Oleg Grenrus
.travis.meta.yml+3
@@ -2,17 +2,20 @@ language: haskell-multi-ghc
2
2
3env:
3env:
4 - GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=swagger2-2.1-cabal.config
4 - 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
5 - GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=servant-0.9-cabal.config
6 - GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=servant-0.9-cabal.config
6 - GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=servant-0.8-cabal.config
7 - GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=servant-0.8-cabal.config
7 - GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=servant-0.7-cabal.config
8 - GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=servant-0.7-cabal.config
8
9
9 - GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=swagger2-2.1-cabal.config
10 - 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
10 - GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=servant-0.9-cabal.config
12 - GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=servant-0.9-cabal.config
11 - GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=servant-0.8-cabal.config
13 - GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=servant-0.8-cabal.config
12 - GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=servant-0.7-cabal.config
14 - GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=servant-0.7-cabal.config
13
15
14 - GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=swagger2-2.1-cabal.config
16 - GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=swagger2-2.1-cabal.config
15 - GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=swagger2-2.0-cabal.config
17 - 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
16 - GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=servant-0.9-cabal.config
19 - GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=servant-0.9-cabal.config
17 - GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=servant-0.8-cabal.config
20 - GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=servant-0.8-cabal.config
18 - GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=servant-0.7-cabal.config
21 - GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=servant-0.7-cabal.config
.travis.yml+30
@@ -54,6 +54,16 @@ matrix:
54 - ghc-8.0.2
54 - ghc-8.0.2
55 - libgmp-dev
55 - libgmp-dev
56 compiler: ! ': # ghc-8.0.2 cabal-1.24 swagger2-2.1-cabal.config'
56 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'
57 - env: GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=servant-0.9-cabal.config
67 - env: GHCVER=8.0.2 CABALVER=1.24 CABALCONFIG=servant-0.9-cabal.config
58 addons:
68 addons:
59 apt:
69 apt:
@@ -94,6 +104,16 @@ matrix:
94 - ghc-8.0.1
104 - ghc-8.0.1
95 - libgmp-dev
105 - libgmp-dev
96 compiler: ! ': # ghc-8.0.1 cabal-1.24 swagger2-2.1-cabal.config'
106 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'
97 - env: GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=servant-0.9-cabal.config
117 - env: GHCVER=8.0.1 CABALVER=1.24 CABALCONFIG=servant-0.9-cabal.config
98 addons:
118 addons:
99 apt:
119 apt:
@@ -144,6 +164,16 @@ matrix:
144 - ghc-7.10.3
164 - ghc-7.10.3
145 - libgmp-dev
165 - libgmp-dev
146 compiler: ! ': # ghc-7.10.3 cabal-1.22 swagger2-2.0-cabal.config'
166 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'
147 - env: GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=servant-0.9-cabal.config
177 - env: GHCVER=7.10.3 CABALVER=1.22 CABALCONFIG=servant-0.9-cabal.config
148 addons:
178 addons:
149 apt:
179 apt:
CHANGELOG.md+3
@@ -1,3 +1,6 @@
1+- 0.2.2.2.2.8
2+ - Support `servant-0.10`
3+
1- 0.2.1.2.2.8
4- 0.2.1.2.2.8
2 - Update to `swagger-ui-2.2.8`
5 - Update to `swagger-ui-2.2.8`
3 - Add support for [jensoleg](https://github.com/jensoleg/swagger-ui>) theme
6 - Add support for [jensoleg](https://github.com/jensoleg/swagger-ui>) theme
example/Main.hs+8−2
@@ -32,13 +32,19 @@ import Servant.Swagger.UI
32
32
33import qualified Network.Wai.Handler.Warp as Warp
33import qualified Network.Wai.Handler.Warp as Warp
34
34
35+#if MIN_VERSION_servant(0,7,0)
36+-- do nothing
37+#else
35#if MIN_VERSION_servant(0,5,0)
38#if MIN_VERSION_servant(0,5,0)
36import Control.Monad.Trans.Except (ExceptT)
39import Control.Monad.Trans.Except (ExceptT)
40+#define Handler ExceptT ServantErr IO
37#else
41#else
38import Control.Monad.Trans.Either (EitherT)
42import Control.Monad.Trans.Either (EitherT)
39−#define ExceptT EitherT
43+#define Handler EitherT ServantErr IO
44+#endif
40#endif
45#endif
41
46
47+
42-- data types
48-- data types
43data Cat = Cat { catName :: CatName, catIsMale :: Bool }
49data Cat = Cat { catName :: CatName, catIsMale :: Bool }
44 deriving (Generic, Show)
50 deriving (Generic, Show)
@@ -106,7 +112,7 @@ server' uiFlavour = server Normal
106 -- Unfortunately we have to specify the basePath manually atm.
112 -- Unfortunately we have to specify the basePath manually atm.
107
113
108 schemaUiServer
114 schemaUiServer
109− :: (Server api ~ ExceptT ServantErr IO Swagger)
115+ :: (Server api ~ Handler Swagger)
110 => Swagger -> Server (SwaggerSchemaUI' dir api)
116 => Swagger -> Server (SwaggerSchemaUI' dir api)
111 schemaUiServer = case uiFlavour of
117 schemaUiServer = case uiFlavour of
112 Original -> swaggerSchemaUIServer
118 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−
5name: servant-swagger-ui
1name: servant-swagger-ui
6−version: 0.2.1.2.2.8
2+version: 0.2.2.2.2.8
7synopsis: Servant swagger ui
3synopsis: Servant swagger ui
8description: Provide embedded swagger UI for servant and swagger (i.e. servant-swagger)
4description: Provide embedded swagger UI for servant and swagger (i.e. servant-swagger)
9category: Web
5category: Web
@@ -13,7 +9,7 @@ author: Oleg Grenrus <oleg.grenrus@iki.fi>
13maintainer: Oleg Grenrus <oleg.grenrus@iki.fi>
9maintainer: Oleg Grenrus <oleg.grenrus@iki.fi>
14license: BSD3
10license: BSD3
15license-file: LICENSE
11license-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
17build-type: Simple
13build-type: Simple
18cabal-version: >= 1.10
14cabal-version: >= 1.10
19
15
@@ -144,9 +140,9 @@ library
144 , file-embed >=0.0.9 && <0.1
140 , file-embed >=0.0.9 && <0.1
145 , filepath >=1.3.0.2 && <1.5
141 , filepath >=1.3.0.2 && <1.5
146 , http-media >=0.6.2 && <0.8
142 , http-media >=0.6.2 && <0.8
147− , servant >=0.4.4.5 && <0.10
143+ , servant >=0.4.4.5 && <0.11
148 , servant-blaze >=0.4.4.5 && <0.9
144 , 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
150 , servant-swagger >=1.0.3 && <1.2
146 , servant-swagger >=1.0.3 && <1.2
151 , swagger2 >=2.0.1 && <2.2
147 , swagger2 >=2.0.1 && <2.2
152 , template-haskell >=2.9 && <2.12
148 , template-haskell >=2.9 && <2.12
@@ -173,35 +169,20 @@ test-suite example
173 example
169 example
174 ghc-options: -Wall
170 ghc-options: -Wall
175 build-depends:
171 build-depends:
176− base >=4.7 && <4.10
172+ base
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
173+ , servant
185− , servant-server >=0.4.4.5 && <0.10
174+ , servant-server
186− , servant-swagger >=1.0.3 && <1.2
175+ , servant-swagger
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
191 , servant-swagger-ui
176 , servant-swagger-ui
192− , servant-server >=0.4.4.5 && <0.10
177+ , swagger2
178+ , text
193− , aeson >=0.8.0.2 && <1.1
179+ , aeson >=0.8.0.2 && <1.2
194 , base-compat >=0.6.0 && <0.10
180 , base-compat >=0.6.0 && <0.10
195 , lens >=4.7.0.1 && <4.16
181 , lens >=4.7.0.1 && <4.16
196 , wai >=3.0.3.0 && <3.3
182 , wai >=3.0.3.0 && <3.3
197 , warp >=3.0.13.1 && <3.3
183 , warp >=3.0.13.1 && <3.3
198 if flag(servant-0-5)
184 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
203 else
186 else
204− build-depends:
187+ build-depends: either
205− servant <0.5
206− , either
207 default-language: Haskell2010
188 default-language: Haskell2010
src/Servant/Swagger/UI.hs+19−6
@@ -74,11 +74,16 @@ import Text.Blaze (ToMarkup (..))
74
74
75import qualified Data.Text as T
75import qualified Data.Text as T
76
76
77+#if MIN_VERSION_servant(0,7,0)
78+-- do nothing
79+#else
77#if MIN_VERSION_servant(0,5,0)
80#if MIN_VERSION_servant(0,5,0)
78import Control.Monad.Trans.Except (ExceptT)
81import Control.Monad.Trans.Except (ExceptT)
82+#define Handler ExceptT ServantErr IO
79#else
83#else
80import Control.Monad.Trans.Either (EitherT)
84import Control.Monad.Trans.Either (EitherT)
81−#define ExceptT EitherT
85+#define Handler EitherT ServantErr IO
86+#endif
82#endif
87#endif
83
88
84-- | Swagger schema + ui api.
89-- | Swagger schema + ui api.
@@ -113,7 +118,15 @@ type SwaggerSchemaUI' (dir :: Symbol) (api :: *) =
113-- to find schema file automatically.
118-- to find schema file automatically.
114data SwaggerUiHtml (dir :: Symbol) (api :: *) = SwaggerUiHtml T.Text
119data SwaggerUiHtml (dir :: Symbol) (api :: *) = SwaggerUiHtml T.Text
115
120
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+
116−instance (KnownSymbol dir, HasLink api, URI ~ MkLink api, IsElem api api)
129+instance (KnownSymbol dir, HasLink api, LINK ~ MkLink api, IsElem api api)
117 => ToMarkup (SwaggerUiHtml dir api)
130 => ToMarkup (SwaggerUiHtml dir api)
118 where
131 where
119 toMarkup (SwaggerUiHtml template) = preEscapedToMarkup
132 toMarkup (SwaggerUiHtml template) = preEscapedToMarkup
@@ -121,7 +134,7 @@ instance (KnownSymbol dir, HasLink api, URI ~ MkLink api, IsElem api api)
121 $ T.replace "SERVANT_SWAGGER_UI_DIR" dir
134 $ T.replace "SERVANT_SWAGGER_UI_DIR" dir
122 $ template
135 $ template
123 where
136 where
124− schema = T.pack $ uriPath $ safeLink proxyApi proxyApi
137+ schema = T.pack $ LINKPATH $ safeLink proxyApi proxyApi
125 dir = T.pack $ symbolVal (Proxy :: Proxy dir)
138 dir = T.pack $ symbolVal (Proxy :: Proxy dir)
126 proxyApi = Proxy :: Proxy api
139 proxyApi = Proxy :: Proxy api
127
140
@@ -131,7 +144,7 @@ instance (KnownSymbol dir, HasLink api, URI ~ MkLink api, IsElem api api)
131-- swaggerSchemaUIServer :: Swagger -> Server (SwaggerSchemaUI schema dir)
144-- swaggerSchemaUIServer :: Swagger -> Server (SwaggerSchemaUI schema dir)
132-- @
145-- @
133swaggerSchemaUIServer
146swaggerSchemaUIServer
134− :: (Server api ~ ExceptT ServantErr IO Swagger)
147+ :: (Server api ~ Handler Swagger)
135 => Swagger -> Server (SwaggerSchemaUI' dir api)
148 => Swagger -> Server (SwaggerSchemaUI' dir api)
136swaggerSchemaUIServer =
149swaggerSchemaUIServer =
137 swaggerSchemaUIServerImpl swaggerUiIndexTemplate swaggerUiFiles
150 swaggerSchemaUIServerImpl swaggerUiIndexTemplate swaggerUiFiles
@@ -140,13 +153,13 @@ swaggerSchemaUIServer =
140--
153--
141-- See <https://github.com/jensoleg/swagger-ui>
154-- See <https://github.com/jensoleg/swagger-ui>
142jensolegSwaggerSchemaUIServer
155jensolegSwaggerSchemaUIServer
143− :: (Server api ~ ExceptT ServantErr IO Swagger)
156+ :: (Server api ~ Handler Swagger)
144 => Swagger -> Server (SwaggerSchemaUI' dir api)
157 => Swagger -> Server (SwaggerSchemaUI' dir api)
145jensolegSwaggerSchemaUIServer =
158jensolegSwaggerSchemaUIServer =
146 swaggerSchemaUIServerImpl jensolegIndexTemplate jensolegFiles
159 swaggerSchemaUIServerImpl jensolegIndexTemplate jensolegFiles
147
160
148swaggerSchemaUIServerImpl
161swaggerSchemaUIServerImpl
149− :: (Server api ~ ExceptT ServantErr IO Swagger)
162+ :: (Server api ~ Handler Swagger)
150 => T.Text -> [(FilePath, ByteString)]
163 => T.Text -> [(FilePath, ByteString)]
151 -> Swagger -> Server (SwaggerSchemaUI' dir api)
164 -> Swagger -> Server (SwaggerSchemaUI' dir api)
152swaggerSchemaUIServerImpl indexTemplate files swagger = return swagger
165swaggerSchemaUIServerImpl indexTemplate files swagger = return swagger