fix: widen ScoreAnswer.legend to Map<String, Object> for object and array levels - #13
Merged
Merged
Conversation
…evels read back Score levels are sent as any JSON value and the API echoes them back as sent, but the legend was typed Map<String, String>. A Score with an object or array level, including the one in Score's own javadoc example, failed the whole response and every other answer with it (#11).
garretpremo
added a commit
that referenced
this pull request
Sep 22, 2026
Choice<E> and ChoiceAnswer<E> carry the label type: build a question from an enum's constants and read the answer back as that enum, with probabilities keyed by it. String labels are unchanged. ChoiceAnswer's type parameter changes the erased return type of choice(), so consumers of 0.4.0 and earlier must recompile (#10, #15). ScoreAnswer.legend is Map<String, Object>, so a Score with an object or array level no longer fails the whole response (#11, #13). A response missing usage, or a usage missing a token count, fails with a TypeSafeException naming the field instead of reading as null or 0 (#12, #14). READMEs point at 0.5.0.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation:
Scorelevels are sent as any JSON value (List<Object>), and the API echoes them back inlegendas sent.ScoreAnswer.legendwasMap<String, String>, so aScorewith an object or array level, including the one inScore's own javadoc example, failed the whole response withCannot deserialize value of type java.lang.String from Object value, taking every other answer andusagewith it. The API schema and both official SDKs allow string, object, or array legend values.Changes:
ScoreAnswer.legendwidened toMap<String, Object>in the record and its Jackson creatorBinary-compatible under erasure; source-breaking only where a legend value was assigned directly to a
String.Fixes #11