Skip to content

Commit 3f4fb73

Browse files
committed
Simplified parsing errors from JSON
1 parent 1a339cb commit 3f4fb73

File tree

1 file changed

+6
-9
lines changed

1 file changed

+6
-9
lines changed

tests/TestTypes.hs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,19 @@ import Data.Maybe (catMaybes)
1313
import Data.Text (Text)
1414
import Data.Attoparsec.Number (Number)
1515
import Data.HashMap.Strict (size)
16-
import Control.Applicative ((<$>), (<*>), (<|>), (<*), (*>), pure, empty)
16+
import Control.Applicative ((<$>), (<*>), (<|>), (*>), pure, empty)
17+
import Control.Monad (when)
1718

1819
data TestRpcError = TestRpcError { errCode :: Int
1920
, errMsg :: Text
2021
, errData :: Maybe Value}
2122
deriving (Eq, Show)
2223

2324
instance FromJSON TestRpcError where
24-
parseJSON (Object err) = (TestRpcError <$>
25-
err .: "code" <*>
26-
err .: "message" <*>
27-
err .:? "data") >>= checkKeys
28-
where checkKeys e = let checkSize s = failIf $ size err /= s
29-
in pure e <* checkSize (case errData e of
30-
Nothing -> 2
31-
Just _ -> 3)
25+
parseJSON (Object obj) = do
26+
d <- obj .:? "data"
27+
when (size obj /= maybe 2 (const 3) d) $ fail "Wrong number of keys"
28+
TestRpcError <$> obj .: "code" <*> obj .: "message" <*> pure d
3229
parseJSON _ = empty
3330

3431
data TestRequest = TestRequest Text (Maybe (Either Object Array)) (Maybe TestId)

0 commit comments

Comments
 (0)