git.iko.soy/typeable/swagger2
on master help sign in
Merge branch 'master' into master
faa86b3Ben Weitzman
.travis.yml+14−12
@@ -2,7 +2,7 @@
2#
2#
3# runghc make_travis_yml_2.hs '--branch' 'master' '--output' '.travis.yml' 'swagger2.cabal' '--env=8.2.2:HADDOCK=false' '--env=8.0.2:HADDOCK=false' '--env=7.10.3:HADDOCK=false' '--env=7.8.4:HADDOCK=false'
3# runghc make_travis_yml_2.hs '--branch' 'master' '--output' '.travis.yml' 'swagger2.cabal' '--env=8.2.2:HADDOCK=false' '--env=8.0.2:HADDOCK=false' '--env=7.10.3:HADDOCK=false' '--env=7.8.4:HADDOCK=false'
4#
4#
5−# For more information, see https://github.com/hvr/multi-ghc-travis
5+# For more information, see https://github.com/haskell-CI/haskell-ci
6#
6#
7language: c
7language: c
8sudo: false
8sudo: false
@@ -32,21 +32,24 @@ before_cache:
32
32
33matrix:
33matrix:
34 include:
34 include:
35− - compiler: "ghc-8.4.3"
35+ - compiler: "ghc-8.6.1"
36 # env: TEST=--disable-tests BENCH=--disable-benchmarks
36 # env: TEST=--disable-tests BENCH=--disable-benchmarks
37− addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.2,ghc-8.4.3], sources: [hvr-ghc]}}
37+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.6.1], sources: [hvr-ghc]}}
38+ - compiler: "ghc-8.4.4"
39+ # env: TEST=--disable-tests BENCH=--disable-benchmarks
40+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.4.4], sources: [hvr-ghc]}}
38 - compiler: "ghc-8.2.2"
41 - compiler: "ghc-8.2.2"
39 env: HADDOCK=false
42 env: HADDOCK=false
40− addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.2,ghc-8.2.2], sources: [hvr-ghc]}}
43+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.2.2], sources: [hvr-ghc]}}
41 - compiler: "ghc-8.0.2"
44 - compiler: "ghc-8.0.2"
42 env: HADDOCK=false
45 env: HADDOCK=false
43− addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.2,ghc-8.0.2], sources: [hvr-ghc]}}
46+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.0.2], sources: [hvr-ghc]}}
44 - compiler: "ghc-7.10.3"
47 - compiler: "ghc-7.10.3"
45 env: HADDOCK=false
48 env: HADDOCK=false
46− addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.2,ghc-7.10.3], sources: [hvr-ghc]}}
49+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-7.10.3], sources: [hvr-ghc]}}
47 - compiler: "ghc-7.8.4"
50 - compiler: "ghc-7.8.4"
48 env: HADDOCK=false
51 env: HADDOCK=false
49− addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.2,ghc-7.8.4], sources: [hvr-ghc]}}
52+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-7.8.4], sources: [hvr-ghc]}}
50
53
51before_install:
54before_install:
52 - HC=${CC}
55 - HC=${CC}
@@ -73,7 +76,7 @@ install:
73 - grep -Ev -- '^\s*--' ${HOME}/.cabal/config | grep -Ev '^\s*$'
76 - grep -Ev -- '^\s*--' ${HOME}/.cabal/config | grep -Ev '^\s*$'
74 - "printf 'packages: \".\"\\n' > cabal.project"
77 - "printf 'packages: \".\"\\n' > cabal.project"
75 - touch cabal.project.local
78 - touch cabal.project.local
76− - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
79+ - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | grep -vw -- swagger2 | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
77 - cat cabal.project || true
80 - cat cabal.project || true
78 - cat cabal.project.local || true
81 - cat cabal.project.local || true
79 - if [ -f "./configure.ac" ]; then
82 - if [ -f "./configure.ac" ]; then
@@ -89,13 +92,13 @@ install:
89# any command which exits with a non-zero exit code causes the build to fail.
92# any command which exits with a non-zero exit code causes the build to fail.
90script:
93script:
91 # test that source-distributions can be generated
94 # test that source-distributions can be generated
92− - (cd "." && cabal sdist)
95+ - cabal new-sdist all
93− - mv "."/dist/swagger2-*.tar.gz ${DISTDIR}/
96+ - mv dist-newstyle/sdist/*.tar.gz ${DISTDIR}/
94 - cd ${DISTDIR} || false
97 - cd ${DISTDIR} || false
95 - find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;
98 - find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;
96 - "printf 'packages: swagger2-*/*.cabal\\n' > cabal.project"
99 - "printf 'packages: swagger2-*/*.cabal\\n' > cabal.project"
97 - touch cabal.project.local
100 - touch cabal.project.local
98− - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
101+ - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | grep -vw -- swagger2 | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
99 - cat cabal.project || true
102 - cat cabal.project || true
100 - cat cabal.project.local || true
103 - cat cabal.project.local || true
101 # this builds all libraries and executables (without tests/benchmarks)
104 # this builds all libraries and executables (without tests/benchmarks)
@@ -109,7 +112,6 @@ script:
109 - (cd swagger2-* && cabal check)
112 - (cd swagger2-* && cabal check)
110
113
111 # haddock
114 # haddock
112− - rm -rf ./dist-newstyle
113 - if $HADDOCK; then cabal new-haddock -w ${HC} ${TEST} ${BENCH} all; else echo "Skipping haddock generation";fi
115 - if $HADDOCK; then cabal new-haddock -w ${HC} ${TEST} ${BENCH} all; else echo "Skipping haddock generation";fi
114
116
115 # Build without installed constraints for packages in global-db
117 # Build without installed constraints for packages in global-db
CHANGELOG.md+5
@@ -1,3 +1,8 @@
1+2.3.0.1
2+-------
3+
4+- Support GHC-8.6
5+
12.3
62.3
2---
7---
3
8
stack.yaml+3−4
@@ -1,7 +1,6 @@
1−resolver: lts-11.14
1+resolver: lts-12.10
2packages:
2packages:
3- '.'
3- '.'
4extra-deps:
4extra-deps:
5−- aeson-1.3.1.0
6−- base-compat-0.10.1
7−- base-compat-batteries-0.10.1
5+- base-compat-batteries-0.10.4
6+- contravariant-1.5
swagger2.cabal+31−21
@@ -1,8 +1,10 @@
1cabal-version: >=1.10
1cabal-version: >=1.10
2name: swagger2
2name: swagger2
3−version: 2.3
3+version: 2.3.0.1
4+x-revision: 2
4
5
5synopsis: Swagger 2.0 data model
6synopsis: Swagger 2.0 data model
7+category: Web, Swagger
6description:
8description:
7 This library is inteded to be used for decoding and encoding Swagger 2.0 API
9 This library is inteded to be used for decoding and encoding Swagger 2.0 API
8 specifications as well as manipulating them.
10 specifications as well as manipulating them.
@@ -16,14 +18,19 @@ license-file: LICENSE
16author: Nickolay Kudasov
18author: Nickolay Kudasov
17maintainer: nickolay@getshoptv.com
19maintainer: nickolay@getshoptv.com
18copyright: (c) 2015-2016, GetShopTV
20copyright: (c) 2015-2016, GetShopTV
19−category: Web, Swagger
20build-type: Custom
21build-type: Custom
21extra-source-files:
22extra-source-files:
22 README.md
23 README.md
23 , CHANGELOG.md
24 , CHANGELOG.md
24 , examples/*.hs
25 , examples/*.hs
25 , include/overlapping-compat.h
26 , include/overlapping-compat.h
26−tested-with: GHC==7.8.4, GHC==7.10.3, GHC==8.0.2, GHC==8.2.2, GHC==8.4.3
27+tested-with:
28+ GHC ==7.8.4
29+ || ==7.10.3
30+ || ==8.0.2
31+ || ==8.2.2
32+ || ==8.4.4
33+ || ==8.6.1
27
34
28custom-setup
35custom-setup
29 setup-depends:
36 setup-depends:
@@ -54,12 +61,12 @@ library
54
61
55 -- GHC boot libraries
62 -- GHC boot libraries
56 build-depends:
63 build-depends:
57− base >=4.7 && <4.12
64+ base >=4.7 && <4.13
58− , bytestring >=0.10.4 && <0.11
65+ , bytestring >=0.10.4.0 && <0.11
59− , containers >=0.5.5.1 && <0.6
66+ , containers >=0.5.5.1 && <0.7
60− , template-haskell >=2.9.0.0 && <2.14
67+ , template-haskell >=2.9.0.0 && <2.15
61− , time >=1.4.2 && <1.9
68+ , time >=1.4.2 && <1.9
62− , transformers >=0.3.0.0 && <0.6
69+ , transformers >=0.3.0.0 && <0.6
63
70
64 build-depends:
71 build-depends:
65 mtl >=2.1 && <2.3
72 mtl >=2.1 && <2.3
@@ -67,18 +74,18 @@ library
67
74
68 -- other dependencies
75 -- other dependencies
69 build-depends:
76 build-depends:
70− base-compat-batteries >=0.10.1 && <0.11
77+ base-compat-batteries >=0.10.4 && <0.11
71− , aeson >=1.0.0.0 && <1.5
78+ , aeson >=1.3.1.1 && <1.5
72− , generics-sop >=0.3.2.0 && <0.4
79+ , generics-sop >=0.3.2.0 && <0.5
73 , hashable >=1.2.7.0 && <1.3
80 , hashable >=1.2.7.0 && <1.3
74 , http-media >=0.7.1.2 && <0.8
81 , http-media >=0.7.1.2 && <0.8
75− , insert-ordered-containers >=0.1.0.0 && <0.3
82+ , insert-ordered-containers >=0.2.1.0 && <0.3
76 , lens >=4.16.1 && <4.18
83 , lens >=4.16.1 && <4.18
77− , network >=2.6.3.5 && <2.8
84+ , network >=2.6.3.5 && <2.9
78− , scientific >=0.3.5.3 && <0.4
85+ , scientific >=0.3.6.2 && <0.4
79 , transformers-compat >=0.3 && <0.7
86 , transformers-compat >=0.3 && <0.7
80 , unordered-containers >=0.2.9.0 && <0.3
87 , unordered-containers >=0.2.9.0 && <0.3
81− , uuid-types >=1.0.2 && <1.1
88+ , uuid-types >=1.0.3 && <1.1
82 , vector >=0.12.0.1 && <0.13
89 , vector >=0.12.0.1 && <0.13
83 , QuickCheck >=2.10.1 && <2.12
90 , QuickCheck >=2.10.1 && <2.12
84
91
@@ -102,6 +109,7 @@ test-suite spec
102 , insert-ordered-containers
109 , insert-ordered-containers
103 , lens
110 , lens
104 , mtl
111 , mtl
112+ , template-haskell
105 , text
113 , text
106 , time
114 , time
107 , unordered-containers
115 , unordered-containers
@@ -109,15 +117,15 @@ test-suite spec
109
117
110 -- test-suite only dependencies
118 -- test-suite only dependencies
111 build-depends:
119 build-depends:
112− aeson-qq >=0.8.2 && <0.9
113− , hspec >=2.4.8 && <2.6
120+ hspec >=2.5.5 && <2.6
114 , HUnit >=1.6.0.0 && <1.7
121 , HUnit >=1.6.0.0 && <1.7
115− , QuickCheck >=2.10.1 && <2.12
122+ , QuickCheck >=2.11.3 && <2.13
116− , quickcheck-instances >=0.3.18 && <0.14
123+ , quickcheck-instances >=0.3.19 && <0.14
124+ , utf8-string >=1.0.1.1 && <1.1
117
125
118 -- https://github.com/haskell/cabal/issues/3708
126 -- https://github.com/haskell/cabal/issues/3708
119 build-tool-depends:
127 build-tool-depends:
120− hspec-discover:hspec-discover >=2.4.8 && <2.6
128+ hspec-discover:hspec-discover >=2.5.5 && <2.6
121
129
122 other-modules:
130 other-modules:
123 SpecCommon
131 SpecCommon
@@ -127,6 +135,8 @@ test-suite spec
127 Data.Swagger.SchemaSpec
135 Data.Swagger.SchemaSpec
128 Data.Swagger.Schema.ValidationSpec
136 Data.Swagger.Schema.ValidationSpec
129 Data.Swagger.Schema.GeneratorSpec
137 Data.Swagger.Schema.GeneratorSpec
138+
139+ Data.Aeson.QQ.Simple
130 default-language: Haskell2010
140 default-language: Haskell2010
131
141
132test-suite doctests
142test-suite doctests
test/Data/Aeson/QQ/Simple.hsnew file+45
@@ -0,0 +1,45 @@
1+{-# LANGUAGE TemplateHaskell #-}
2+-- | Like "Data.Aeson.QQ" but without interpolation.
3+module Data.Aeson.QQ.Simple where
4+
5+import Data.Aeson
6+import Data.ByteString.Lazy.UTF8 as UTF8
7+import qualified Data.HashMap.Strict as HM
8+import qualified Data.Text as T
9+import qualified Data.Vector as V
10+import Language.Haskell.TH
11+import Language.Haskell.TH.Quote
12+import Language.Haskell.TH.Syntax (Lift (..))
13+import Prelude ()
14+import Prelude.Compat
15+
16+aesonQQ :: QuasiQuoter
17+aesonQQ = QuasiQuoter
18+ { quoteExp = aesonExp
19+ , quotePat = const $ error "No quotePat defined for jsonQQ"
20+ , quoteType = const $ error "No quoteType defined for jsonQQ"
21+ , quoteDec = const $ error "No quoteDec defined for jsonQQ"
22+ }
23+
24+aesonExp :: String -> ExpQ
25+aesonExp txt =
26+ case eitherDecode $ UTF8.fromString txt of
27+ Left err -> error $ "Error in aesonExp: " ++ show err
28+ Right val -> liftValue val
29+
30+liftValue :: Value -> ExpQ
31+liftValue (String str) = [| String $(liftText str) |]
32+liftValue Null = [| Null |]
33+liftValue (Number n) = [| Number (fromRational $(return $ LitE $ RationalL (toRational n))) |]
34+liftValue (Bool b) = [| Bool b |]
35+liftValue (Array arr) = [| Array $ V.fromList $(ListE <$> traverse liftValue (V.toList arr)) |]
36+liftValue (Object obj) = [| object $jsList |]
37+ where
38+ jsList :: ExpQ
39+ jsList = ListE <$> traverse objs2list (HM.toList obj)
40+
41+ objs2list :: (T.Text, Value) -> ExpQ
42+ objs2list (key, value) = [| ($(liftText key), $(liftValue value)) |]
43+
44+liftText :: T.Text -> ExpQ
45+liftText t = [| T.pack $(lift $ T.unpack t) |]
test/Data/Swagger/CommonTestTypes.hs+1−1
@@ -8,7 +8,7 @@ import Prelude ()
8import Prelude.Compat
8import Prelude.Compat
9
9
10import Data.Aeson (ToJSON (..), ToJSONKey (..), Value)
10import Data.Aeson (ToJSON (..), ToJSONKey (..), Value)
11−import Data.Aeson.QQ
11+import Data.Aeson.QQ.Simple
12import Data.Aeson.Types (toJSONKeyText)
12import Data.Aeson.Types (toJSONKeyText)
13import Data.Char
13import Data.Char
14import Data.Map (Map)
14import Data.Map (Map)
test/Data/Swagger/ParamSchemaSpec.hs+1−1
@@ -6,7 +6,7 @@
6module Data.Swagger.ParamSchemaSpec where
6module Data.Swagger.ParamSchemaSpec where
7
7
8import Data.Aeson (Value)
8import Data.Aeson (Value)
9−import Data.Aeson.QQ
9+import Data.Aeson.QQ.Simple
10import Data.Char
10import Data.Char
11import Data.Proxy
11import Data.Proxy
12import GHC.Generics
12import GHC.Generics
test/Data/Swagger/SchemaSpec.hs+1−1
@@ -10,7 +10,7 @@ import Prelude.Compat
10import Control.Lens ((^.))
10import Control.Lens ((^.))
11import Data.Aeson (Value, ToJSON(..), ToJSONKey(..))
11import Data.Aeson (Value, ToJSON(..), ToJSONKey(..))
12import Data.Aeson.Types (toJSONKeyText)
12import Data.Aeson.Types (toJSONKeyText)
13−import Data.Aeson.QQ
13+import Data.Aeson.QQ.Simple
14import Data.Char
14import Data.Char
15import qualified Data.HashMap.Strict.InsOrd as InsOrdHashMap
15import qualified Data.HashMap.Strict.InsOrd as InsOrdHashMap
16import Data.Proxy
16import Data.Proxy
test/Data/SwaggerSpec.hs+1−1
@@ -10,7 +10,7 @@ import Prelude.Compat
10import Control.Lens
10import Control.Lens
11
11
12import Data.Aeson
12import Data.Aeson
13−import Data.Aeson.QQ
13+import Data.Aeson.QQ.Simple
14import Data.HashMap.Strict (HashMap)
14import Data.HashMap.Strict (HashMap)
15import qualified Data.Set as Set
15import qualified Data.Set as Set
16import Data.Text (Text)
16import Data.Text (Text)