Add support for jackson field ids#868
Conversation
msgpack-jackson/src/main/java/org/msgpack/jackson/dataformat/MessagePackGenerator.java
Outdated
Show resolved
Hide resolved
|
@komamitsu @xerial Can CI be run on this PR to show the failing test? Then I'll follow-up with the implementation changes. |
|
@komamitsu @xerial Another CI run please 🙏 |
|
🔨 Build failed with test showcasing new edge case. Will now demonstrate passing test with implementation changes. |
|
@komamitsu @xerial This is ready for another CI run to showcase the new test passing. |
| @Override | ||
| public void writeFieldId(long id) throws IOException | ||
| { | ||
| addKeyNode(id); |
There was a problem hiding this comment.
@komamitsu @xerial For backwards compatibility, I imagine we need some sort of feature flag that defaults to the prior implementation. Do you guys have any suggestions for how that flag should be defined? Should I just use the MessagePack.PackerConfig, or should I pass it directly from the MessagePackFactory to the MessagePackGenerator?
| addKeyNode(id); | |
| if (writeIntegerMapKeysAsStringKeys) { | |
| super.writeFieldId(id); | |
| } else { | |
| addKeyNode(id); | |
| } |
There was a problem hiding this comment.
Sorry, for the delayed reply. PackerConfig is for the core configuration and shouldn't be used for jackson-dataformat-msgpack. I think it's okay to pass the flag like reuseResource.
|
@komamitsu @xerial This is ready for a final draft review. I added a test to show backwards compatibility with new feature flag. |
msgpack-jackson/src/main/java/org/msgpack/jackson/dataformat/MessagePackGenerator.java
Outdated
Show resolved
Hide resolved
msgpack-jackson/src/main/java/org/msgpack/jackson/dataformat/MessagePackGenerator.java
Outdated
Show resolved
Hide resolved
|
@komamitsu Thanks for the review. All comments addressed. |
|
@brenbar Thanks! LGTM 👍 After reviewing all the changes, |
|
@komamitsu I think your feedback is fair 😅 Ready again for review 👍 |
Background
Jackson core has interfaces for field ids. This is a great opportunity for msgpack, since the protocol allows for integer keys, enabling more advanced binary serialization strategies for further reduced message size.
Current implementation of msgpack-jackson only allows for coercing strings to integers. Implementing the formal interfaces will enable end-to-end map serialization with mixed string/integer keys. Other msgpack implementations already support this.
Summary of Changes
KeyDeserializerto deserialize field ids.