]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/json/JsonSendMessageResult.java
Handle send failures as non fatal and return detailed results in json output
[signal-cli] / src / main / java / org / asamk / signal / json / JsonSendMessageResult.java
diff --git a/src/main/java/org/asamk/signal/json/JsonSendMessageResult.java b/src/main/java/org/asamk/signal/json/JsonSendMessageResult.java
new file mode 100644 (file)
index 0000000..9b80a3a
--- /dev/null
@@ -0,0 +1,38 @@
+package org.asamk.signal.json;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import org.asamk.signal.manager.api.SendMessageResult;
+import org.asamk.signal.manager.groups.GroupId;
+
+public record JsonSendMessageResult(
+        JsonRecipientAddress recipientAddress,
+        @JsonInclude(JsonInclude.Include.NON_NULL) String groupId,
+        Type type,
+        @JsonInclude(JsonInclude.Include.NON_NULL) String token,
+        @JsonInclude(JsonInclude.Include.NON_NULL) Long retryAfterSeconds
+) {
+
+    public static JsonSendMessageResult from(SendMessageResult result) {
+        return from(result, null);
+    }
+
+    public static JsonSendMessageResult from(SendMessageResult result, GroupId groupId) {
+        return new JsonSendMessageResult(JsonRecipientAddress.from(result.address()),
+                groupId != null ? groupId.toBase64() : null,
+                result.isSuccess()
+                        ? Type.SUCCESS
+                        : result.isNetworkFailure()
+                                ? Type.NETWORK_FAILURE
+                                : result.isUnregisteredFailure() ? Type.UNREGISTERED_FAILURE : Type.IDENTITY_FAILURE,
+                result.proofRequiredFailure() != null ? result.proofRequiredFailure().getToken() : null,
+                result.proofRequiredFailure() != null ? result.proofRequiredFailure().getRetryAfterSeconds() : null);
+    }
+
+    public enum Type {
+        SUCCESS,
+        NETWORK_FAILURE,
+        UNREGISTERED_FAILURE,
+        IDENTITY_FAILURE,
+    }
+}