summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeonid Startsev <sandwwraith@users.noreply.github.com>2023-06-22 12:12:26 +0200
committerGitHub <noreply@github.com>2023-06-22 12:12:26 +0200
commit3e54de53ee4c5a26a58c16f95cb394544fb60a8c (patch)
tree788d0efbfe1ce72f61688d09e830098518ab736b
parent7d597c1d76e1cedc835391b74ebaab6eb26360ba (diff)
downloadkotlinx.serialization-3e54de53ee4c5a26a58c16f95cb394544fb60a8c.tar.gz
Actualize 'serializer not found' platform-specific message (#2339)
Fixes #1248
-rw-r--r--core/jsMain/src/kotlinx/serialization/internal/Platform.kt4
-rw-r--r--core/nativeMain/src/kotlinx/serialization/internal/Platform.kt5
-rw-r--r--docs/builtin-classes.md2
-rw-r--r--docs/polymorphism.md2
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