Skip to content

Commit 17b5563

Browse files
committed
servant-client-ghcjs: Fix performRequest function
Fix performRequest function to be compatible with the latest servant-client-core RunClient typeclass
1 parent 3158809 commit 17b5563

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

changelog.d/1529

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
synopsis: Fix performRequest in servant-client-ghcjs
2+
prs: #1529
3+
4+
description: {
5+
6+
performRequest function in servant-client-ghcjs was not compatible with the
7+
latest RunClient typeclass. Added the acceptStatus parameter and fixed the
8+
functionality to match what servant-client provides.
9+
10+
}

servant-client-ghcjs/src/Servant/Client/Internal/XhrClient.hs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ instance Exception StreamingNotSupportedException where
120120
displayException _ = "streamingRequest: streaming is not supported!"
121121

122122
instance RunClient ClientM where
123-
runRequest = performRequest
123+
runRequestAcceptStatus = performRequest
124124
throwClientError = throwError
125125

126126
runClientMOrigin :: ClientM a -> ClientEnv -> IO (Either ClientError a)
@@ -152,15 +152,18 @@ runClientM m = do
152152

153153
runClientMOrigin m (ClientEnv (BaseUrl protocol hostname port ""))
154154

155-
performRequest :: Request -> ClientM Response
156-
performRequest req = do
155+
performRequest :: Maybe [Status] -> Request -> ClientM Response
156+
performRequest acceptStatus req = do
157157
xhr <- liftIO initXhr
158158
burl <- asks baseUrl
159159
liftIO $ performXhr xhr burl req
160160
resp <- toResponse xhr
161161

162-
let status = statusCode (responseStatusCode resp)
163-
unless (status >= 200 && status < 300) $ do
162+
let status = responseStatusCode resp
163+
goodStatus = case acceptStatus of
164+
Nothing -> statusIsSuccessful status
165+
Just good -> status `elem` good
166+
unless goodStatus $ do
164167
let f b = (burl, BL.toStrict $ toLazyByteString b)
165168
throwError $ FailureResponse (bimap (const ()) f req) resp
166169

0 commit comments

Comments
 (0)