@@ -48,6 +48,8 @@ import Data.Foldable
48
48
(toList )
49
49
import Data.Functor.Alt
50
50
(Alt (.. ))
51
+ import Data.Maybe
52
+ (fromMaybe )
51
53
import Data.Proxy
52
54
(Proxy (.. ))
53
55
import qualified Data.Sequence as Seq
@@ -70,7 +72,7 @@ import qualified Language.Javascript.JSaddle.Types as JSaddle
70
72
import Network.HTTP.Media
71
73
(renderHeader )
72
74
import Network.HTTP.Types
73
- (ResponseHeaders , http11 , mkStatus , renderQuery , statusCode )
75
+ (ResponseHeaders , Status , http11 , mkStatus , renderQuery , statusCode )
74
76
import System.IO
75
77
(hPutStrLn , stderr )
76
78
@@ -120,9 +122,15 @@ instance Alt ClientM where
120
122
121
123
instance RunClient ClientM where
122
124
throwClientError = throwError
125
+ # if MIN_VERSION_servant_client_core (0 ,18 ,1 )
126
+ runRequestAcceptStatus acceptStatuses r = do
127
+ d <- ClientM askDOM
128
+ performRequest (fromMaybe [] acceptStatuses) d r
129
+ # else
123
130
runRequest r = do
124
131
d <- ClientM askDOM
125
- performRequest d r
132
+ performRequest [] d r
133
+ # endif
126
134
127
135
runClientM :: ClientM a -> ClientEnv -> DOM (Either ClientError a )
128
136
runClientM cm env = runExceptT $ flip runReaderT env $ fromClientM cm
@@ -156,16 +164,16 @@ getDefaultBaseUrl = do
156
164
157
165
pure (BaseUrl protocol hostname port " " )
158
166
159
- performRequest :: DOMContext -> Request -> ClientM Response
160
- performRequest domc req = do
167
+ performRequest :: [ Status ] -> DOMContext -> Request -> ClientM Response
168
+ performRequest acceptStatuses domc req = do
161
169
xhr <- JS. newXMLHttpRequest `runDOM` domc
162
170
burl <- asks baseUrl
163
171
fixUp <- asks fixUpXhr
164
172
performXhr xhr burl req fixUp `runDOM` domc
165
173
resp <- toResponse domc xhr
166
174
167
175
let status = statusCode (responseStatusCode resp)
168
- unless (status >= 200 && status < 300 ) $
176
+ unless (( status >= 200 && status < 300 ) || status `elem` (statusCode <$> acceptStatuses) ) $
169
177
throwError $ mkFailureResponse burl req resp
170
178
171
179
pure resp
0 commit comments