]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/jsonrpc/JsonRpcRequest.java
Implement jsonRpc command
[signal-cli] / src / main / java / org / asamk / signal / jsonrpc / JsonRpcRequest.java
diff --git a/src/main/java/org/asamk/signal/jsonrpc/JsonRpcRequest.java b/src/main/java/org/asamk/signal/jsonrpc/JsonRpcRequest.java
new file mode 100644 (file)
index 0000000..1ae8552
--- /dev/null
@@ -0,0 +1,73 @@
+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 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;
+    }
+}