From 8a96f9c85487f53ef51ede8023b491616039cf48 Mon Sep 17 00:00:00 2001 From: Mohamed Ibrahim Date: Sun, 14 Jun 2026 13:31:50 +0100 Subject: [PATCH] Freeze event-type ABI: internal constructors + consistent copy() (#15) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After this commit HttpEvent, MqttEvent and BleEvent expose no public way to construct or copy() them — only to read, destructure, and `when`-match. This unfreezes their field list: a future field can be added without a source or binary break for consumers, the whole point of #15. What changed: - Primary constructors are now `internal` (instances are only built inside the loggers/PreviewData, all in-module). `data` is kept, so componentN destructuring and `when`-matching still work for consumers. - Added `@ConsistentCopyVisibility` so the generated `copy()`/`copy$default` inherit the internal constructor's visibility. Without it Kotlin keeps copy() public for back-compat, leaving the copy() ABI frozen against new fields — a half-freeze that defeats the issue's purpose. - Regenerated the BCV dumps (jvm `.api` + native `.klib.api`) for both modules: the ``, `copy` and `copy$default` entries drop out; getters, componentN, equals/hashCode/toString and the computed props stay. Parity: the change is symmetric across :sharingan and :sharingan-noop, so the frozen surface stays identical between them. (The pre-existing `$stable`-field divergence — Compose-only on :sharingan — is untouched here and is for #12 to reconcile.) Verified: :sharingan + :sharingan-noop testDebugUnitTest green; apiDump regenerated; sample (consumer) compiles against the narrowed surface; sample constructs no events directly. Co-Authored-By: Claude Opus 4.8 (1M context) --- sharingan-noop/api/sharingan-noop.api | 12 ------------ sharingan-noop/api/sharingan-noop.klib.api | 9 --------- sharingan-noop/src/commonMain/kotlin/BleEvent.kt | 3 ++- sharingan-noop/src/commonMain/kotlin/HttpEvent.kt | 3 ++- sharingan-noop/src/commonMain/kotlin/MqttEvent.kt | 3 ++- sharingan/api/sharingan.api | 12 ------------ sharingan/api/sharingan.klib.api | 9 --------- .../src/commonMain/kotlin/dev/sharingan/BleEvent.kt | 3 ++- .../src/commonMain/kotlin/dev/sharingan/HttpEvent.kt | 3 ++- .../src/commonMain/kotlin/dev/sharingan/MqttEvent.kt | 3 ++- 10 files changed, 12 insertions(+), 48 deletions(-) diff --git a/sharingan-noop/api/sharingan-noop.api b/sharingan-noop/api/sharingan-noop.api index 63d99d9..bb55c57 100644 --- a/sharingan-noop/api/sharingan-noop.api +++ b/sharingan-noop/api/sharingan-noop.api @@ -1,6 +1,4 @@ public final class dev/sharingan/BleEvent : dev/sharingan/SharinganEvent { - public fun (Ljava/lang/String;JLdev/sharingan/BleOperation;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;JLdev/sharingan/BleOperation;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/lang/String; public final fun component2 ()J public final fun component3 ()Ldev/sharingan/BleOperation; @@ -10,8 +8,6 @@ public final class dev/sharingan/BleEvent : dev/sharingan/SharinganEvent { public final fun component7 ()Ljava/lang/String; public final fun component8 ()Ljava/lang/Long; public final fun component9 ()Ljava/lang/String; - public final fun copy (Ljava/lang/String;JLdev/sharingan/BleOperation;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;)Ldev/sharingan/BleEvent; - public static synthetic fun copy$default (Ldev/sharingan/BleEvent;Ljava/lang/String;JLdev/sharingan/BleOperation;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;ILjava/lang/Object;)Ldev/sharingan/BleEvent; public fun equals (Ljava/lang/Object;)Z public final fun getCharacteristic ()Ljava/lang/String; public final fun getDevice ()Ljava/lang/String; @@ -59,8 +55,6 @@ public final class dev/sharingan/BleOperation : java/lang/Enum { } public final class dev/sharingan/HttpEvent : dev/sharingan/SharinganEvent { - public fun (Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Long;Ljava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/util/List;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Long;Ljava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/util/List;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/lang/String; public final fun component10 ()Ljava/lang/String; public final fun component11 ()Ljava/lang/String; @@ -75,8 +69,6 @@ public final class dev/sharingan/HttpEvent : dev/sharingan/SharinganEvent { public final fun component7 ()Ljava/util/List; public final fun component8 ()Ljava/util/List; public final fun component9 ()Ljava/lang/String; - public final fun copy (Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Long;Ljava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/util/List;Ljava/lang/String;)Ldev/sharingan/HttpEvent; - public static synthetic fun copy$default (Ldev/sharingan/HttpEvent;Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Long;Ljava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Ldev/sharingan/HttpEvent; public fun equals (Ljava/lang/Object;)Z public final fun getContentType ()Ljava/lang/String; public final fun getDurationMillis ()Ljava/lang/Long; @@ -122,8 +114,6 @@ public final class dev/sharingan/MqttDirection : java/lang/Enum { } public final class dev/sharingan/MqttEvent : dev/sharingan/SharinganEvent { - public fun (Ljava/lang/String;JLdev/sharingan/MqttDirection;Ljava/lang/String;IZLjava/lang/String;Ljava/lang/Long;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;JLdev/sharingan/MqttDirection;Ljava/lang/String;IZLjava/lang/String;Ljava/lang/Long;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/lang/String; public final fun component2 ()J public final fun component3 ()Ldev/sharingan/MqttDirection; @@ -133,8 +123,6 @@ public final class dev/sharingan/MqttEvent : dev/sharingan/SharinganEvent { public final fun component7 ()Ljava/lang/String; public final fun component8 ()Ljava/lang/Long; public final fun component9 ()Ljava/lang/String; - public final fun copy (Ljava/lang/String;JLdev/sharingan/MqttDirection;Ljava/lang/String;IZLjava/lang/String;Ljava/lang/Long;Ljava/lang/String;)Ldev/sharingan/MqttEvent; - public static synthetic fun copy$default (Ldev/sharingan/MqttEvent;Ljava/lang/String;JLdev/sharingan/MqttDirection;Ljava/lang/String;IZLjava/lang/String;Ljava/lang/Long;Ljava/lang/String;ILjava/lang/Object;)Ldev/sharingan/MqttEvent; public fun equals (Ljava/lang/Object;)Z public final fun getDirection ()Ldev/sharingan/MqttDirection; public fun getError ()Ljava/lang/String; diff --git a/sharingan-noop/api/sharingan-noop.klib.api b/sharingan-noop/api/sharingan-noop.klib.api index 9e6a12e..0cfa1c5 100644 --- a/sharingan-noop/api/sharingan-noop.klib.api +++ b/sharingan-noop/api/sharingan-noop.klib.api @@ -63,8 +63,6 @@ final class dev.sharingan.ktor/SharinganKtorConfig { // dev.sharingan.ktor/Shari } final class dev.sharingan/BleEvent : dev.sharingan/SharinganEvent { // dev.sharingan/BleEvent|null[0] - constructor (kotlin/String, kotlin/Long, dev.sharingan/BleOperation, kotlin/String, kotlin/String? = ..., kotlin/String? = ..., kotlin/String? = ..., kotlin/Long? = ..., kotlin/String? = ...) // dev.sharingan/BleEvent.|(kotlin.String;kotlin.Long;dev.sharingan.BleOperation;kotlin.String;kotlin.String?;kotlin.String?;kotlin.String?;kotlin.Long?;kotlin.String?){}[0] - final val characteristic // dev.sharingan/BleEvent.characteristic|{}characteristic[0] final fun (): kotlin/String? // dev.sharingan/BleEvent.characteristic.|(){}[0] final val device // dev.sharingan/BleEvent.device|{}device[0] @@ -95,7 +93,6 @@ final class dev.sharingan/BleEvent : dev.sharingan/SharinganEvent { // dev.shari final fun component7(): kotlin/String? // dev.sharingan/BleEvent.component7|component7(){}[0] final fun component8(): kotlin/Long? // dev.sharingan/BleEvent.component8|component8(){}[0] final fun component9(): kotlin/String? // dev.sharingan/BleEvent.component9|component9(){}[0] - final fun copy(kotlin/String = ..., kotlin/Long = ..., dev.sharingan/BleOperation = ..., kotlin/String = ..., kotlin/String? = ..., kotlin/String? = ..., kotlin/String? = ..., kotlin/Long? = ..., kotlin/String? = ...): dev.sharingan/BleEvent // dev.sharingan/BleEvent.copy|copy(kotlin.String;kotlin.Long;dev.sharingan.BleOperation;kotlin.String;kotlin.String?;kotlin.String?;kotlin.String?;kotlin.Long?;kotlin.String?){}[0] final fun equals(kotlin/Any?): kotlin/Boolean // dev.sharingan/BleEvent.equals|equals(kotlin.Any?){}[0] final fun hashCode(): kotlin/Int // dev.sharingan/BleEvent.hashCode|hashCode(){}[0] final fun toString(): kotlin/String // dev.sharingan/BleEvent.toString|toString(){}[0] @@ -114,8 +111,6 @@ final class dev.sharingan/BleLogger { // dev.sharingan/BleLogger|null[0] } final class dev.sharingan/HttpEvent : dev.sharingan/SharinganEvent { // dev.sharingan/HttpEvent|null[0] - constructor (kotlin/String, kotlin/Long, kotlin/String, kotlin/String, kotlin/Int? = ..., kotlin/Long? = ..., kotlin.collections/List> = ..., kotlin.collections/List> = ..., kotlin/String? = ..., kotlin/String? = ..., kotlin/String? = ..., kotlin/Long? = ..., kotlin.collections/List = ..., kotlin/String? = ...) // dev.sharingan/HttpEvent.|(kotlin.String;kotlin.Long;kotlin.String;kotlin.String;kotlin.Int?;kotlin.Long?;kotlin.collections.List>;kotlin.collections.List>;kotlin.String?;kotlin.String?;kotlin.String?;kotlin.Long?;kotlin.collections.List;kotlin.String?){}[0] - final val contentType // dev.sharingan/HttpEvent.contentType|{}contentType[0] final fun (): kotlin/String? // dev.sharingan/HttpEvent.contentType.|(){}[0] final val durationMillis // dev.sharingan/HttpEvent.durationMillis|{}durationMillis[0] @@ -165,7 +160,6 @@ final class dev.sharingan/HttpEvent : dev.sharingan/SharinganEvent { // dev.shar final fun component7(): kotlin.collections/List> // dev.sharingan/HttpEvent.component7|component7(){}[0] final fun component8(): kotlin.collections/List> // dev.sharingan/HttpEvent.component8|component8(){}[0] final fun component9(): kotlin/String? // dev.sharingan/HttpEvent.component9|component9(){}[0] - final fun copy(kotlin/String = ..., kotlin/Long = ..., kotlin/String = ..., kotlin/String = ..., kotlin/Int? = ..., kotlin/Long? = ..., kotlin.collections/List> = ..., kotlin.collections/List> = ..., kotlin/String? = ..., kotlin/String? = ..., kotlin/String? = ..., kotlin/Long? = ..., kotlin.collections/List = ..., kotlin/String? = ...): dev.sharingan/HttpEvent // dev.sharingan/HttpEvent.copy|copy(kotlin.String;kotlin.Long;kotlin.String;kotlin.String;kotlin.Int?;kotlin.Long?;kotlin.collections.List>;kotlin.collections.List>;kotlin.String?;kotlin.String?;kotlin.String?;kotlin.Long?;kotlin.collections.List;kotlin.String?){}[0] final fun equals(kotlin/Any?): kotlin/Boolean // dev.sharingan/HttpEvent.equals|equals(kotlin.Any?){}[0] final fun hashCode(): kotlin/Int // dev.sharingan/HttpEvent.hashCode|hashCode(){}[0] final fun toString(): kotlin/String // dev.sharingan/HttpEvent.toString|toString(){}[0] @@ -186,8 +180,6 @@ final class dev.sharingan/HttpLogger { // dev.sharingan/HttpLogger|null[0] } final class dev.sharingan/MqttEvent : dev.sharingan/SharinganEvent { // dev.sharingan/MqttEvent|null[0] - constructor (kotlin/String, kotlin/Long, dev.sharingan/MqttDirection, kotlin/String, kotlin/Int = ..., kotlin/Boolean = ..., kotlin/String? = ..., kotlin/Long? = ..., kotlin/String? = ...) // dev.sharingan/MqttEvent.|(kotlin.String;kotlin.Long;dev.sharingan.MqttDirection;kotlin.String;kotlin.Int;kotlin.Boolean;kotlin.String?;kotlin.Long?;kotlin.String?){}[0] - final val direction // dev.sharingan/MqttEvent.direction|{}direction[0] final fun (): dev.sharingan/MqttDirection // dev.sharingan/MqttEvent.direction.|(){}[0] final val error // dev.sharingan/MqttEvent.error|{}error[0] @@ -216,7 +208,6 @@ final class dev.sharingan/MqttEvent : dev.sharingan/SharinganEvent { // dev.shar final fun component7(): kotlin/String? // dev.sharingan/MqttEvent.component7|component7(){}[0] final fun component8(): kotlin/Long? // dev.sharingan/MqttEvent.component8|component8(){}[0] final fun component9(): kotlin/String? // dev.sharingan/MqttEvent.component9|component9(){}[0] - final fun copy(kotlin/String = ..., kotlin/Long = ..., dev.sharingan/MqttDirection = ..., kotlin/String = ..., kotlin/Int = ..., kotlin/Boolean = ..., kotlin/String? = ..., kotlin/Long? = ..., kotlin/String? = ...): dev.sharingan/MqttEvent // dev.sharingan/MqttEvent.copy|copy(kotlin.String;kotlin.Long;dev.sharingan.MqttDirection;kotlin.String;kotlin.Int;kotlin.Boolean;kotlin.String?;kotlin.Long?;kotlin.String?){}[0] final fun equals(kotlin/Any?): kotlin/Boolean // dev.sharingan/MqttEvent.equals|equals(kotlin.Any?){}[0] final fun hashCode(): kotlin/Int // dev.sharingan/MqttEvent.hashCode|hashCode(){}[0] final fun toString(): kotlin/String // dev.sharingan/MqttEvent.toString|toString(){}[0] diff --git a/sharingan-noop/src/commonMain/kotlin/BleEvent.kt b/sharingan-noop/src/commonMain/kotlin/BleEvent.kt index 7caf1f5..4ae3e69 100644 --- a/sharingan-noop/src/commonMain/kotlin/BleEvent.kt +++ b/sharingan-noop/src/commonMain/kotlin/BleEvent.kt @@ -17,7 +17,8 @@ public enum class BleOperation { * [payload] carries the decoded value as text — JSON is rendered with syntax * colors in the detail screen, anything else is shown verbatim. */ -public data class BleEvent( +@ConsistentCopyVisibility +public data class BleEvent internal constructor( override val id: String, override val timestampMillis: Long, public val operation: BleOperation, diff --git a/sharingan-noop/src/commonMain/kotlin/HttpEvent.kt b/sharingan-noop/src/commonMain/kotlin/HttpEvent.kt index 7f0d7d9..41e83c6 100644 --- a/sharingan-noop/src/commonMain/kotlin/HttpEvent.kt +++ b/sharingan-noop/src/commonMain/kotlin/HttpEvent.kt @@ -17,7 +17,8 @@ public data class TimingPhase( * rows read like an access log. A `null` [statusCode] together with a non-null * [error] means the request failed at the transport layer. */ -public data class HttpEvent( +@ConsistentCopyVisibility +public data class HttpEvent internal constructor( override val id: String, override val timestampMillis: Long, public val method: String, diff --git a/sharingan-noop/src/commonMain/kotlin/MqttEvent.kt b/sharingan-noop/src/commonMain/kotlin/MqttEvent.kt index 45d37db..d87ea1a 100644 --- a/sharingan-noop/src/commonMain/kotlin/MqttEvent.kt +++ b/sharingan-noop/src/commonMain/kotlin/MqttEvent.kt @@ -18,7 +18,8 @@ public enum class MqttDirection { * For [MqttDirection.SUBSCRIBE] events, [topic] holds the topic *filter* * (it may contain `+`/`#` wildcards) and [payload] is `null`. */ -public data class MqttEvent( +@ConsistentCopyVisibility +public data class MqttEvent internal constructor( override val id: String, override val timestampMillis: Long, public val direction: MqttDirection, diff --git a/sharingan/api/sharingan.api b/sharingan/api/sharingan.api index 6617aa7..89648e7 100644 --- a/sharingan/api/sharingan.api +++ b/sharingan/api/sharingan.api @@ -1,7 +1,5 @@ public final class dev/sharingan/BleEvent : dev/sharingan/SharinganEvent { public static final field $stable I - public fun (Ljava/lang/String;JLdev/sharingan/BleOperation;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;JLdev/sharingan/BleOperation;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/lang/String; public final fun component2 ()J public final fun component3 ()Ldev/sharingan/BleOperation; @@ -11,8 +9,6 @@ public final class dev/sharingan/BleEvent : dev/sharingan/SharinganEvent { public final fun component7 ()Ljava/lang/String; public final fun component8 ()Ljava/lang/Long; public final fun component9 ()Ljava/lang/String; - public final fun copy (Ljava/lang/String;JLdev/sharingan/BleOperation;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;)Ldev/sharingan/BleEvent; - public static synthetic fun copy$default (Ldev/sharingan/BleEvent;Ljava/lang/String;JLdev/sharingan/BleOperation;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;ILjava/lang/Object;)Ldev/sharingan/BleEvent; public fun equals (Ljava/lang/Object;)Z public final fun getCharacteristic ()Ljava/lang/String; public final fun getDevice ()Ljava/lang/String; @@ -68,8 +64,6 @@ public final class dev/sharingan/ComposableSingletons$SharinganActivityKt { public final class dev/sharingan/HttpEvent : dev/sharingan/SharinganEvent { public static final field $stable I - public fun (Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Long;Ljava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/util/List;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Long;Ljava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/util/List;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/lang/String; public final fun component10 ()Ljava/lang/String; public final fun component11 ()Ljava/lang/String; @@ -84,8 +78,6 @@ public final class dev/sharingan/HttpEvent : dev/sharingan/SharinganEvent { public final fun component7 ()Ljava/util/List; public final fun component8 ()Ljava/util/List; public final fun component9 ()Ljava/lang/String; - public final fun copy (Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Long;Ljava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/util/List;Ljava/lang/String;)Ldev/sharingan/HttpEvent; - public static synthetic fun copy$default (Ldev/sharingan/HttpEvent;Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Long;Ljava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Ldev/sharingan/HttpEvent; public fun equals (Ljava/lang/Object;)Z public final fun getContentType ()Ljava/lang/String; public final fun getDurationMillis ()Ljava/lang/Long; @@ -133,8 +125,6 @@ public final class dev/sharingan/MqttDirection : java/lang/Enum { public final class dev/sharingan/MqttEvent : dev/sharingan/SharinganEvent { public static final field $stable I - public fun (Ljava/lang/String;JLdev/sharingan/MqttDirection;Ljava/lang/String;IZLjava/lang/String;Ljava/lang/Long;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;JLdev/sharingan/MqttDirection;Ljava/lang/String;IZLjava/lang/String;Ljava/lang/Long;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/lang/String; public final fun component2 ()J public final fun component3 ()Ldev/sharingan/MqttDirection; @@ -144,8 +134,6 @@ public final class dev/sharingan/MqttEvent : dev/sharingan/SharinganEvent { public final fun component7 ()Ljava/lang/String; public final fun component8 ()Ljava/lang/Long; public final fun component9 ()Ljava/lang/String; - public final fun copy (Ljava/lang/String;JLdev/sharingan/MqttDirection;Ljava/lang/String;IZLjava/lang/String;Ljava/lang/Long;Ljava/lang/String;)Ldev/sharingan/MqttEvent; - public static synthetic fun copy$default (Ldev/sharingan/MqttEvent;Ljava/lang/String;JLdev/sharingan/MqttDirection;Ljava/lang/String;IZLjava/lang/String;Ljava/lang/Long;Ljava/lang/String;ILjava/lang/Object;)Ldev/sharingan/MqttEvent; public fun equals (Ljava/lang/Object;)Z public final fun getDirection ()Ldev/sharingan/MqttDirection; public fun getError ()Ljava/lang/String; diff --git a/sharingan/api/sharingan.klib.api b/sharingan/api/sharingan.klib.api index d4172ee..ddc83fe 100644 --- a/sharingan/api/sharingan.klib.api +++ b/sharingan/api/sharingan.klib.api @@ -63,8 +63,6 @@ final class dev.sharingan.ktor/SharinganKtorConfig { // dev.sharingan.ktor/Shari } final class dev.sharingan/BleEvent : dev.sharingan/SharinganEvent { // dev.sharingan/BleEvent|null[0] - constructor (kotlin/String, kotlin/Long, dev.sharingan/BleOperation, kotlin/String, kotlin/String? = ..., kotlin/String? = ..., kotlin/String? = ..., kotlin/Long? = ..., kotlin/String? = ...) // dev.sharingan/BleEvent.|(kotlin.String;kotlin.Long;dev.sharingan.BleOperation;kotlin.String;kotlin.String?;kotlin.String?;kotlin.String?;kotlin.Long?;kotlin.String?){}[0] - final val characteristic // dev.sharingan/BleEvent.characteristic|{}characteristic[0] final fun (): kotlin/String? // dev.sharingan/BleEvent.characteristic.|(){}[0] final val device // dev.sharingan/BleEvent.device|{}device[0] @@ -95,7 +93,6 @@ final class dev.sharingan/BleEvent : dev.sharingan/SharinganEvent { // dev.shari final fun component7(): kotlin/String? // dev.sharingan/BleEvent.component7|component7(){}[0] final fun component8(): kotlin/Long? // dev.sharingan/BleEvent.component8|component8(){}[0] final fun component9(): kotlin/String? // dev.sharingan/BleEvent.component9|component9(){}[0] - final fun copy(kotlin/String = ..., kotlin/Long = ..., dev.sharingan/BleOperation = ..., kotlin/String = ..., kotlin/String? = ..., kotlin/String? = ..., kotlin/String? = ..., kotlin/Long? = ..., kotlin/String? = ...): dev.sharingan/BleEvent // dev.sharingan/BleEvent.copy|copy(kotlin.String;kotlin.Long;dev.sharingan.BleOperation;kotlin.String;kotlin.String?;kotlin.String?;kotlin.String?;kotlin.Long?;kotlin.String?){}[0] final fun equals(kotlin/Any?): kotlin/Boolean // dev.sharingan/BleEvent.equals|equals(kotlin.Any?){}[0] final fun hashCode(): kotlin/Int // dev.sharingan/BleEvent.hashCode|hashCode(){}[0] final fun toString(): kotlin/String // dev.sharingan/BleEvent.toString|toString(){}[0] @@ -114,8 +111,6 @@ final class dev.sharingan/BleLogger { // dev.sharingan/BleLogger|null[0] } final class dev.sharingan/HttpEvent : dev.sharingan/SharinganEvent { // dev.sharingan/HttpEvent|null[0] - constructor (kotlin/String, kotlin/Long, kotlin/String, kotlin/String, kotlin/Int? = ..., kotlin/Long? = ..., kotlin.collections/List> = ..., kotlin.collections/List> = ..., kotlin/String? = ..., kotlin/String? = ..., kotlin/String? = ..., kotlin/Long? = ..., kotlin.collections/List = ..., kotlin/String? = ...) // dev.sharingan/HttpEvent.|(kotlin.String;kotlin.Long;kotlin.String;kotlin.String;kotlin.Int?;kotlin.Long?;kotlin.collections.List>;kotlin.collections.List>;kotlin.String?;kotlin.String?;kotlin.String?;kotlin.Long?;kotlin.collections.List;kotlin.String?){}[0] - final val contentType // dev.sharingan/HttpEvent.contentType|{}contentType[0] final fun (): kotlin/String? // dev.sharingan/HttpEvent.contentType.|(){}[0] final val durationMillis // dev.sharingan/HttpEvent.durationMillis|{}durationMillis[0] @@ -165,7 +160,6 @@ final class dev.sharingan/HttpEvent : dev.sharingan/SharinganEvent { // dev.shar final fun component7(): kotlin.collections/List> // dev.sharingan/HttpEvent.component7|component7(){}[0] final fun component8(): kotlin.collections/List> // dev.sharingan/HttpEvent.component8|component8(){}[0] final fun component9(): kotlin/String? // dev.sharingan/HttpEvent.component9|component9(){}[0] - final fun copy(kotlin/String = ..., kotlin/Long = ..., kotlin/String = ..., kotlin/String = ..., kotlin/Int? = ..., kotlin/Long? = ..., kotlin.collections/List> = ..., kotlin.collections/List> = ..., kotlin/String? = ..., kotlin/String? = ..., kotlin/String? = ..., kotlin/Long? = ..., kotlin.collections/List = ..., kotlin/String? = ...): dev.sharingan/HttpEvent // dev.sharingan/HttpEvent.copy|copy(kotlin.String;kotlin.Long;kotlin.String;kotlin.String;kotlin.Int?;kotlin.Long?;kotlin.collections.List>;kotlin.collections.List>;kotlin.String?;kotlin.String?;kotlin.String?;kotlin.Long?;kotlin.collections.List;kotlin.String?){}[0] final fun equals(kotlin/Any?): kotlin/Boolean // dev.sharingan/HttpEvent.equals|equals(kotlin.Any?){}[0] final fun hashCode(): kotlin/Int // dev.sharingan/HttpEvent.hashCode|hashCode(){}[0] final fun toString(): kotlin/String // dev.sharingan/HttpEvent.toString|toString(){}[0] @@ -186,8 +180,6 @@ final class dev.sharingan/HttpLogger { // dev.sharingan/HttpLogger|null[0] } final class dev.sharingan/MqttEvent : dev.sharingan/SharinganEvent { // dev.sharingan/MqttEvent|null[0] - constructor (kotlin/String, kotlin/Long, dev.sharingan/MqttDirection, kotlin/String, kotlin/Int = ..., kotlin/Boolean = ..., kotlin/String? = ..., kotlin/Long? = ..., kotlin/String? = ...) // dev.sharingan/MqttEvent.|(kotlin.String;kotlin.Long;dev.sharingan.MqttDirection;kotlin.String;kotlin.Int;kotlin.Boolean;kotlin.String?;kotlin.Long?;kotlin.String?){}[0] - final val direction // dev.sharingan/MqttEvent.direction|{}direction[0] final fun (): dev.sharingan/MqttDirection // dev.sharingan/MqttEvent.direction.|(){}[0] final val error // dev.sharingan/MqttEvent.error|{}error[0] @@ -216,7 +208,6 @@ final class dev.sharingan/MqttEvent : dev.sharingan/SharinganEvent { // dev.shar final fun component7(): kotlin/String? // dev.sharingan/MqttEvent.component7|component7(){}[0] final fun component8(): kotlin/Long? // dev.sharingan/MqttEvent.component8|component8(){}[0] final fun component9(): kotlin/String? // dev.sharingan/MqttEvent.component9|component9(){}[0] - final fun copy(kotlin/String = ..., kotlin/Long = ..., dev.sharingan/MqttDirection = ..., kotlin/String = ..., kotlin/Int = ..., kotlin/Boolean = ..., kotlin/String? = ..., kotlin/Long? = ..., kotlin/String? = ...): dev.sharingan/MqttEvent // dev.sharingan/MqttEvent.copy|copy(kotlin.String;kotlin.Long;dev.sharingan.MqttDirection;kotlin.String;kotlin.Int;kotlin.Boolean;kotlin.String?;kotlin.Long?;kotlin.String?){}[0] final fun equals(kotlin/Any?): kotlin/Boolean // dev.sharingan/MqttEvent.equals|equals(kotlin.Any?){}[0] final fun hashCode(): kotlin/Int // dev.sharingan/MqttEvent.hashCode|hashCode(){}[0] final fun toString(): kotlin/String // dev.sharingan/MqttEvent.toString|toString(){}[0] diff --git a/sharingan/src/commonMain/kotlin/dev/sharingan/BleEvent.kt b/sharingan/src/commonMain/kotlin/dev/sharingan/BleEvent.kt index 7caf1f5..4ae3e69 100644 --- a/sharingan/src/commonMain/kotlin/dev/sharingan/BleEvent.kt +++ b/sharingan/src/commonMain/kotlin/dev/sharingan/BleEvent.kt @@ -17,7 +17,8 @@ public enum class BleOperation { * [payload] carries the decoded value as text — JSON is rendered with syntax * colors in the detail screen, anything else is shown verbatim. */ -public data class BleEvent( +@ConsistentCopyVisibility +public data class BleEvent internal constructor( override val id: String, override val timestampMillis: Long, public val operation: BleOperation, diff --git a/sharingan/src/commonMain/kotlin/dev/sharingan/HttpEvent.kt b/sharingan/src/commonMain/kotlin/dev/sharingan/HttpEvent.kt index 6fe08fc..e956d10 100644 --- a/sharingan/src/commonMain/kotlin/dev/sharingan/HttpEvent.kt +++ b/sharingan/src/commonMain/kotlin/dev/sharingan/HttpEvent.kt @@ -30,7 +30,8 @@ public data class TimingPhase( * rows read like an access log. A `null` [statusCode] together with a non-null * [error] means the request failed at the transport layer. */ -public data class HttpEvent( +@ConsistentCopyVisibility +public data class HttpEvent internal constructor( override val id: String, override val timestampMillis: Long, public val method: String, diff --git a/sharingan/src/commonMain/kotlin/dev/sharingan/MqttEvent.kt b/sharingan/src/commonMain/kotlin/dev/sharingan/MqttEvent.kt index 45d37db..d87ea1a 100644 --- a/sharingan/src/commonMain/kotlin/dev/sharingan/MqttEvent.kt +++ b/sharingan/src/commonMain/kotlin/dev/sharingan/MqttEvent.kt @@ -18,7 +18,8 @@ public enum class MqttDirection { * For [MqttDirection.SUBSCRIBE] events, [topic] holds the topic *filter* * (it may contain `+`/`#` wildcards) and [payload] is `null`. */ -public data class MqttEvent( +@ConsistentCopyVisibility +public data class MqttEvent internal constructor( override val id: String, override val timestampMillis: Long, public val direction: MqttDirection,