v0.14.0 / 2019-11-19
- Bump version to 0.14.0 @ Kotlin 1.3.60
- Add empty javadoc artifact to linking with Maven Central
- Mark more things as @InternalSerializationApi.
- Support @SerialId on enum members in protobuf encoding
- Move Polymorphic and sealed kinds from UnionKind to special PolymorphicKind
- Sealed classes serialization & generated serializers for enum classes (@SerialInfo support)
- Objects serialization
- Don't use deprecated UTF8<>ByteArray conversions in Native
- Improve error message when static non-generic serializer can't be found
- Support optional values for typesafe config format
v0.13.0 / 2019-09-12
- Add mingwX86 target (#556)
- Replace KClass.simpleName with artificial expect/actual with java.lang.Class.simpleName on JVM to overcome requirement for kotlin-reflect.jar (#549)
- Update Gradle to 5.6.1 (therefore Gradle metadata to 1.0)
- Fix incorrect index supply during map deserialization when READ_ALL was used (#526)
- Serializers for primitive arrays (ByteArray etc)
- Hide NullableSerializer, introduce '.nullable' extension instead
- Fix the library to not create a stack overflow exception when creating a MissingDescriptorException. (#545)
v0.12.0 / 2019-08-23
- Set up linuxArm32Hfp target (#535)
- wasm32 is added as a build target (#518)
- MPP (JVM & Native) serializer resolving from KType (via typeOf()/serializer() function)
- Support maps and objects decoding when map size present in stream (fix #517)
- Add proper SerialClassDescImpl.toString
- Make JSON parser much more stricter; e.g. Prohibit all excessive separators in objects and maps
- Robust JsonArray parsing
- Improve json exceptions, add more contextual information, get rid of obsolete exception types
- Prohibit trailing commas in JSON parser
- Make the baseclass of the polymorphic serializer public to allow formats (#520)
- Fix decoding for ProtoBuf when there are missing properties in the model. (#506)
- Rework JsonException and related subclasses
- Fix #480 (deserialization of complex map keys). Add tests for structured map keys in conjuction with polymorphism
- Implement 'allowStructuredMapKeys' flag. Now this flag is required for serializing into JSON maps which keys are not primitive.
v0.11.1 / 2019-06-19
- Fixed some bugs in compiler plugin for Native (#472, #478) (Kotlin 1.3.40 required)
- Remove dependency on stdlib-jvm from common source set (Fixes #481)
- Fix @UseSerializers argument type and clarify some docs
- Support primitives (ints, strings, JsonLiterals, JsonNull, etc) on a top-level when saving/restoring JSON AST (#451)
- Migrate to the new (Kotlin 1.3) MPP model
- Add @SharedImmutable to default json module. Fixes #441 and #446
v0.11.0 / 2019-04-12
Plugin:
- Semantic change: Now properties with default values are @Optional by default, and properties without backing fields are @Transient by default.
- Allow '@Serializable' on a type usage (fixes #367)
- Auto-applying @Polymorphic for interfaces and serializable abstract classes
- Do not enable PolymorphicSerializer without special annotation
- Fix missing optionality of property when generating descriptor in Native
- Fix impossibility to make @Optional field in a class hierarchy on JS
- Add synthetic companion with .serializer() getter even if default serializer is overridden. (fixes #228)
- Ban primitive arrays in JVM codegen too (fixes #260)
- Don't generate writeSelf/internal constructor if corresponding serialize/deserialize aren't auto-generated
- Support Serializable class hierarchies on Native and JS
- Replace @Optional with @Required
- Support classes with more than 32 serializable properties (fixes #164)
- Make enums and interfaces not serializable internally. However, they still can be serialized using custom companion object. Fixes #138 and #304
Runtime:
- Introduce JsonBuilder and JsonConfiguration as a better mechanism for configuring and changing configuration of the JSON
- Implement polymorphic serialization in JSON using class discriminator key
- Force quoting for map keys (fixes #379)
- Fix bug with endianness in Native for Longs/Doubles
- Do not allow to mutate SerialModule in formats
- Implement multiplatform (JVM, JS and Native) PolymorphicSerializer
- Remove obsolete and poorly designed global class cache. Remove JVM-only PolymorphicSerializer
- Replace old SerialModule with new one which: - Can not be installed, should be passed in format constructor - Has polymorphic resolve and contextual resolve - Has DSL for creation - Immutable, but can be combined or overwritten
- Improve error message for unknown enum constant
- Deprecate @Optional, introduce @Required
- Use long instead of int in JsonLiteralSerializer
- Json and protobuf schemas recording prototype
- Change JsonObject so it would comply to a Map interface: .get should return null for a missing key Incompatibility with standard Map contract may bring a lot of problems, e.g. broken equals.
- Make JsonElementSerializer public
0.10.0 / 2019-01-22
- Migrate to Gradle 4.10 and metadata 0.4
- Update to 1.3.20
- Reorder Json parameter for consistency
- Make JsonElement.toString() consistent with stringify (#325)
- Reader.read(): Int should return -1 on EOF.
- Optimize the Writer.write(String) case.
- Update the docs with new annotations
0.10.0-eap-1 / 2018-12-19
Plugin:
- Support @SerialInfo annotation for Native
- Remove redundant check for 'all parameters are properties' in a case of fully-customized serializer.
- Fix unresolved symbol to SerialDescriptor in KSerializer if it was referenced from user custom serializer code (#290)
- Support for @UseSerializers annotation
- Restrict auto-implementing serializers methods to certain type of classes
- Increase priority of overridden serializer on type (#252)
- Fix instantiation of generic serializers on JS (#244)
- .shouldEncodeElementDefault for JVM (#58)
- Support skipping values equals to defaults in output stream for JS and Native backends (#58)
- Support enums in Native
- Support reference array and context serializers in Native
- Fix order of overriding @Serializable(with) on property: check override, than @ContextualSerialization.
- Support @Transient properties initializers and init blocks in Native
- Better lookup for
serializer()
function in companion for generic classes because user can define a parameterless shorthand one (#228) - Generics serialization in Native
- .getElementDescriptor for JVM, JS and Native
- Respect @ContextualSerialization on file
- Remove auto-applying ContextSerializer. @ContextualSerialization should be used instead.
Runtime:
- Turn around messed endianness names (#308)
- Update to Kotlin 1.3.20 EAP 2
- Get rid of protobuf-platform functions since @SerialInfo annotations are supported now. Auto-assign ids starting with 1 because 0 is not a valid protobuf ID.
- Delegates
equals
, hashCode
of JsonObject
and JsonArray
. - Test for fixed #190 in plugin
- UseSerializers annotation
- Introduce LongAsStringSerializer
- Add validation for parsing dynamic to Long Fixes #274
- Merge pull request #294 from Kotlin/recursive_custom_parsing
- Fix recursive serialization for JsonOutputs/Inputs
- Production-ready JSON API
- Remove ValueTransformer
- Json improvements
- @Serializable support for JsonArray
- @Serializable support for JsonObject
- @Serializable support for JsonNull and JsonPrimitive
- Hide JsonTreeParser, provide Json.parseJson as replacement, implement basic JsonElementSerializer.deserialize
- Migrate the rest of the test on JsonTestBase, implement nullable result in tree json
- Implement custom serializers support for TreeJsonInput
- Implement JsonArray serialization
- Implement strict mode for double in TreeJsonOutput (fixes JsonModesTest)
- Introduce JsonTestBase in order to ensure streaming and tree json compatibility, transient and strict support in TreeJsonInput
- Make JsonElement serializable via common machinery
- Json rework, consolidate different parsing mechanisms, hide implementation details
- Polymorphic serializer improvements
- Renamed identifiers to align with Kotlin's coding conventions. https://kotlinlang.org/docs/reference/coding-conventions.html#naming-rules
- Changed JSON -> Json and CBOR -> Cbor
v0.9.1 / 2018-11-19
- Update lib to 0.9.1/Kotlin to 1.3.10
- Make some clarifications about Gradle plugin DSL and serialization plugin distribution
- Primitive descriptor with overriden name
- Add missing shorthands for float and char serializers (Fixes #263)
- Fix bug where primitive non-string values created by hand and created by parser could be inequal due to a redundant type comparison.
- Don't look at default serializer too early during reflective lookup (Fixes #250)
v0.9.0 / 2018-10-24
- Fix bug where
.simpleName
was not available for primitives' KClasses. - Improve Mapper: it is now a class (with default instance in Companion) which extends AbstractSerialFormat and therefore have context and proper reflectionless API.
- Introduce @ImplicitReflectionSerializer for API which involves reflection.
- Add Boolean.Companion.serializer() extension method.
- Refactor surface API: introduce interfaces for different formats, move some inline functions for serialization start to extensions. As a minor change, now nulls can be serialized at top-level, where it is supported by the format.
- Add AbstractSerialFormat as a base class to all major formats
- Update general readme and versions: Library to 0.9, K/N to 1.0 beta
- Update documentation for the new API
- Updated info about eap13 releases
v0.8.3-rc13 / 2018-10-19
- Set default byte order to BigEndian (to be more platform-independent and get rid of posix.BYTE_ORDER dependency)
- Update Kotlin version to 1.3-RC4
- Remove Gradle metadata from non-native modules
- Add missing targets (Fixes #232)
- Add license, developer and scm information in Maven pom in publication (Fixes #239)
- Add builder for JsonArray
- Redesign and unify exceptions from parsers (Fixes #238)
- Move json parser back to monolith module (drops
jsonparser
artifact) - Little improvement of error messages
Not working until plugin is updated:
- Initial support for skipping defaults: JSON
- Replace choicesNames to Array to be easily instantiated from generated IR
v0.8.2-rc13 / 2018-10-03
- Update to RC-3
- Add @SharedImmutable from K/N to some global declarations in JSON parser, so it is now accessible from multiple workers (Fixes #225)
Not working until plugin is updated:
- Tests for generic descriptors
- Generated serializer and stuff for providing descriptors from plugin
- Tests on @ContextualSerialization on file
v0.8.1-rc13 / 2018-09-24
- Upgrade Kotlin/Native version
v0.8.0-rc13 / 2018-09-19
- Add (currently) no-op annotations to the kibrary for smoother migration
- Update migration guide and versions to RCs.
- Support WildcardType in serializerByTypeToken (#212)
Not working until plugin is updated:
- Added experimental support of reference arrays for Native
v0.7.3-eap-13 / 2018-09-18
- New enum serializing model
- New context: SerialModules draft. Renaming and mutable/immutable hierarchy
- Remove untyped encoding
- Improve serializers resolving by adding primitive serializers. Also add some helper methods to JSON to serialize lists without pain
- Fix protobuf by adapting MapLikeSerializer to HashSetSerializer(MapEntrySerializer). Elements' serializers in collection serializers are now accessible for such adaptions.
- Prohibit NaN and infinite values in JSON strict mode
- Cleanup JSON, reflect opt-in strict mode in naming
- Get rid of StructureKind.SET and StructureKind.ENTRY
- Remove SIZE_INDEX
- Remove inheritance from Encoder and CompositeEncoder
- Working over primitive kinds and enums
- Reworked SerialDescriptor and kinds
- Renaming of ElementValue* and Tagged*
- Renaming: KOutput -> Encoder/CompositeEncoder KInput -> Decoder/CompositeDecoder
- Renaming: KSerialClassDesc -> SerialDescriptor SerialSaver, SerialLoader -> *Strategy
Not working until plugin is updated:
- Provide limited
equals
on collections' descriptors - Support for
isElementOptional
v0.6.2 / 2018-09-12
- Updated Kotlin to 1.2.70 and Kotlin/Native to 0.9
v0.6.1 / 2018-08-06
- Compatibility release for 1.2.60
- Don't throw NoSuchElement if key is missing in the map in
Mapper.readNotNullMark
, because tag can be only prefix for nested object. Fixes #182 - Update ios sample with latest http client
v0.6.0 / 2018-07-13
Plugin:
- Allow @SerialName and @SerialInfo on classes
- Fix resolving serializers for classes from other modules (#153 and #166)
Runtime:
- Use new 0.8 K/N DSL
- Simplify JSON AST API, Provide JSON builder, provide useful extensions, add documentation, update K/N
- Get rid of JsonString to align json primitives with each other. Provide JSON AST pojo parser which exposes current design issues
- [JSON-AST] Introduce non-nullable methods throwing exceptions for getting json elements
- [JSON-AST] Add ability to parse JSONInput element as tree. Symmetric functionality for JsonOutput + JsonTree
- [JSON-AST] Docs writeup
- [JSON-AST] Publishing native artifact on bintray
- [JSON-AST] Saving AST back to JSON
- [JSON-AST] JsonAstMapper to serializable classes
- Remove annoying "for class class" message in not found serializer exception
- Introduce module for benchmarks
- Add notes about snapshot versions
- Tests for bugs fixed in latest published plugin (#118 and #125)
- Auto-assign proto ids using field index
v0.5.1 / 2018-06-13
Plugin:
- Fix 1.2.50 compatibility
- Workaround for recursive resolve on @Serializable(with) and @Serializer(for) pair annotations
- Don't generate additional constructor if @SerialInfo has no properties
- Fix order of resolving serializers: user-overriden should go before polymorphic and default
- While creating descriptors, add type arguments not from serializable class definition but from actual KSerializer implementation. This provides better support for user-defined or external generic serializers
- Don't generate constructor for passing generic serializers if user already defined proper one.
- Respect
@Serializable(with)
on properties on JS too. - Fix for Kotlin/kotlinx.serialization/136
- Fix for Kotlin/kotlinx.serialization/125
- Fix for Kotlin/kotlinx.serialization/118
- Fix for Kotlin/kotlinx.serialization/123: resolve annotation parameters in-place
Runtime:
- Added some shorthands for standard serializers
- Fix for bug #141 that uses an extra boolean to determine whether to write a separating comma rather than assuming that the element with the index 0 is written first(or at all) in all cases.
- Move mode cache to output class to make .stringify stateless and thread-safe (#139)
- Bugfix #95: Can't locate default serializer for classes with named co… (#130)
- Updated versions in docs and examples Add changelog
v0.5.0 / 2018-04-26
- Improve buildscript and bumped kotlin version to 1.2.40
- Remove code warnings
- Add note about different IDEA plugin versions
- Add null check to Companion when looking up serializer.
- Improved performance of JSON.stringify
- Improved performance of JSON.parse
- Added compatibility note
- Fix #107 and #112. #76 awaits next compiler release.
v0.4.2 / 2018-03-07
- Update runtime library version to match plugin version. Update examples to use latest version of compiler, plugin and runtime. Update Gradle to run on build agents with Java 9.
- Fix ProGuard rules docs for serialization of classes with generic types
- Fix ProGuard rules docs for serialization 0.4.1 version
- Add support for @Serializable classes that are private and live out of kotlinx.serialization package. In such case the Companion field is not visible and must be set accessible before use.
- update jvm-example to latest versions