diff options
author | Leonid Startsev <sandwwraith@users.noreply.github.com> | 2023-06-22 12:12:26 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-22 12:12:26 +0200 |
commit | 3e54de53ee4c5a26a58c16f95cb394544fb60a8c (patch) | |
tree | 788d0efbfe1ce72f61688d09e830098518ab736b | |
parent | 7d597c1d76e1cedc835391b74ebaab6eb26360ba (diff) | |
download | kotlinx.serialization-3e54de53ee4c5a26a58c16f95cb394544fb60a8c.tar.gz |
Actualize 'serializer not found' platform-specific message (#2339)
Fixes #1248
-rw-r--r-- | core/jsMain/src/kotlinx/serialization/internal/Platform.kt | 4 | ||||
-rw-r--r-- | core/nativeMain/src/kotlinx/serialization/internal/Platform.kt | 5 | ||||
-rw-r--r-- | docs/builtin-classes.md | 2 | ||||
-rw-r--r-- | docs/polymorphism.md | 2 |
4 files changed, 9 insertions, 4 deletions
diff --git a/core/jsMain/src/kotlinx/serialization/internal/Platform.kt b/core/jsMain/src/kotlinx/serialization/internal/Platform.kt index ed88ca35..d2659fe4 100644 --- a/core/jsMain/src/kotlinx/serialization/internal/Platform.kt +++ b/core/jsMain/src/kotlinx/serialization/internal/Platform.kt @@ -40,8 +40,8 @@ internal actual fun <T : Any, E : T?> ArrayList<E>.toNativeArrayImpl(eClass: KCl internal actual fun KClass<*>.platformSpecificSerializerNotRegistered(): Nothing { throw SerializationException( - "${notRegisteredMessage()}\n" + - "On Kotlin/JS explicitly declared serializer should be used for interfaces and enums without @Serializable annotation" + notRegisteredMessage() + + "To get enum serializer on Kotlin/JS, it should be annotated with @Serializable annotation." ) } diff --git a/core/nativeMain/src/kotlinx/serialization/internal/Platform.kt b/core/nativeMain/src/kotlinx/serialization/internal/Platform.kt index 8995f173..2c91769a 100644 --- a/core/nativeMain/src/kotlinx/serialization/internal/Platform.kt +++ b/core/nativeMain/src/kotlinx/serialization/internal/Platform.kt @@ -19,8 +19,9 @@ internal actual inline fun BooleanArray.getChecked(index: Int): Boolean { internal actual fun KClass<*>.platformSpecificSerializerNotRegistered(): Nothing { throw SerializationException( - "${notRegisteredMessage()}\n" + - "On Kotlin/Native explicitly declared serializer should be used for interfaces and enums without @Serializable annotation" + notRegisteredMessage() + + "To get enum serializer on Kotlin/Native, it should be annotated with @Serializable annotation.\n" + + "To get interface serializer on Kotlin/Native, use PolymorphicSerializer() constructor function.\n" ) } diff --git a/docs/builtin-classes.md b/docs/builtin-classes.md index 18319632..8671dc70 100644 --- a/docs/builtin-classes.md +++ b/docs/builtin-classes.md @@ -166,6 +166,8 @@ In JSON an enum gets encoded as a string. {"name":"kotlinx.serialization","status":"SUPPORTED"} ``` +> Note: On Kotlin/JS and Kotlin/Native, `@Serializable` annotation is needed for enum class if you want to use it as a root object — i.e. use `encodeToString<Status>(Status.SUPPORTED)`. + <!--- TEST --> ### Serial names of enum entries diff --git a/docs/polymorphism.md b/docs/polymorphism.md index 9ee5c5ec..29d023b6 100644 --- a/docs/polymorphism.md +++ b/docs/polymorphism.md @@ -408,6 +408,8 @@ fun main() { {"type":"owned","name":"kotlinx.coroutines","owner":"kotlin"} ``` +> Note: On Kotlin/Native, you should use `format.encodeToString(PolymorphicSerializer(Project::class), data))` instead due to limited reflection capabilities. + <!--- TEST LINES_START --> ### Property of an interface type |