send<T> method

Sends a JSON RPC request to uri and returns its response.

The decode method is used to convert the JSON response to a JsonRpcResponse.

The config object can be used to configure the request.

Implementation

Future<JsonRpcSuccessResponse<T>> send<T>(
  final JsonRpcRequest request,
  final JsonRpcResponseDecoder<Map<String, dynamic>, JsonRpcResponse<T>>
      decode, {
  final JsonRpcClientConfig? config,
}) async {
  final List<int> body = await encoder.convert(request);
  final Map<String, dynamic> json =
      await handler(body, config: config, id: request.id);
  final JsonRpcResponse<T> response = decode(json);
  return response is JsonRpcErrorResponse<T>
      ? Future.error(response.error) // [JsonRpcException]
      : Future.value(response as JsonRpcSuccessResponse<T>);
}