Make Union deserialization algorithm more robust #256
Merged
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.
Closes #42, #221, #252, #255
This PR brings a new type of expression
TypeMatchEligibleExpression
. It conveys that the expression built for aValueSpec
is eligible for direct processing the value if the type matches, but doesn’t guarantee that it will always be processed that way. This information is used inUnion
deserialization algorithm to return the input value as is only when its type is in the list of expected types. The order of variant types still matters. The following value types will haveTypeMatchEligibleExpression
:str
bool
int
float
NoneType
If the input value type doesn't match any of the expected types, it will be processed as before or as written below.
This PR also changes the way how
str
,bool
andNoneType
values are processed on deserialization outside onUnion
:str
value will processed asstr(value)
bool
value will be processed asbool(value)
NoneType
value will always beNone
regardless of the input valueSome examples: