From 48f90f6dfe037310f315c0061dd0ddd1eb3178de Mon Sep 17 00:00:00 2001 From: Takahiro HIMURA Date: Sat, 25 Oct 2014 17:35:25 +0900 Subject: [PATCH] Fix the error message parser and add TwitterUnknownErrorResponse to TwitterError. The Twitter documentation says that the error response looks like this: {"errors":[{"message":"Sorry, that page does not exist","code":34}]} However, Twitter occasionally responds error responses, formatted as an undocumented form, such as: {"errors":"...."} --- Web/Twitter/Conduit/Base.hs | 4 +++- Web/Twitter/Conduit/Response.hs | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Web/Twitter/Conduit/Base.hs b/Web/Twitter/Conduit/Base.hs index a85b117..4851944 100644 --- a/Web/Twitter/Conduit/Base.hs +++ b/Web/Twitter/Conduit/Base.hs @@ -116,10 +116,12 @@ checkResponse :: Response Value -> Either TwitterError Value checkResponse Response{..} = case responseBody ^? key "errors" of - Just errs -> + Just errs@(Array _) -> case fromJSON errs of Success errList -> Left $ TwitterErrorResponse responseStatus responseHeaders errList Error msg -> Left $ FromJSONError msg + Just err -> + Left $ TwitterUnknownErrorResponse responseStatus responseHeaders err Nothing -> if sci < 200 || sci > 400 then Left $ TwitterStatusError responseStatus responseHeaders responseBody diff --git a/Web/Twitter/Conduit/Response.hs b/Web/Twitter/Conduit/Response.hs index f047d00..ec6fddc 100644 --- a/Web/Twitter/Conduit/Response.hs +++ b/Web/Twitter/Conduit/Response.hs @@ -28,6 +28,7 @@ data Response responseType = Response data TwitterError = FromJSONError String | TwitterErrorResponse Status ResponseHeaders [TwitterErrorMessage] + | TwitterUnknownErrorResponse Status ResponseHeaders Value | TwitterStatusError Status ResponseHeaders Value deriving (Show, Typeable, Eq)