From d829fa5ca23a2a19cd4db7018404f1f25d6f8a4e Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Sun, 9 Jul 2023 05:49:09 +0200 Subject: [haskell] Simplify API Message JSON decoding --- haskell/src/SpaceTraders/APIClient/Client.hs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'haskell') diff --git a/haskell/src/SpaceTraders/APIClient/Client.hs b/haskell/src/SpaceTraders/APIClient/Client.hs index 4e9e9d1..00cab11 100644 --- a/haskell/src/SpaceTraders/APIClient/Client.hs +++ b/haskell/src/SpaceTraders/APIClient/Client.hs @@ -22,8 +22,8 @@ import Network.HTTP.Types.Status import SpaceTraders.APIClient.Errors -data APIMessage = APIMessage { data_ :: Value } deriving (Show) -instance FromJSON APIMessage where +data FromJSON a => APIMessage a = APIMessage { data_ :: a } deriving (Show) +instance FromJSON a => FromJSON (APIMessage a) where parseJSON (Object o) = APIMessage <$> o .: "data" parseJSON _ = mzero @@ -49,9 +49,7 @@ send request = do if status >= 200 && status <= 299 then case eitherDecode body of Left e -> return . Left $ APIError (-1000) Null (T.pack $ concat ["Error decoding JSON APIMessage: ", e]) - Right r -> case fromJSONValue (data_ r) of - Left e -> return . Left $ APIError (-1001) Null (T.pack $ concat ["Error decoding JSON message contents: ", e]) - Right m -> return $ Right m + Right r -> return . Right $ data_ r else case eitherDecode body of Left e -> return . Left $ APIError (-status) Null (T.pack $ concat ["Error decoding JSON APIError: ", e, ". Got HTTP body: ", show body]) Right e -> case apiErrorCode e of -- cgit v1.2.3