diff --git a/CHANGELOG.md b/CHANGELOG.md index cf3c6f404..d7a05f618 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,57 @@ +1.7.2 / 2024-08-28 +================== + +This release provides several new features, including a major Cbor configuration rework. +It uses Kotlin 2.0.20 by default. + +## Cbor feature set for COSE compliance + +This change brings a lot of features to the CBOR format, namely: + +- Serial Labels — see `@CborLabel` annotation and `preferCborLabelsOverNames` flag. +- Tagging of keys and values — see `encode*Tags` and `verify*Tags` set of flags +- Definite length encoding — see `useDefiniteLengthEncoding`. This flag affects object encoding, since decoding of arrays with definite lenghts is automatically supported. +- Option to globally prefer major type 2 for byte array encoding — see `alwaysUseByteString` flag. + +Since there are quite a lot of flags now, they were restructured to a separate `CborConfiguration` class, similarly to `JsonConfiguration`. +It is possible to retrieve this configuration from `CborEncoder/CborDecoder` interfaces in your custom serializers (see their documentation for details). + +All of these features make it possible to serialize and parse [COSE-compliant CBOR](https://datatracker.ietf.org/doc/html/rfc8152), for example, ISO/IEC 18013-5:2021-compliant mobile driving license data. +In case you want to make use of them, there is a predefined `Cbor.CoseCompliant` instance. +However, some canonicalization steps (such as sorting keys) still need to be performed manually. + +This functionality [was contributed](https://github.com/Kotlin/kotlinx.serialization/pull/2412) to us by [Bernd Prünster](https://github.com/JesusMcCloud). + +## Keeping generated serializers + +One of the most requested features for serialization plugin was to continue to generate a serializer even if a custom one is specified for the class. +It allows using a plugin-generated serializer in a fallback or delegate strategy, accessing type structure via descriptor, using default serialization behavior in inheritors that do not use custom serializers. + +Starting with this release, you can specify the `@KeepGeneratedSerializer` annotation on the class declaration to instruct the plugin to continue generating the serializer. +In this case, the serializer will be accessible using the `.generatedSerializer()` function on the class's companion object. + +> This annotation is currently experimental. Kotlin 2.0.20 or higher is required for this feature to work. + +You can check out the examples in [the documentation](docs/serializers.md#simultaneous-use-of-plugin-generated-and-custom-serializers) and in the PRs: [#2758](https://github.com/Kotlin/kotlinx.serialization/pull/2758), [#2669](https://github.com/Kotlin/kotlinx.serialization/pull/2669). + +## Serializer for kotlin.uuid.Uuid + +Kotlin 2.0.20 [added](https://kotlinlang.org/docs/whatsnew2020.html#support-for-uuids-in-the-common-kotlin-standard-library) a common class to represent UUIDs in a multiplatform code. +kotlinx.serialization 1.7.2 provides a corresponding `Uuid.serializer()` for it, making it possible to use it in `@Serializable` classes. +Note that for now, serializer should be provided manually with [`@Contextual` annotation](https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/serializers.md#contextual-serialization). +Plugin will be able to automatically insert `Uuid` serializer in Kotlin 2.1.0. + +See more details in the [corresponding PR](https://github.com/Kotlin/kotlinx.serialization/pull/2744). + +## Other bugfixes and improvements + + * Prohibited using of zero and negative field numbers in ProtoNumber (#2766) + * Improve readability of protobuf decoding exception messages (#2768) (thanks to [xiaozhikang0916](https://github.com/xiaozhikang0916)) + * docs(serializers): Fix grammatical errors (#2779) (thanks to [jamhour1g](https://github.com/jamhour1g)) + * Fixed VerifyError after ProGuard optimization (#2728) + * Add wasm-wasi target to Okio integration (#2727) + 1.7.1 / 2024-06-25 ================== diff --git a/README.md b/README.md index 02ea017b8..1cd0c3ec1 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,8 @@ [![JetBrains official project](https://jb.gg/badges/official.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub) [![GitHub license](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0) [![TeamCity build](https://img.shields.io/teamcity/http/teamcity.jetbrains.com/s/KotlinTools_KotlinxSerialization_Ko.svg)](https://teamcity.jetbrains.com/viewType.html?buildTypeId=KotlinTools_KotlinxSerialization_Ko&guest=1) -[![Kotlin](https://img.shields.io/badge/kotlin-2.0.0-blue.svg?logo=kotlin)](http://kotlinlang.org) -[![Maven Central](https://img.shields.io/maven-central/v/org.jetbrains.kotlinx/kotlinx-serialization-core/1.7.1)](https://central.sonatype.com/artifact/org.jetbrains.kotlinx/kotlinx-serialization-core/1.7.1) +[![Kotlin](https://img.shields.io/badge/kotlin-2.0.20-blue.svg?logo=kotlin)](http://kotlinlang.org) +[![Maven Central](https://img.shields.io/maven-central/v/org.jetbrains.kotlinx/kotlinx-serialization-core/1.7.2)](https://central.sonatype.com/artifact/org.jetbrains.kotlinx/kotlinx-serialization-core/1.7.2) [![KDoc link](https://img.shields.io/badge/API_reference-KDoc-blue)](https://kotlinlang.org/api/kotlinx.serialization/) [![Slack channel](https://img.shields.io/badge/chat-slack-blue.svg?logo=slack)](https://kotlinlang.slack.com/messages/serialization/) @@ -95,8 +95,8 @@ Kotlin DSL: ```kotlin plugins { - kotlin("jvm") version "2.0.0" // or kotlin("multiplatform") or any other kotlin plugin - kotlin("plugin.serialization") version "2.0.0" + kotlin("jvm") version "2.0.20" // or kotlin("multiplatform") or any other kotlin plugin + kotlin("plugin.serialization") version "2.0.20" } ``` @@ -104,8 +104,8 @@ Groovy DSL: ```gradle plugins { - id 'org.jetbrains.kotlin.multiplatform' version '2.0.0' - id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.0' + id 'org.jetbrains.kotlin.multiplatform' version '2.0.20' + id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.20' } ``` @@ -123,7 +123,7 @@ buildscript { repositories { mavenCentral() } dependencies { - val kotlinVersion = "2.0.0" + val kotlinVersion = "2.0.20" classpath(kotlin("gradle-plugin", version = kotlinVersion)) classpath(kotlin("serialization", version = kotlinVersion)) } @@ -134,7 +134,7 @@ Groovy DSL: ```gradle buildscript { - ext.kotlin_version = '2.0.0' + ext.kotlin_version = '2.0.20' repositories { mavenCentral() } dependencies { @@ -164,7 +164,7 @@ repositories { } dependencies { - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.2") } ``` @@ -176,7 +176,7 @@ repositories { } dependencies { - implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1" + implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.2" } ``` @@ -266,8 +266,8 @@ Ensure the proper version of Kotlin and serialization version: ```xml - 2.0.0 - 1.7.1 + 2.0.20 + 1.7.2 ``` diff --git a/gradle.properties b/gradle.properties index f9cd9f269..0cad69ecf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ # group=org.jetbrains.kotlinx -version=1.7.2-SNAPSHOT +version=1.7.3-SNAPSHOT jdk_toolchain_version=11 # This version takes precedence if 'bootstrap' property passed to project kotlin.version.snapshot=2.0.255-SNAPSHOT diff --git a/integration-test/gradle.properties b/integration-test/gradle.properties index b7cf9509a..6880b9919 100644 --- a/integration-test/gradle.properties +++ b/integration-test/gradle.properties @@ -3,7 +3,7 @@ # mainKotlinVersion=2.0.20 -mainLibVersion=1.7.2-SNAPSHOT +mainLibVersion=1.7.3-SNAPSHOT kotlin.code.style=official kotlin.js.compiler=ir