Support Optional[Raw] when decoding JSON and MessagePack - #1155
Open
DSeaStar wants to merge 1 commit into
Open
Conversation
Raw was stored with a type mask of 0, so Optional[Raw] never recorded MS_TYPE_NONE and json/msgpack decode treated null as a Raw payload. Give Raw its own type flag, allow it only in a union with None, and decode null as None while leaving other values as Raw.
DSeaStar
had a problem deploying
to
docs-preview
August 14, 2026 20:03 — with
GitHub Actions
Failure
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.
Fixes #659.
msgspec.Rawwas collected with a type mask of 0, soOptional[Raw]/Raw | Nonenever recordedMS_TYPE_NONE. JSON and MessagePack then treatednullas aRawpayload (b"null") instead ofNone, which is the reproduction in #659.This follows the design from the issue:
Rawis allowed in a union only withNone.nulldecodes asNone; any other value decodes asRaw. Unions such asRaw | intnow raiseTypeError, matching the existing custom-type restriction.Changes:
Rawits ownMS_TYPE_RAWflag and reject unsupportedRawunions at type-collection time.null/ MessagePack nil when decodingRaw | None.Raw | Noneinconvert.converttests for thenulland non-null cases.