From 1447221a1602450184b61bacb9c678140ddaa044 Mon Sep 17 00:00:00 2001 From: "Julian K. Arni" Date: Sun, 3 May 2015 01:05:37 +0200 Subject: [PATCH] Fixes for ServantErr in servant-client --- servant-client/src/Servant/Client.hs | 2 -- servant-client/test/Servant/ClientSpec.hs | 13 ++++++------- servant/src/Servant/API.hs | 16 +++++++++------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/servant-client/src/Servant/Client.hs b/servant-client/src/Servant/Client.hs index 60c578ac..39fe3f55 100644 --- a/servant-client/src/Servant/Client.hs +++ b/servant-client/src/Servant/Client.hs @@ -37,8 +37,6 @@ import Network.HTTP.Media import qualified Network.HTTP.Types as H import qualified Network.HTTP.Types.Header as HTTP import Servant.API -import Servant.API.ResponseHeaders -import Servant.API.ContentTypes import Servant.Common.BaseUrl import Servant.Common.Req diff --git a/servant-client/test/Servant/ClientSpec.hs b/servant-client/test/Servant/ClientSpec.hs index 4cd84df1..9794f4dd 100644 --- a/servant-client/test/Servant/ClientSpec.hs +++ b/servant-client/test/Servant/ClientSpec.hs @@ -108,15 +108,14 @@ server = serve api ( :<|> return :<|> (\ name -> case name of Just "alice" -> return alice - Just name -> left (400, name ++ " not found") - - Nothing -> left (400, "missing parameter")) + Just name -> left $ ServantErr 400 (name ++ " not found") "" [] + Nothing -> left $ ServantErr 400 "missing parameter" "" []) :<|> (\ names -> return (zipWith Person names [0..])) :<|> return :<|> (\ name -> case name of Just "alice" -> return alice - Just name -> left (400, name ++ " not found") - Nothing -> left (400, "missing parameter")) + Just name -> left $ ServantErr 400 (name ++ " not found") "" [] + Nothing -> left $ ServantErr 400 "missing parameter" "" []) :<|> (\ names -> return (zipWith Person names [0..])) :<|> return :<|> (\ _request respond -> respond $ responseLBS ok200 [] "rawSuccess") @@ -262,7 +261,7 @@ spec = do let test :: (WrappedApi, String) -> Spec test (WrappedApi api, desc) = it desc $ - withWaiDaemon (return (serve api (left (500, "error message")))) $ + withWaiDaemon (return (serve api (left $ ServantErr 500 "error message" "" []))) $ \ host -> do let getResponse :: BaseUrl -> EitherT ServantError IO () getResponse = client api @@ -308,7 +307,7 @@ spec = do _ -> fail $ "expected InvalidContentTypeHeader, but got " <> show res data WrappedApi where - WrappedApi :: (HasServer (Canonicalize api), Server api ~ EitherT (Int, String) IO a, + WrappedApi :: (HasServer (Canonicalize api), Server api ~ EitherT ServantErr IO a, HasClient (Canonicalize api), Client api ~ (BaseUrl -> EitherT ServantError IO ())) => Proxy api -> WrappedApi diff --git a/servant/src/Servant/API.hs b/servant/src/Servant/API.hs index 11a0fd27..6fb97a6c 100644 --- a/servant/src/Servant/API.hs +++ b/servant/src/Servant/API.hs @@ -1,5 +1,5 @@ -{-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-} module Servant.API ( @@ -61,14 +61,14 @@ module Servant.API ( import Data.Proxy (Proxy (..)) import Servant.API.Alternative ((:<|>) (..)) import Servant.API.Capture (Capture) -import Servant.API.ContentTypes (Accept(..), FormUrlEncoded, +import Servant.API.ContentTypes (Accept (..), FormUrlEncoded, FromFormUrlEncoded (..), JSON, MimeRender (..), MimeUnrender (..), OctetStream, PlainText, ToFormUrlEncoded (..)) import Servant.API.Delete (Delete) import Servant.API.Get (Get) -import Servant.API.Header (Header(..)) +import Servant.API.Header (Header (..)) import Servant.API.MatrixParam (MatrixFlag, MatrixParam, MatrixParams) import Servant.API.Patch (Patch) @@ -78,9 +78,11 @@ import Servant.API.QueryParam (QueryFlag, QueryParam, QueryParams) import Servant.API.Raw (Raw) import Servant.API.ReqBody (ReqBody) -import Servant.API.ResponseHeaders (Headers, getHeaders, - getHeadersHList, getResponse, - buildHeadersTo, addHeader) +import Servant.API.ResponseHeaders (AddHeader (addHeader), + BuildHeadersTo (buildHeadersTo), + GetHeaders (getHeaders), + HList (..), Headers (..), + getHeadersHList, getResponse) import Servant.API.Sub ((:>)) import Servant.Common.Text (FromText (..), ToText (..)) import Servant.Utils.Links (HasLink (..), IsElem, IsElem',