Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 1 commit into from
Jul 25, 2024

Conversation

popematt
Copy link
Contributor

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.

Copy link

@rmarrowstone rmarrowstone left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is good. Also appreciate the kdoc and demo structure improvements.

billiards: 30,
pingPong: 200,
}
val expected = ionStructOf {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, very fluent.

@@ -45,24 +45,32 @@ public interface MutableStructFields : MutableCollection<StructField> {
*/
public fun add(fieldName: String, value: IonElement): Boolean

/** Adds the given field to the collection. The collection may have multiple fields with the same name.
/**

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing these as well.

@popematt popematt merged commit c2957eb into amazon-ion:master Jul 25, 2024
3 checks passed
@popematt popematt mentioned this pull request Sep 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants