git.iko.soy/typeable/servant-swagger-ui
on master help sign in
Merge pull request #41 from phadej/servant-0.13

Support servant-0.13

commit837b1f9148e11ec762307e9d016923879cc97700 authorOleg Grenrus <oleg.grenrus@iki.fi> dateSun 11 Feb 2018, 16:45 (9 years ago) parentcbd19056007e7b
10 files changed+85−143
.travis.yml+33−10 CHANGELOG.md+4 cabal.make-travis-yml+27 constraints.hs−101 example/Main.hs+18−3 screenshot.png servant-swagger-ui.cabal+3−3 stack-lts-2.yaml−14 stack-lts-5.yaml−7 stack.yaml−5
.travis.yml+33−10
@@ -1,6 +1,6 @@
11# This Travis job script has been generated by a script via
22#
3−# make_travis_yml_2.hs '-o' '.travis.yml' '--branch' 'master' '--constraints=$ROOTDIR/constraints.hs' 'servant-swagger-ui.cabal'
3+# runghc make_travis_yml_2.hs '--branch' 'master' '--output' '.travis.yml' '--config' 'servant-swagger-ui.cabal'
44#
55# For more information, see https://github.com/hvr/multi-ghc-travis
66#
@@ -28,6 +28,8 @@ before_cache:
2828 - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar
2929 - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar.idx
3030
31+ - rm -rfv $HOME/.cabal/packages/head.hackage
32+
3133matrix:
3234 include:
3335 - compiler: "ghc-7.8.4"
@@ -48,7 +50,10 @@ before_install:
4850 - HCPKG=${HC/ghc/ghc-pkg}
4951 - unset CC
5052 - ROOTDIR=$(pwd)
51− - "PATH=/opt/ghc/bin:/opt/ghc-ppa-tools/bin:$PATH"
53+ - mkdir -p $HOME/.local/bin
54+ - "PATH=/opt/ghc/bin:/opt/ghc-ppa-tools/bin:$HOME/local/bin:$PATH"
55+ - HCNUMVER=$(( $(${HC} --numeric-version|sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+).*/\1 * 10000 + \2 * 100 + \3/') ))
56+ - echo $HCNUMVER
5257
5358install:
5459 - cabal --version
@@ -57,12 +62,15 @@ install:
5762 - TEST=${TEST---enable-tests}
5863 - HADDOCK=${HADDOCK-true}
5964 - INSTALLED=${INSTALLED-true}
65+ - GHCHEAD=${GHCHEAD-false}
6066 - travis_retry cabal update -v
6167 - "sed -i.bak 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config"
62− - rm -fv cabal.project.local
63− - "echo 'packages: .' > cabal.project"
68+ - rm -fv cabal.project cabal.project.local
69+ - grep -Ev -- '^\s*--' ${HOME}/.cabal/config | grep -Ev '^\s*$'
70+ - "printf 'packages: \".\"\\n' > cabal.project"
71+ - cat cabal.project
6472 - if [ -f "./configure.ac" ]; then
65− (cd "."; autoreconf -i);
73+ (cd "." && autoreconf -i);
6674 fi
6775 - rm -f cabal.project.freeze
6876 - cabal new-build -w ${HC} ${TEST} ${BENCH} --project-file="cabal.project" --dep -j2 all
@@ -79,6 +87,7 @@ script:
7987 - cd ${DISTDIR} || false
8088 - find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;
8189 - "printf 'packages: servant-swagger-ui-*/*.cabal\\n' > cabal.project"
90+ - cat cabal.project
8291 # this builds all libraries and executables (without tests/benchmarks)
8392 - cabal new-build -w ${HC} --disable-tests --disable-benchmarks all
8493
@@ -87,14 +96,28 @@ script:
8796
8897 # build & run tests, build benchmarks
8998 - cabal new-build -w ${HC} ${TEST} ${BENCH} all
90− - if [ "x$TEST" = "x--enable-tests" ]; then cabal new-test -w ${HC} ${TEST} all; fi
99+ - if [ "x$TEST" = "x--enable-tests" ]; then cabal new-test -w ${HC} ${TEST} ${BENCH} all; fi
91100
92− # build & run tests, with constraints
93− - for c in $($ROOTDIR/constraints.hs list ${HC}); do echo "=== Constraint" $c; echo "--------------------------------"; cabal new-build -w ${HC} --disable-tests --disable-benchmarks $($ROOTDIR/constraints.hs constraints $c) all; done
101+ # cabal check
102+ - (cd servant-swagger-ui-* && cabal check)
94103
95104 # haddock
96105 - rm -rf ./dist-newstyle
97− - if $HADDOCK; then cabal new-haddock -w ${HC} --disable-tests --disable-benchmarks all; else echo "Skipping haddock generation";fi
106+ - if $HADDOCK; then cabal new-haddock -w ${HC} ${TEST} ${BENCH} all; else echo "Skipping haddock generation";fi
107+
108+ - if [ $HCNUMVER -ge 70800 ] && [ $HCNUMVER -lt 80000 ]; then cabal new-build -w ${HC} --disable-tests --disable-benchmarks --constraint='servant ==0.7.*' all; else echo skipping...; fi
109+
110+ - if [ $HCNUMVER -ge 70800 ] && [ $HCNUMVER -lt 80200 ]; then cabal new-build -w ${HC} --disable-tests --disable-benchmarks --constraint='servant ==0.8.*' all; else echo skipping...; fi
111+
112+ - if [ $HCNUMVER -ge 70800 ] && [ $HCNUMVER -lt 80200 ]; then cabal new-build -w ${HC} --disable-tests --disable-benchmarks --constraint='servant ==0.9.*' all; else echo skipping...; fi
113+
114+ - if [ $HCNUMVER -ge 70800 ] && [ $HCNUMVER -lt 80200 ]; then cabal new-build -w ${HC} --disable-tests --disable-benchmarks --constraint='servant ==0.10.*' all; else echo skipping...; fi
115+
116+ - if [ $HCNUMVER -ge 70800 ] && [ $HCNUMVER -lt 80400 ]; then cabal new-build -w ${HC} --disable-tests --disable-benchmarks --constraint='servant ==0.11.*' all; else echo skipping...; fi
117+
118+ - if [ $HCNUMVER -ge 70800 ] && [ $HCNUMVER -lt 80400 ]; then cabal new-build -w ${HC} --disable-tests --disable-benchmarks --constraint='servant ==0.12.*' all; else echo skipping...; fi
119+
120+ - if [ $HCNUMVER -ge 70800 ] && [ $HCNUMVER -lt 80400 ]; then cabal new-build -w ${HC} --disable-tests --disable-benchmarks --constraint='servant ==0.13.*' all; else echo skipping...; fi
98121
99−# REGENDATA ["-o",".travis.yml","--branch","master","--constraints=$ROOTDIR/constraints.hs","servant-swagger-ui.cabal"]
122+# REGENDATA ["--branch","master","--output",".travis.yml","--config","servant-swagger-ui.cabal"]
100123# EOF
CHANGELOG.md+4
@@ -1,3 +1,7 @@
1+- 0.2.4.3.9.1
2+ - Support `servant-0.13`
3+ - Update to `swagger-ui-3.9.1`
4+
15- 0.2.3.2.2.8
26 - Support `servant-0.11`
37
cabal.make-travis-ymlnew file+27
@@ -0,0 +1,27 @@
1+constraint-set servant-0.7
2+ ghc: >= 7.8 && <8.0
3+ constraints: servant ==0.7.*
4+
5+constraint-set servant-0.8
6+ ghc: >= 7.8 && <8.2
7+ constraints: servant ==0.8.*
8+
9+constraint-set servant-0.9
10+ ghc: >= 7.8 && <8.2
11+ constraints: servant ==0.9.*
12+
13+constraint-set servant-0.10
14+ ghc: >= 7.8 && <8.2
15+ constraints: servant ==0.10.*
16+
17+constraint-set servant-0.11
18+ ghc: >= 7.8 && <8.4
19+ constraints: servant ==0.11.*
20+
21+constraint-set servant-0.12
22+ ghc: >= 7.8 && <8.4
23+ constraints: servant ==0.12.*
24+
25+constraint-set servant-0.13
26+ ghc: >= 7.8 && <8.4
27+ constraints: servant ==0.13.*
constraints.hsdeleted−101
@@ -1,101 +0,0 @@
1−#!/usr/bin/env runghc
2−{-# OPTIONS_GHC -Wall #-}
3−
4−import Data.Char (toLower)
5−import Data.Foldable (traverse_)
6−import Data.List (isPrefixOf)
7−import Data.Version (Version, parseVersion)
8−import System.Environment (getArgs)
9−import Text.ParserCombinators.ReadP (readP_to_S)
10−
11−-------------------------------------------------------------------------------
12−-- Definitions
13−-------------------------------------------------------------------------------
14−
15−-- | The guts of the implementation works with this value.
16−defns :: [Defn]
17−defns = map defn [minBound .. maxBound]
18−
19−-- | C is a helper type to make 'defns'
20−data C
21− = Servant_0_4
22− | Servant_0_5
23− | Servant_0_6
24− | Servant_0_7
25− | Servant_0_8
26− | Servant_0_9
27− | Servant_0_10
28− | Servant_0_11
29− | Servant_0_12
30− deriving (Eq, Show, Enum, Bounded)
31−
32−-- Constraint definitions
33−defn :: C -> Defn
34−defn c = case c of
35− -- identifier, constraint, min <= v < max ghc versions
36− -- Note: we shouldn't have spaces in the constraint, because /bin/sh
37− Servant_0_4 -> mkDefn c ["servant==0.4.4.*"] "7.8" "8.0"
38− Servant_0_5 -> mkDefn c ["servant==0.5.*" ] "7.8" "8.0"
39− Servant_0_6 -> mkDefn c ["servant==0.6.*" ] "7.8" "8.0"
40− Servant_0_7 -> mkDefn c ["servant==0.7.*" ] "7.8" "8.2"
41− Servant_0_8 -> mkDefn c ["servant==0.8.*" ] "7.8" "8.2"
42− Servant_0_9 -> mkDefn c ["servant==0.9.*" ] "7.8" "8.2"
43− Servant_0_10 -> mkDefn c ["servant==0.10.*" ] "7.8" "8.2"
44− Servant_0_11 -> mkDefn c ["servant==0.11.*" ] "7.8" "8.3"
45− Servant_0_12 -> mkDefn c ["servant==0.12.*" ] "7.8" "8.3"
46−
47−mkDefn :: C -> [String] -> String -> String -> Defn
48−mkDefn c x mi ma = Defn (map toLower $ show c) x (unsafeMkV mi) (unsafeMkV ma)
49−
50−-------------------------------------------------------------------------------
51−-- Implementation
52−-------------------------------------------------------------------------------
53−
54−data Defn = Defn
55− { defnId :: String
56− , defnConstraints :: [String]
57− , defnMinGHC :: Version
58− , defnMaxGHC :: Version
59− }
60−
61−mkV :: String -> Maybe Version
62−mkV s = case filter (null . snd) $ readP_to_S parseVersion s of
63− ((v, "") : _) -> Just v
64− _ -> Nothing
65−
66−unsafeMkV :: String -> Version
67−unsafeMkV s = case mkV s of
68− Nothing -> error $ "panic: Cannot parse version: " ++ s
69− Just v -> v
70−
71−parseGHCVersion :: String -> Maybe Version
72−parseGHCVersion s
73− | "ghc-" `isPrefixOf` s = mkV (drop 4 s)
74− | otherwise = Nothing
75−
76−unsafeParseGHCVersion :: String -> Version
77−unsafeParseGHCVersion s = case parseGHCVersion s of
78− Nothing -> error $ "panic: Cannot parse ghc version: " ++ s
79− Just v -> v
80−
81−main :: IO ()
82−main = do
83− args <- getArgs
84− case args of
85− ["list", ghc] -> traverse_ putStrLn
86− [ i
87− | Defn i _ mi ma <- defns
88− , mi <= v, v < ma
89− ]
90− where
91− v = unsafeParseGHCVersion ghc
92−
93− ["constraints", i'] -> traverse_ putStrLn
94− [ "--constraint " ++ x
95− | Defn i xs _ _ <- defns
96− , i' == i
97− , x <- xs
98− ]
99−
100− _ -> error $ "unknown args: " ++ show args
101−
example/Main.hs+18−3
@@ -76,8 +76,22 @@ instance ToSchema Cat
7676instance ToSchema CatName
7777
7878-- api
79+
80+type FirstCatEndpoint =
81+#if MIN_VERSION_servant(0,13,0)
82+ "cat"
83+ :> Summary "First cat endpoint"
84+ :> Capture' '[Description "Cat's name"] ":name" CatName
85+ :> QueryParam' '[Required, Description "Random number"] "num" Int
86+ :> QueryParam' '[Optional, Description "Random text"] "text" Text
87+ :> Get '[JSON] Cat
88+#else
89+ "cat" :> Capture ":name" CatName
90+ :> QueryParam "num" Int :> QueryParam "text" Text :> Get '[JSON] Cat
91+#endif
92+
7993type BasicAPI = Get '[PlainText, JSON] Text
80− :<|> SUMMARY("First cat") "cat" :> Capture ":name" CatName :> Get '[JSON] Cat
94+ :<|> FirstCatEndpoint
8195 :<|> SUMMARY("Second cat") "cat2" :> Capture ":name" CatName :> Get '[JSON] Cat
8296 :<|> SUMMARY("Third cat") "cat3" :> Capture ":name" CatName :> Get '[JSON] Cat
8397 :<|> SUMMARY("Post endpoint") "post-cat" :> ReqBody '[JSON] Cat :> Post '[JSON] Cat
@@ -114,9 +128,10 @@ server' uiFlavour = server Normal
114128 server :: Variant -> Server API
115129 server variant =
116130 schemaUiServer (swaggerDoc' variant)
117− :<|> (return "Hello World" :<|> catEndpoint :<|> catEndpoint :<|> catEndpoint :<|> return)
131+ :<|> (return "Hello World" :<|> catEndpoint' :<|> catEndpoint :<|> catEndpoint :<|> return)
118132 where
119− catEndpoint n = return $ Cat n (variant == Normal)
133+ catEndpoint' n _ _ = return $ Cat n (variant == Normal)
134+ catEndpoint n = return $ Cat n (variant == Normal)
120135 -- Unfortunately we have to specify the basePath manually atm.
121136
122137 schemaUiServer
screenshot.png

Binary file not shown.

servant-swagger-ui.cabal+3−3
@@ -99,9 +99,9 @@ library
9999 , file-embed >=0.0.9 && <0.1
100100 , filepath >=1.3.0.2 && <1.5
101101 , http-media >=0.6.2 && <0.8
102− , servant >=0.4.4.5 && <0.13
102+ , servant >=0.4.4.5 && <0.14
103103 , servant-blaze >=0.4.4.5 && <0.9
104− , servant-server >=0.4.4.5 && <0.13
104+ , servant-server >=0.4.4.5 && <0.14
105105 , servant-swagger >=1.0.3 && <1.2
106106 , swagger2 >=2.0.1 && <2.3
107107 , template-haskell >=2.9 && <2.13
@@ -137,7 +137,7 @@ test-suite example
137137 , text
138138 , aeson >=0.8.0.2 && <1.3
139139 , base-compat >=0.6.0 && <0.10
140− , lens >=4.7.0.1 && <4.16
140+ , lens >=4.7.0.1 && <4.17
141141 , wai >=3.0.3.0 && <3.3
142142 , warp >=3.0.13.1 && <3.3
143143 if flag(servant-0-5)
stack-lts-2.yamldeleted−14
@@ -1,14 +0,0 @@
1−resolver: lts-2.22
2−packages:
3−- '.'
4−extra-deps:
5−- base-compat-0.9.0
6−- servant-0.5
7−- servant-blaze-0.5
8−- servant-server-0.5
9−- servant-swagger-1.0.3
10−- http-api-data-0.2.2
11−- time-locale-compat-0.1.1.1
12−- swagger2-2.0.2
13−- file-embed-0.0.9
14−flags: {}
stack-lts-5.yamldeleted−7
@@ -1,7 +0,0 @@
1−resolver: lts-5.1
2−packages:
3−- '.'
4−extra-deps:
5−- servant-swagger-1.0.3
6−- swagger2-2.0.1
7−flags: {}
stack.yamldeleted−5
@@ -1,5 +0,0 @@
1−resolver: lts-10.3
2−packages:
3−- '.'
4−extra-deps: []
5−flags: {}