signal-cli/src/main/java/org/asamk/signal/jsonrpc/JsonRpcRequest.java
2021-10-27 14:39:40 +02:00

73 lines
2.1 KiB
Java

package org.asamk.signal.jsonrpc;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.node.ContainerNode;
import com.fasterxml.jackson.databind.node.ValueNode;
/**
* Represents a JSON-RPC request.
* https://www.jsonrpc.org/specification#request_object
*/
public final class JsonRpcRequest extends JsonRpcMessage {
/**
* A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0".
*/
String jsonrpc;
/**
* A String containing the name of the method to be invoked.
* Method names that begin with the word rpc followed by a period character (U+002E or ASCII 46)
* are reserved for rpc-internal methods and extensions and MUST NOT be used for anything else.
*/
String method;
/**
* A Structured value that holds the parameter values to be used during the invocation of the method.
* This member MAY be omitted.
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
ContainerNode<?> params;
/**
* An identifier established by the Client that MUST contain a String, Number, or NULL value if included.
* If it is not included it is assumed to be a notification.
* The value SHOULD normally not be Null and Numbers SHOULD NOT contain fractional parts
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
ValueNode id;
public static JsonRpcRequest forNotification(
final String method, final ContainerNode<?> params, final ValueNode id
) {
return new JsonRpcRequest("2.0", method, params, id);
}
private JsonRpcRequest() {
}
private JsonRpcRequest(
final String jsonrpc, final String method, final ContainerNode<?> params, final ValueNode id
) {
this.jsonrpc = jsonrpc;
this.method = method;
this.params = params;
this.id = id;
}
public String getJsonrpc() {
return jsonrpc;
}
public String getMethod() {
return method;
}
public ContainerNode<?> getParams() {
return params;
}
public ValueNode getId() {
return id;
}
}