Replace custom reflect.Struct logic with logic from encoding/json #667
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.
This PR replaces the existing custom struct reflection logic with the logic from encoding/json.
The code is taken from https://cs.opensource.google/go/go/+/refs/tags/go1.20:src/encoding/json/encode.go;l=1212. It was simplified a bit to remove unneeded code and fields. The core logic is still untouched.
Pros:
Cons:
For example, if you supply the same tag twice, the new logic will drop it completely. Luckily, this will be caught by the logic in the upper layers ("Object defines fields not found in struct: ...") so this might not be such a big deal?
There are definitely some trade-offs here. I just needed it to support embedded structs (closes #242) but found that implementing that would be far more difficult than just replacing the logic with the existing logic from the stdlib.
Let me know what you think!