This commit is contained in:
Mark Wotton 2020-12-30 13:03:00 -05:00
parent 3deefd6139
commit 75ec6d3b0b
7 changed files with 27 additions and 13 deletions

View File

@ -1,3 +1,4 @@
name: roboservant name: roboservant
version: 0.1.0.2 version: 0.1.0.2
github: "mwotton/roboservant" github: "mwotton/roboservant"
@ -62,5 +63,5 @@ tests:
dependencies: dependencies:
- roboservant - roboservant
- hspec - hspec
build-depends: base, markdown-unlit # build-depends: base, markdown-unlit
ghc-options: -pgmL markdown-unlit ghc-options: -pgmL markdown-unlit

View File

@ -4,7 +4,7 @@ cabal-version: 1.12
-- --
-- see: https://github.com/sol/hpack -- see: https://github.com/sol/hpack
-- --
-- hash: 8de468df6e784f3723af9155bba9da9f43659b7d4e8e465fdac26eafcb0d4306 -- hash: 1a4c7ba230ea0cde1208ffe68cfb5433046265dea94f292c81d73644caa87cd6
name: roboservant name: roboservant
version: 0.1.0.2 version: 0.1.0.2
@ -101,6 +101,7 @@ test-suite roboservant-test
Breakdown Breakdown
Foo Foo
Headers Headers
Nested
Post Post
Product Product
Seeded Seeded

View File

@ -9,6 +9,7 @@
{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE PolyKinds #-}
module Roboservant.Direct module Roboservant.Direct
( fuzz, ( fuzz,

View File

@ -19,9 +19,9 @@ class FlattenServer api where
flattenServer :: Server api -> Bundled (Endpoints api) flattenServer :: Server api -> Bundled (Endpoints api)
instance instance
( Endpoints (endpoint :<|> api) ~ (endpoint ': Endpoints api), ( Endpoints (endpoint :<|> api) ~ (endpoint ': Endpoints api)
Server (endpoint :<|> api) ~ (Server endpoint :<|> Server api), -- , Server (endpoint :<|> api) ~ (Server endpoint :<|> Server api)
FlattenServer api , FlattenServer api
) => ) =>
FlattenServer (endpoint :<|> api) FlattenServer (endpoint :<|> api)
where where
@ -36,8 +36,9 @@ instance
flattenServer server = server `AnEndpoint` NoEndpoints flattenServer server = server `AnEndpoint` NoEndpoints
instance instance
( HasServer (Verb method statusCode contentTypes responseType) '[], ( Endpoints (Verb method statusCode contentTypes responseType) ~ '[Verb method statusCode contentTypes responseType],
Endpoints (Verb method statusCode contentTypes responseType) ~ '[Verb method statusCode contentTypes responseType] HasServer (Verb method statusCode contentTypes responseType) '[]
) => ) =>
FlattenServer (Verb method statusCode contentTypes responseType) FlattenServer (Verb method statusCode contentTypes responseType)
where where

View File

@ -1,5 +1,6 @@
# nb: 16.8 doesn't work because the version of servant is too old to have FoldLenient', fixme. resolver: lts-16.27
resolver: lts-16.16 # bit faster on ReifiedApi stuff which is unfortunately terribly slow.
compiler: ghc-8.10.3
packages: packages:
- . - .

View File

@ -69,7 +69,7 @@ packages:
hackage: servant-server-0.18.2 hackage: servant-server-0.18.2
snapshots: snapshots:
- completed: - completed:
size: 532380 size: 533252
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/16.yaml url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/27.yaml
sha256: d6b004b095fe2a0b8b14fbc30014ee97e58843b9c9362ddb9244273dda62649e sha256: c2aaae52beeacf6a5727c1010f50e89d03869abfab6d2c2658ade9da8ed50c73
original: lts-16.16 original: lts-16.27

View File

@ -13,6 +13,7 @@ import qualified Headers
import qualified Post import qualified Post
import qualified Product import qualified Product
import qualified Breakdown import qualified Breakdown
import qualified Nested
import Test.Hspec.Core.Spec(ResultStatus(Failure,Success),resultStatus,itemExample,FailureReason(Reason),mapSpecItem_) import Test.Hspec.Core.Spec(ResultStatus(Failure,Success),resultStatus,itemExample,FailureReason(Reason),mapSpecItem_)
import Data.Dynamic(toDyn) import Data.Dynamic(toDyn)
@ -91,6 +92,14 @@ spec = do
RS.fuzz @Breakdown.SumApi Breakdown.sumServer defaultConfig noCheck RS.fuzz @Breakdown.SumApi Breakdown.sumServer defaultConfig noCheck
>>= (`shouldSatisfy` serverFailure) >>= (`shouldSatisfy` serverFailure)
describe "flattening" $ do
-- | we don't actually do much here, this is just here to document the appropriate response
-- if you get a type error with a nested api.
it "can handle nested apis" $ do
RS.fuzz @(Nested.FlatApi) Nested.server defaultConfig { RS.coverageThreshold = 0.99 } noCheck
>>= (`shouldSatisfy` isNothing)
serverFailure :: Maybe RS.Report -> Bool serverFailure :: Maybe RS.Report -> Bool
serverFailure = \case serverFailure = \case