amazon-ion / ion-element-kotlin

IonElement is an immutable in-memory representation of the Ion data format. IonElement's API is idiomatic to Kotlin.
Apache License 2.0
8 stars 7 forks source link

Deprecate buildStruct() in favor of idiomatic ionStructOf() overloads #99

Closed popematt closed 4 months ago

popematt commented 4 months ago

Issue #, if available:

None

Description of changes:

It was brought to my attention that the buildStruct() function, when used from Java, requires the lambda expression to return Unit.INSTANCE, which is really ugly for Java consumers of this library.

I've marked the buildStruct() function as deprecated, and replaced it with ionStructOf() overloads—one for Java that accepts Consumer<MutableStructFields> and one that is hidden from Java that accepts MutableStructFields.() -> Unit.

While I was making these changes, I discovered that the package directive in the "demo" test cases did not match the file location, so I fixed those as well.

I also fixed some doc comments in MutableStructFields.

Finally, I also realized that MutableStructFields would be a little nicer to use from Java if it was a proper builder class (i.e. with methods that return this). I've created #98 because I don't know whether it's worth adding yet another way to create a struct, and completely replacing MutableStructFields would be a breaking change.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.