| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Network.JsonRpc.Client
Description
Functions for implementing the client side of JSON-RPC 2.0. See http://www.jsonrpc.org/specification.
- type Connection m = ByteString -> m (Maybe ByteString)
- type RpcResult m r = ErrorT RpcError m r
- data Signature ps r = Signature Text ps
- data p ::: ps = Text ::: ps
- toFunction :: (Monad m, Functor m, ClientFunction ps r f, ComposeMultiParam (Batch r -> RpcResult m r) f g) => Connection m -> Signature ps r -> g
- toFunction_ :: (Monad m, Functor m, ClientFunction ps r f, ComposeMultiParam (Batch r -> RpcResult m ()) f g) => Connection m -> Signature ps r -> g
- data Batch r
- toBatchFunction :: ClientFunction ps r f => Signature ps r -> f
- toBatchFunction_ :: (ClientFunction ps r f, ComposeMultiParam (Batch r -> Batch ()) f g) => Signature ps r -> g
- voidBatch :: Batch r -> Batch ()
- runBatch :: (Monad m, Functor m) => Connection m -> Batch r -> RpcResult m r
- data RpcError :: * = RpcError {}
- clientCode :: Int
- class ClientFunction ps r f | ps r -> f, f -> ps r
- class ComposeMultiParam f g h | f g -> h, g h -> f
Summary
- Create one
Signaturefor each server-side method to be called.Signatures can be shared between client and server, usingtoServerMethod. - Create a function of type
Monad m =>for communicating with the server.Connectionm - Create client-side functions by calling
toFunction,toFunction_,toBatchFunction, ortoBatchFunction_on theSignatures. - Client-side functions created with
toBatchFunctionortoBatchFunction_return values of type. Combine them usingBatchaBatch'sApplicativeandAlternativeinstances, before callingrunBatchon the result.
Demo
The demo folder contains a client and server that communicate
using a shared set of Signatures. The client runs the server as a
subprocess, sending requests to stdin and receiving responses from stdout.
Compile both programs with the demo flag. Then run the client by passing
it a command to run the server (e.g., demo-client demo-server).
Types
type Connection m = ByteString -> m (Maybe ByteString) Source
Function used to send requests to the server.
Nothing represents no response, as when a JSON-RPC
server receives only notifications.
type RpcResult m r = ErrorT RpcError m r
Return type of a method. A method call can either fail with an RpcError
or succeed with a result of type r.
Signatures
Signature specifying the name,
parameter names and types (ps), and return type (r) of a method.
A node in a linked list specifying parameter names and types. It is right associative.
Instances
| Show ps => Show ((:::) p ps) | |
| (ClientFunction ps r f, ToJSON a) => ClientFunction ((:::) a ps) r (a -> f) | |
| ConvertParams ps1 ps2 => ConvertParams ((:::) p ps1) ((:+:) p ps2) |
Single Requests
Arguments
| :: (Monad m, Functor m, ClientFunction ps r f, ComposeMultiParam (Batch r -> RpcResult m r) f g) | |
| => Connection m | Function for sending requests to the server. |
| -> Signature ps r | Method signature. |
| -> g | Client-side function with a return type of |
Creates a function for calling a JSON-RPC method on the server.
Arguments
| :: (Monad m, Functor m, ClientFunction ps r f, ComposeMultiParam (Batch r -> RpcResult m ()) f g) | |
| => Connection m | Function for sending requests to the server. |
| -> Signature ps r | Method signature. |
| -> g | Client-side function with a return type of |
Creates a function for calling a JSON-RPC method on the server as a notification.
Batch Requests
A batch call. Batch multiple requests by combining
values of this type using its Applicative and Alternative
instances before running them with runBatch.
Instances
| Alternative Batch | |
| Functor Batch | |
| Applicative Batch | |
| FromJSON r => ClientFunction () r (Batch r) | |
| ComposeMultiParam (Batch a -> b) (Batch a) b |
Arguments
| :: ClientFunction ps r f | |
| => Signature ps r | Method signature. |
| -> f | Client-side function with a return type of |
Creates a function for calling a JSON-RPC method as part of a batch request.
Arguments
| :: (ClientFunction ps r f, ComposeMultiParam (Batch r -> Batch ()) f g) | |
| => Signature ps r | Method signature. |
| -> g | Client-side function with a return type of |
Creates a function for calling a JSON-RPC method as a notification and as part of a batch request.
Arguments
| :: (Monad m, Functor m) | |
| => Connection m | Function for sending requests to the server. |
| -> Batch r | Batch to be evaluated. |
| -> RpcResult m r | Result. |
Evaluates a batch. The process depends on its size:
- If the batch is empty, the server function is not called.
- If the batch has exactly one request, it is sent as a request object.
- If the batch has multiple requests, they are sent as an array of request objects.
Errors
RpcError is used for all server-side errors, as described in the
specification. Additionally, the error code -31999 is used for any
errors that occur while parsing the server's response.
data RpcError :: *
JSON-RPC error.
clientCode :: Int Source
Code used for all client-side errors. It is -31999.
Type Classes
class ClientFunction ps r f | ps r -> f, f -> ps r Source
Relationship between the parameters (ps), return type (r),
and client-side batch function (f) of a JSON-RPC method.
Instances
| FromJSON r => ClientFunction () r (Batch r) | |
| (ClientFunction ps r f, ToJSON a) => ClientFunction ((:::) a ps) r (a -> f) |
class ComposeMultiParam f g h | f g -> h, g h -> f Source
Relationship between a function (g) taking any number of arguments and yielding a ,
a function (Batch af) taking a , and the function (Batch ah) that applies g to all of its
arguments and then applies f to the result.
Instances
| ComposeMultiParam f g h => ComposeMultiParam f (a -> g) (a -> h) | |
| ComposeMultiParam (Batch a -> b) (Batch a) b |