@@ -8,13 +8,12 @@ module TestTypes ( TestRequest (..)
8
8
, versionKey ) where
9
9
10
10
import Data.Aeson
11
- import Data.Aeson.Types (Parser )
12
11
import Data.Maybe (catMaybes )
13
12
import Data.Text (Text )
14
13
import Data.Attoparsec.Number (Number )
15
14
import Data.HashMap.Strict (size )
16
- import Control.Applicative ((<$>) , (<*>) , (<|>) , (*>) , pure , empty )
17
- import Control.Monad (when )
15
+ import Control.Applicative ((<$>) , (<*>) , (<|>) , pure , empty )
16
+ import Control.Monad (when , guard )
18
17
19
18
data TestRpcError = TestRpcError { errCode :: Int
20
19
, errMsg :: Text
@@ -42,16 +41,13 @@ data TestResponse = TestResponse { rspId :: TestId
42
41
deriving (Eq , Show )
43
42
44
43
instance FromJSON TestResponse where
45
- parseJSON (Object r ) = failIf (size r /= 3 ) *> checkVersion *>
46
- ( TestResponse <$>
47
- r .: " id " <*>
48
- (( Left <$> r .: " error " ) <|> ( Right <$> r .: " result " )))
49
- where checkVersion = r .: versionKey >>= failIf . ( /= jsonRpcVersion )
44
+ parseJSON (Object obj ) = do
45
+ guard (size obj == 3 )
46
+ guard . (jsonRpcVersion == ) =<< obj .: versionKey
47
+ TestResponse <$> obj .: " id " <*>
48
+ (( Left <$> obj .: " error " ) <|> ( Right <$> obj .: " result " ) )
50
49
parseJSON _ = empty
51
50
52
- failIf :: Bool -> Parser ()
53
- failIf b = if b then empty else pure ()
54
-
55
51
data TestId = IdString Text | IdNumber Number | IdNull
56
52
deriving (Eq , Show )
57
53
0 commit comments