From: Eugene Crosser Date: Mon, 24 Mar 2014 22:21:49 +0000 (+0400) Subject: wip JsonRpc response X-Git-Tag: 0.9.0.0~126 X-Git-Url: http://average.org/gitweb/?a=commitdiff_plain;h=b8fcca7aff6b55c000b4bd4b6da352b23780d0c8;p=pdns-pipe-nmc.git wip JsonRpc response --- diff --git a/Data/JsonRpc.hs b/Data/JsonRpc.hs index 79c21c3..9b3ff48 100644 --- a/Data/JsonRpc.hs +++ b/Data/JsonRpc.hs @@ -1,13 +1,16 @@ {-# LANGUAGE OverloadedStrings #-} -module JsonRpc ( JsonRpcVersion(JsonRpcV1 ,JsonRpcV2) +module JsonRpc ( JsonRpcVersion(JsonRpcV1, JsonRpcV2) , JsonRpcRequest , JsonRpcNotification + , JsonRpcError , JsonRpcResponse + , parseJsonRpc ) where import Data.ByteString.Lazy (ByteString) import Control.Applicative ((<$>), (<*>), empty) +import Data.Either import Data.Aeson data JsonRpcVersion = JsonRpcV1 | JsonRpcV2 @@ -20,14 +23,22 @@ data JsonRpcRequest = JsonRpcRequest { jrpcVersion :: JsonRpcVersion } deriving (Show) instance ToJSON JsonRpcRequest where toJSON (JsonRpcRequest version method params id) = - let l = [ "method" .= method , "params" .= params , "id" .= 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 + { jrpcNtfVersion :: JsonRpcVersion + , jrpcNtfMethod :: ByteString + , jrpcNtfParams :: [ByteString] + } deriving (Show) +instance ToJSON JsonRpcNotification where + toJSON (JsonRpcNotification version method params) = + let l = [ "method" .= method, "params" .= params ] in case version of JsonRpcV1 -> object l JsonRpcV2 -> object $ ("jsonrpc" .= toJSON ("2.0" :: ByteString)):l - -data JsonRpcNotification = JsonRpcNotification { jrpcNtfMethod :: ByteString - , jrpcNtfParams :: [ByteString] - } deriving (Show) data JsonRpcError = JsonRpcError { jrpcErrCode :: Int , jrpcErrMessage :: ByteString @@ -38,3 +49,6 @@ data JsonRpcResponse = JsonRpcResponse { jrpcRspResult :: Maybe Value , jrpcRspError :: JsonRpcError , jrpcRspId :: ByteString } deriving (Show) + +parseJsonRpc :: ByteString -> Either JsonRpcError JsonRpcResponse +parseJsonRpc _ = Left $ JsonRpcError (-1) "someerror" Nothing