Skip to content

Allow exposing CBOR Simple values as JsonToken.VALUE_EMBEDDED_OBJECT with a feature flag #587

Open
@iifawzi

Description

@iifawzi

Hello, currently, we're decoding Simple values from Major type (7) as VALUE_NUMBER_INT Token, where it's better to be decoded using a special type (I agree and assume VALUE_EMBEDDED_OBJECT would work and no need for additional type as commented)

public JsonToken _decodeSimpleValue(int lowBits, int ch) throws IOException {
if (lowBits > 24) {
_invalidToken(ch);
}
if (lowBits < 24) {
_numberInt = lowBits;
} else { // need another byte
if (_inputPtr >= _inputEnd) {
loadMoreGuaranteed();
}
_numberInt = _inputBuffer[_inputPtr++] & 0xFF;
// As per CBOR spec, values below 32 not allowed to avoid
// confusion (as well as guarantee uniqueness of encoding)
if (_numberInt < 32) {
throw _constructError("Invalid second byte for simple value: 0x"
+Integer.toHexString(_numberInt)+" (only values 0x20 - 0xFF allowed)");
}
}
// 25-Nov-2020, tatu: Although ideally we should report these
// as `JsonToken.VALUE_EMBEDDED_OBJECT`, due to late addition
// of handling in 2.12, simple value in 2.12 will be reported
// as simple ints.
_numTypesValid = NR_INT;
return (JsonToken.VALUE_NUMBER_INT);
}

I'm writing this issue so we track it, where we can introduce that change with a feature flag default to false for earlier versions, and true for 3.0 onward.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions