1 {-# LANGUAGE OverloadedStrings #-}
3 module JsonRpc ( JsonRpcVersion(JsonRpcV1 ,JsonRpcV2)
9 import Data.ByteString.Lazy (ByteString)
10 import Control.Applicative ((<$>), (<*>), empty)
13 data JsonRpcVersion = JsonRpcV1 | JsonRpcV2
16 data JsonRpcRequest = JsonRpcRequest { jrpcVersion :: JsonRpcVersion
17 , jrpcReqMethod :: ByteString
18 , jrpcReqParams :: [ByteString]
19 , jrpcReqId :: ByteString
21 instance ToJSON JsonRpcRequest where
22 toJSON (JsonRpcRequest version method params id) =
23 let l = [ "method" .= method , "params" .= params , "id" .= id ]
26 JsonRpcV2 -> object $ ("jsonrpc" .= toJSON ("2.0" :: ByteString)):l
28 data JsonRpcNotification = JsonRpcNotification { jrpcNtfMethod :: ByteString
29 , jrpcNtfParams :: [ByteString]
32 data JsonRpcError = JsonRpcError { jrpcErrCode :: Int
33 , jrpcErrMessage :: ByteString
34 , jrpcErrData :: Maybe Value
37 data JsonRpcResponse = JsonRpcResponse { jrpcRspResult :: Maybe Value
38 , jrpcRspError :: JsonRpcError
39 , jrpcRspId :: ByteString