X-Git-Url: http://www.average.org/gitweb/?p=pdns-pipe-nmc.git;a=blobdiff_plain;f=Data%2FJsonRpc.hs;h=79c21c349dcde14e791275a53bd5649d196ea07c;hp=b1879bccef89f57638ad44a122ad2d93f1c892c1;hb=017b4bfc02d626ff3c22cf0873afb76153aa055c;hpb=dc93b41b2b38777c077e7327fe019e9a10acc8b9 diff --git a/Data/JsonRpc.hs b/Data/JsonRpc.hs index b1879bc..79c21c3 100644 --- a/Data/JsonRpc.hs +++ b/Data/JsonRpc.hs @@ -1,17 +1,30 @@ -module JsonRpc ( JsonRpcRequest(..) - , JsonRpcNotification(..) - , JsonRpcResponse(..) +{-# LANGUAGE OverloadedStrings #-} + +module JsonRpc ( JsonRpcVersion(JsonRpcV1 ,JsonRpcV2) + , JsonRpcRequest + , JsonRpcNotification + , JsonRpcResponse ) where -import Data.ByteString (ByteString) +import Data.ByteString.Lazy (ByteString) import Control.Applicative ((<$>), (<*>), empty) import Data.Aeson -data JsonRpcRequest = JsonRpcRequest { jrpcReqMethod :: ByteString - , jrpcReqParams :: [ByteString] - , jrpcReqId :: ByteString - } deriving (Show) +data JsonRpcVersion = JsonRpcV1 | JsonRpcV2 + deriving (Show) +data JsonRpcRequest = JsonRpcRequest { jrpcVersion :: JsonRpcVersion + , jrpcReqMethod :: ByteString + , jrpcReqParams :: [ByteString] + , jrpcReqId :: ByteString + } deriving (Show) +instance ToJSON JsonRpcRequest where + toJSON (JsonRpcRequest version method params id) = + let l = [ "method" .= method , "params" .= params , "id" .= id ] + in case version of + JsonRpcV1 -> object l + JsonRpcV2 -> object $ ("jsonrpc" .= toJSON ("2.0" :: ByteString)):l + data JsonRpcNotification = JsonRpcNotification { jrpcNtfMethod :: ByteString , jrpcNtfParams :: [ByteString] } deriving (Show) @@ -25,5 +38,3 @@ data JsonRpcResponse = JsonRpcResponse { jrpcRspResult :: Maybe Value , jrpcRspError :: JsonRpcError , jrpcRspId :: ByteString } deriving (Show) - -