json-rpc-0.5.0.0: Fully-featured JSON-RPC 2.0 library

Safe HaskellNone
LanguageHaskell2010

Network.JsonRpc

Contents

Synopsis

Introduction

This JSON-RPC library is fully-compatible with JSON-RPC 2.0 and 1.0. It provides an interface that combines a JSON-RPC client and server. It can set and keep track of request ids to parse responses. There is support for sending and receiving notifications. You may use any underlying transport. Basic TCP client and server provided.

A JSON-RPC application using this interface is considered to be peer-to-peer, as it can send and receive all types of JSON-RPC message independent of whether it originated the connection.

Establish JSON-RPC context

type JsonRpcT = ReaderT Session Source

runJsonRpcT Source

Arguments

:: (MonadLoggerIO m, MonadBaseControl IO m, FromRequest q, ToJSON r) 
=> Ver

JSON-RPC version

-> Respond q m r

Respond to incoming requests

-> Sink Message m ()

Sink to send messages

-> Source m (Either Err Message)

Source of incoming messages

-> JsonRpcT m a

JSON-RPC action

-> m a

Output of action

Create JSON-RPC session around conduits from transport layer. When context exits session disappears.

Conduits for encoding/decoding

Communicate with remote party

sendRequest :: (MonadLoggerIO m, ToJSON q, ToRequest q, FromResponse r) => q -> JsonRpcT m (Either ErrorObj (Maybe r)) Source

Returns Right Nothing if could not parse response.

sendNotif :: (ToJSON no, ToNotif no, MonadLoggerIO m) => no -> JsonRpcT m () Source

Send notification. Will not block.

receiveNotif :: (MonadLoggerIO m, FromNotif n) => JsonRpcT m (Maybe (Either ErrorObj (Maybe n))) Source

Receive notifications from peer. Will not block. Returns Nothing if incoming channel is closed and empty. Result is Right Nothing if it failed to parse notification.

Dummies

dummyRespond :: MonadLoggerIO m => Respond () m () Source

Respond function for systems that do not reply to requests, as usual in clients.

dummySrv :: MonadLoggerIO m => JsonRpcT m () Source

Dummy action for servers not expecting clients to send notifications, which is true in most cases.

Transports

Client

jsonRpcTcpClient Source

Arguments

:: (MonadLoggerIO m, MonadBaseControl IO m, FromRequest q, ToJSON r) 
=> Ver

JSON-RPC version

-> ClientSettings

Connection settings

-> Respond q m r

Respond to incoming requests

-> JsonRpcT m a

JSON-RPC action

-> m a

Output of action

TCP client transport for JSON-RPC.

Server

jsonRpcTcpServer Source

Arguments

:: (MonadLoggerIO m, MonadBaseControl IO m, FromRequest q, ToJSON r) 
=> Ver

JSON-RPC version

-> ServerSettings

Connection settings

-> Respond q m r

Respond to incoming requests

-> JsonRpcT m ()

Action to perform on connecting client thread

-> m a 

TCP server transport for JSON-RPC.

Requests

Parsing

class FromRequest q where Source

Methods

parseParams :: Method -> Maybe (Value -> Parser q) Source

Parser for params Value in JSON-RPC request.

Encoding

class ToRequest q where Source

Methods

requestMethod :: q -> Method Source

Method associated with request data to build a request object.

Instances

buildRequest Source

Arguments

:: (ToJSON q, ToRequest q) 
=> Ver

JSON-RPC version

-> q

Request data

-> Id 
-> Request 

Responses

Parsing

class FromResponse r where Source

Methods

parseResult :: Method -> Maybe (Value -> Parser r) Source

Parser for result Value in JSON-RPC response. Method corresponds to request to which this response answers.

Encoding

type Respond q m r = q -> m (Either ErrorObj r) Source

Notifications

Parsing

class FromNotif n where Source

Methods

parseNotif :: Method -> Maybe (Value -> Parser n) Source

Parser for notification params Value.

Instances

Encoding

class ToNotif n where Source

Methods

notifMethod :: n -> Method Source

Instances

buildNotif :: (ToJSON n, ToNotif n) => Ver -> n -> Notif Source

Errors

data Err Source

Constructors

Err 

Fields

getErrVer :: !Ver
 
getErrObj :: !ErrorObj
 
getErrId :: !Id
 

Error Messages

errorParse :: Value -> ErrorObj Source

Parse error.

errorInvalid :: Value -> ErrorObj Source

Invalid request.

errorParams :: Value -> ErrorObj Source

Invalid params.

errorMethod :: Method -> ErrorObj Source

Method not found.

errorId :: Id -> ErrorObj Source

Id not recognized.

Others

data Id Source

Constructors

IdInt 

Fields

getIdInt :: !Int
 
IdTxt 

Fields

getIdTxt :: !Text
 
IdNull 

data Ver Source

Constructors

V1

JSON-RPC 1.0

V2

JSON-RPC 2.0