git.iko.soy/typeable/servant
on master help sign in
Fixes for ServantErr in servant-client
1447221Julian K. Arni
servant-client/src/Servant/Client.hs−2
@@ -37,8 +37,6 @@ import Network.HTTP.Media
37import qualified Network.HTTP.Types as H
37import qualified Network.HTTP.Types as H
38import qualified Network.HTTP.Types.Header as HTTP
38import qualified Network.HTTP.Types.Header as HTTP
39import Servant.API
39import Servant.API
40−import Servant.API.ResponseHeaders
41−import Servant.API.ContentTypes
42import Servant.Common.BaseUrl
40import Servant.Common.BaseUrl
43import Servant.Common.Req
41import Servant.Common.Req
44
42
servant-client/test/Servant/ClientSpec.hs+6−7
@@ -108,15 +108,14 @@ server = serve api (
108 :<|> return
108 :<|> return
109 :<|> (\ name -> case name of
109 :<|> (\ name -> case name of
110 Just "alice" -> return alice
110 Just "alice" -> return alice
111− Just name -> left (400, name ++ " not found")
111+ Just name -> left $ ServantErr 400 (name ++ " not found") "" []
112−
113− Nothing -> left (400, "missing parameter"))
112+ Nothing -> left $ ServantErr 400 "missing parameter" "" [])
114 :<|> (\ names -> return (zipWith Person names [0..]))
113 :<|> (\ names -> return (zipWith Person names [0..]))
115 :<|> return
114 :<|> return
116 :<|> (\ name -> case name of
115 :<|> (\ name -> case name of
117 Just "alice" -> return alice
116 Just "alice" -> return alice
118− Just name -> left (400, name ++ " not found")
117+ Just name -> left $ ServantErr 400 (name ++ " not found") "" []
119− Nothing -> left (400, "missing parameter"))
118+ Nothing -> left $ ServantErr 400 "missing parameter" "" [])
120 :<|> (\ names -> return (zipWith Person names [0..]))
119 :<|> (\ names -> return (zipWith Person names [0..]))
121 :<|> return
120 :<|> return
122 :<|> (\ _request respond -> respond $ responseLBS ok200 [] "rawSuccess")
121 :<|> (\ _request respond -> respond $ responseLBS ok200 [] "rawSuccess")
@@ -262,7 +261,7 @@ spec = do
262 let test :: (WrappedApi, String) -> Spec
261 let test :: (WrappedApi, String) -> Spec
263 test (WrappedApi api, desc) =
262 test (WrappedApi api, desc) =
264 it desc $
263 it desc $
265− withWaiDaemon (return (serve api (left (500, "error message")))) $
264+ withWaiDaemon (return (serve api (left $ ServantErr 500 "error message" "" []))) $
266 \ host -> do
265 \ host -> do
267 let getResponse :: BaseUrl -> EitherT ServantError IO ()
266 let getResponse :: BaseUrl -> EitherT ServantError IO ()
268 getResponse = client api
267 getResponse = client api
@@ -308,7 +307,7 @@ spec = do
308 _ -> fail $ "expected InvalidContentTypeHeader, but got " <> show res
307 _ -> fail $ "expected InvalidContentTypeHeader, but got " <> show res
309
308
310data WrappedApi where
309data WrappedApi where
311− WrappedApi :: (HasServer (Canonicalize api), Server api ~ EitherT (Int, String) IO a,
310+ WrappedApi :: (HasServer (Canonicalize api), Server api ~ EitherT ServantErr IO a,
312 HasClient (Canonicalize api), Client api ~ (BaseUrl -> EitherT ServantError IO ())) =>
311 HasClient (Canonicalize api), Client api ~ (BaseUrl -> EitherT ServantError IO ())) =>
313 Proxy api -> WrappedApi
312 Proxy api -> WrappedApi
314
313
servant/src/Servant/API.hs+9−7
@@ -1,5 +1,5 @@
1−{-# LANGUAGE TypeFamilies #-}
1+{-# LANGUAGE TypeFamilies #-}
2−{-# LANGUAGE TypeOperators #-}
2+{-# LANGUAGE TypeOperators #-}
3{-# LANGUAGE UndecidableInstances #-}
3{-# LANGUAGE UndecidableInstances #-}
4module Servant.API (
4module Servant.API (
5
5
@@ -61,14 +61,14 @@ module Servant.API (
61import Data.Proxy (Proxy (..))
61import Data.Proxy (Proxy (..))
62import Servant.API.Alternative ((:<|>) (..))
62import Servant.API.Alternative ((:<|>) (..))
63import Servant.API.Capture (Capture)
63import Servant.API.Capture (Capture)
64−import Servant.API.ContentTypes (Accept(..), FormUrlEncoded,
64+import Servant.API.ContentTypes (Accept (..), FormUrlEncoded,
65 FromFormUrlEncoded (..), JSON,
65 FromFormUrlEncoded (..), JSON,
66 MimeRender (..),
66 MimeRender (..),
67 MimeUnrender (..), OctetStream,
67 MimeUnrender (..), OctetStream,
68 PlainText, ToFormUrlEncoded (..))
68 PlainText, ToFormUrlEncoded (..))
69import Servant.API.Delete (Delete)
69import Servant.API.Delete (Delete)
70import Servant.API.Get (Get)
70import Servant.API.Get (Get)
71−import Servant.API.Header (Header(..))
71+import Servant.API.Header (Header (..))
72import Servant.API.MatrixParam (MatrixFlag, MatrixParam,
72import Servant.API.MatrixParam (MatrixFlag, MatrixParam,
73 MatrixParams)
73 MatrixParams)
74import Servant.API.Patch (Patch)
74import Servant.API.Patch (Patch)
@@ -78,9 +78,11 @@ import Servant.API.QueryParam (QueryFlag, QueryParam,
78 QueryParams)
78 QueryParams)
79import Servant.API.Raw (Raw)
79import Servant.API.Raw (Raw)
80import Servant.API.ReqBody (ReqBody)
80import Servant.API.ReqBody (ReqBody)
81−import Servant.API.ResponseHeaders (Headers, getHeaders,
81+import Servant.API.ResponseHeaders (AddHeader (addHeader),
82+ BuildHeadersTo (buildHeadersTo),
83+ GetHeaders (getHeaders),
84+ HList (..), Headers (..),
82− getHeadersHList, getResponse,
85+ getHeadersHList, getResponse)
83− buildHeadersTo, addHeader)
84import Servant.API.Sub ((:>))
86import Servant.API.Sub ((:>))
85import Servant.Common.Text (FromText (..), ToText (..))
87import Servant.Common.Text (FromText (..), ToText (..))
86import Servant.Utils.Links (HasLink (..), IsElem, IsElem',
88import Servant.Utils.Links (HasLink (..), IsElem, IsElem',