on master help sign in
Added instances for a bunch of servant combinators
commit9b67165579bb59739bfff34b38486f02cea4f854 authorSamuel Schlesinger <samuel@simspace.com> dateMon 14 Sep 2020, 11:56 (6 years ago) parent49d5d96
3 files changed+117−8
roboservant.cabal+5−3 src/Roboservant/StateMachine.hs+44−5 stack.yaml.lock+68
roboservant.cabal+5−3
@@ -1,13 +1,13 @@
11cabal-version: 1.12
22
3−-- This file has been generated from package.yaml by hpack version 0.33.0.
3+-- This file has been generated from package.yaml by hpack version 0.31.2.
44--
55-- see: https://github.com/sol/hpack
66--
7−-- hash: 67cc7a07268595f2ecee28556db571d2c4031ecc011ebc7d42e54b1a242022a0
7+-- hash: 179b83962de30f5bcf8b13d2f0648b301a753367094171f21a68e60b5cb4e4d5
88
99name: roboservant
10−version: 0.1.0.0
10+version: 0.1.0.2
1111synopsis: Automatic session-aware servant testing
1212description: Please see the README on GitHub at <https://github.com/mwotton/roboservant#readme>
1313category: Web
@@ -41,6 +41,7 @@ library
4141 , bytestring
4242 , containers
4343 , hedgehog
44+ , mtl
4445 , servant >=0.17
4546 , servant-client >=0.17
4647 , servant-flatten
@@ -64,6 +65,7 @@ test-suite roboservant-test
6465 , bytestring
6566 , containers
6667 , hedgehog
68+ , mtl
6769 , roboservant
6870 , servant >=0.17
6971 , servant-client >=0.17
src/Roboservant/StateMachine.hs+44−5
@@ -38,6 +38,7 @@ import Hedgehog
3838import qualified Hedgehog.Gen as Gen
3939import qualified Hedgehog.Range as Range
4040import Servant
41+import Servant.API.Modifiers
4142import Type.Reflection (SomeTypeRep)
4243
4344data State v
@@ -131,20 +132,58 @@ instance
131132 toReifiedEndpoint endpoint (Proxy @endpoint)
132133
133134instance
134− (Typeable requestType, ToReifiedEndpoint endpoint) =>
135− ToReifiedEndpoint (Capture name requestType :> endpoint)
135+ (ToReifiedEndpoint endpoint) =>
136+ ToReifiedEndpoint (Description s :> endpoint)
137+ where
138+ toReifiedEndpoint endpoint _ =
139+ toReifiedEndpoint endpoint (Proxy @endpoint)
140+
141+instance
142+ (ToReifiedEndpoint endpoint) =>
143+ ToReifiedEndpoint (Summary s :> endpoint)
136144 where
137145 toReifiedEndpoint endpoint _ =
138146 toReifiedEndpoint endpoint (Proxy @endpoint)
139− & \(args, result, typeRepMap) -> (typeRep (Proxy @requestType) : args, result, typeRepMap)
140147
141148instance
142149 (Typeable requestType, ToReifiedEndpoint endpoint) =>
143− ToReifiedEndpoint (ReqBody contentTypes requestType :> endpoint)
150+ ToReifiedEndpoint (QueryFlag name :> endpoint)
151+ where
152+ toReifiedEndpoint endpoint _ =
153+ toReifiedEndpoint endpoint (Proxy @endpoint)
154+ & \(args, result, typeRepMap) -> (typeRep (Proxy @Bool) : args, result, typeRepMap)
155+
156+instance
157+ (Typeable (If (FoldRequired mods) paramType (Maybe paramType)), ToReifiedEndpoint endpoint, SBoolI (FoldRequired mods)) =>
158+ ToReifiedEndpoint (QueryParam' mods name paramType :> endpoint)
159+ where
160+ toReifiedEndpoint endpoint _ =
161+ toReifiedEndpoint endpoint (Proxy @endpoint)
162+ & \(args, result, typeRepMap) -> (typeRep (Proxy @(If (FoldRequired mods) paramType (Maybe paramType))) : args, result, typeRepMap)
163+
164+instance
165+ (Typeable (If (FoldRequired mods) headerType (Maybe headerType)), ToReifiedEndpoint endpoint, SBoolI (FoldRequired mods)) =>
166+ ToReifiedEndpoint (Header' mods headerName headerType :> endpoint)
167+ where
168+ toReifiedEndpoint endpoint _ =
169+ toReifiedEndpoint endpoint (Proxy @endpoint)
170+ & \(args, result, typeRepMap) -> (typeRep (Proxy @(If (FoldRequired mods) headerType (Maybe headerType))) : args, result, typeRepMap)
171+
172+instance
173+ (Typeable captureType, ToReifiedEndpoint endpoint) =>
174+ ToReifiedEndpoint (Capture' mods name captureType :> endpoint)
175+ where
176+ toReifiedEndpoint endpoint _ =
177+ toReifiedEndpoint endpoint (Proxy @endpoint)
178+ & \(args, result, typeRepMap) -> (typeRep (Proxy @captureType) : args, result, typeRepMap)
179+
180+instance
181+ (Typeable (If (FoldLenient mods) (Either String requestType) requestType), ToReifiedEndpoint endpoint, SBoolI (FoldLenient mods)) =>
182+ ToReifiedEndpoint (ReqBody' mods contentTypes requestType :> endpoint)
144183 where
145184 toReifiedEndpoint endpoint _ =
146185 toReifiedEndpoint endpoint (Proxy @endpoint)
147− & \(args, result, typeRepMap) -> (typeRep (Proxy @requestType) : args, result, typeRepMap)
186+ & \(args, result, typeRepMap) -> (typeRep (Proxy @(If (FoldLenient mods) (Either String requestType) requestType)) : args, result, typeRepMap)
148187
149188newtype ApiOffset = ApiOffset Int
150189 deriving (Eq, Show)
stack.yaml.locknew file+68
@@ -0,0 +1,68 @@
1+# This file was autogenerated by Stack.
2+# You should not edit this file by hand.
3+# For more information, please see the documentation at:
4+# https://docs.haskellstack.org/en/stable/lock_files
5+
6+packages:
7+- completed:
8+ hackage: servant-flatten-0.2@sha256:276896f7c5cdec5b8f8493f6205fded0cc602d050b58fdb09a6d7c85c3bb0837,1234
9+ pantry-tree:
10+ size: 325
11+ sha256: 04f12c7bef2c3f9a25d94eb9489752ed498db8e243069fe95838dbb51df1dcb3
12+ original:
13+ hackage: servant-flatten-0.2@sha256:276896f7c5cdec5b8f8493f6205fded0cc602d050b58fdb09a6d7c85c3bb0837,1234
14+- completed:
15+ hackage: quickcheck-state-machine-0.7.0@sha256:4fc4467380e35b88aab72c278856aacebbf95688059d8ad70eb82fe048df476b,4958
16+ pantry-tree:
17+ size: 3022
18+ sha256: 045794fff983e385560b321ff5576f6ec5c2821748c3042053f72daaca7beba8
19+ original:
20+ hackage: quickcheck-state-machine-0.7.0@sha256:4fc4467380e35b88aab72c278856aacebbf95688059d8ad70eb82fe048df476b,4958
21+- completed:
22+ hackage: markov-chain-usage-model-0.0.0@sha256:1afa95faeb9213c4d960a669190078b41b89169462b8edd910472980671ba8c0,2112
23+ pantry-tree:
24+ size: 432
25+ sha256: 6871bd9281acf589296d0998a3d62892b036040ab10e74e8a0f356f68c194f4f
26+ original:
27+ hackage: markov-chain-usage-model-0.0.0@sha256:1afa95faeb9213c4d960a669190078b41b89169462b8edd910472980671ba8c0,2112
28+- completed:
29+ hackage: servant-0.17@sha256:e78734cb6b75c5d1e52e8f5e16bc3f557154a580bbde4932a7e1a6a90da7eb04,5029
30+ pantry-tree:
31+ size: 2392
32+ sha256: 36561a606c35393386aa48b7cc2407fa4013aba62a19d69f004ec9c2010209aa
33+ original:
34+ hackage: servant-0.17
35+- completed:
36+ hackage: servant-client-0.17@sha256:433be65dd541b9a387eaaced22715a028ea846d72d141419c40ddf6fd5e3409b,4573
37+ pantry-tree:
38+ size: 1299
39+ sha256: 1f8f57c6ce96ed4f1316460aaab48f3765b2addbf1e2cd363c72bbc41fdcf907
40+ original:
41+ hackage: servant-client-0.17
42+- completed:
43+ hackage: servant-client-core-0.17@sha256:d64622d68d8a6934abc821171582d601a99ef0277f3d8b8ba9b483c2617e3df6,3577
44+ pantry-tree:
45+ size: 1444
46+ sha256: 89461980a2562d9943f4bb84077d8c4a8c5bac76c8c16577c9344e404b2e9fb1
47+ original:
48+ hackage: servant-client-core-0.17
49+- completed:
50+ hackage: servant-server-0.17@sha256:1a5adf564f0b703535eb733f249b282ef2ca7b587a303c357b549fb88e7a6dcd,5388
51+ pantry-tree:
52+ size: 2460
53+ sha256: ea65ba54acb4362efedbfa7db616a51023579a6c83f18ab6d2ea6a84dea56021
54+ original:
55+ hackage: servant-server-0.17
56+- completed:
57+ hackage: constrained-dynamic-0.1.0.0@sha256:3516d3b95c8180f8904671aa982af2fae55a185b18642192f5c8f50657108e82,1207
58+ pantry-tree:
59+ size: 576
60+ sha256: 93e4777d88e75cb1b3efef47654880304ce6fd2af12e31b0c7bd279f95abb449
61+ original:
62+ hackage: constrained-dynamic-0.1.0.0@sha256:3516d3b95c8180f8904671aa982af2fae55a185b18642192f5c8f50657108e82,1207
63+snapshots:
64+- completed:
65+ size: 496112
66+ url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/15/15.yaml
67+ sha256: 86169722ad0056ffc9eacc157ef80ee21d7024f92c0d2961c89ccf432db230a3
68+ original: lts-15.15