From 8d28616ab156af5766dfd0f17d4898a75282789e Mon Sep 17 00:00:00 2001 From: evgeny Date: Thu, 2 Oct 2025 18:30:37 +0100 Subject: [PATCH] feat: add `toString` methods for improved debugging For in `ChannelStateChange` and `Annotations`. It is used in chat logs. --- .../ably/lib/realtime/ChannelStateListener.java | 12 ++++++++++++ .../main/java/io/ably/lib/types/Annotation.java | 17 +++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/lib/src/main/java/io/ably/lib/realtime/ChannelStateListener.java b/lib/src/main/java/io/ably/lib/realtime/ChannelStateListener.java index 5dbb8ec48..5a84d3f69 100644 --- a/lib/src/main/java/io/ably/lib/realtime/ChannelStateListener.java +++ b/lib/src/main/java/io/ably/lib/realtime/ChannelStateListener.java @@ -1,6 +1,7 @@ package io.ably.lib.realtime; import io.ably.lib.types.ErrorInfo; +import org.jetbrains.annotations.NotNull; /** * An interface whereby a client may be notified of state changes for a channel. @@ -69,6 +70,17 @@ private ChannelStateChange(ErrorInfo reason, boolean resumed) { static ChannelStateChange createUpdateEvent(ErrorInfo reason, boolean resumed) { return new ChannelStateChange(reason, resumed); } + + @Override + public @NotNull String toString() { + return '{' + + "event=" + event + + ", current=" + current + + ", previous=" + previous + + ", reason=" + reason + + ", resumed=" + resumed + + '}'; + } } class Multicaster extends io.ably.lib.util.Multicaster implements ChannelStateListener { diff --git a/lib/src/main/java/io/ably/lib/types/Annotation.java b/lib/src/main/java/io/ably/lib/types/Annotation.java index ce57e1590..73821d3f2 100644 --- a/lib/src/main/java/io/ably/lib/types/Annotation.java +++ b/lib/src/main/java/io/ably/lib/types/Annotation.java @@ -10,6 +10,7 @@ import com.google.gson.JsonSerializer; import io.ably.lib.util.Log; import io.ably.lib.util.Serialisation; +import org.jetbrains.annotations.NotNull; import org.msgpack.core.MessageFormat; import org.msgpack.core.MessagePacker; import org.msgpack.core.MessageUnpacker; @@ -233,6 +234,22 @@ public Annotation deserialize(JsonElement json, Type typeOfT, JsonDeserializatio } } + /** + * Generate a String summary of this Message + * @return string + */ + @Override + public @NotNull String toString() { + StringBuilder result = new StringBuilder("{"); + super.getDetails(result); + result.append(" name=").append(name); + result.append(" serial=").append(serial); + result.append(" messageSerial=").append(messageSerial); + result.append(" type=").append(type); + result.append('}'); + return result.toString(); + } + public static class ActionSerializer implements JsonSerializer, JsonDeserializer { @Override public AnnotationAction deserialize(JsonElement json, Type t, JsonDeserializationContext ctx)