feat: add DecodeSquash functional option helper for Unmarshal#2133
Open
HarshalPatel1972 wants to merge 1 commit into
Open
feat: add DecodeSquash functional option helper for Unmarshal#2133HarshalPatel1972 wants to merge 1 commit into
HarshalPatel1972 wants to merge 1 commit into
Conversation
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adds an explicit decoder option to control mapstructure “squash” behavior during Unmarshal, and validates it with a regression test for embedded unexported structs.
Changes:
- Introduces
DecodeSquash(bool)as aDecoderConfigOptionto togglemapstructure.DecoderConfig.Squash. - Adds a unit test covering unmarshalling into a struct that embeds an unexported struct with squash enabled.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| viper.go | Adds DecodeSquash option to enable/disable squashing embedded fields during decode. |
| viper_test.go | Adds a regression test ensuring squashed decoding works with an embedded unexported struct. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
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 #1624
Summary
Introduces an idiomatic, functional
DecoderConfigOptionhelper namedDecodeSquashto allow developers to programmatically opt-in to squashing embedded/anonymous structures during theUnmarshaldecoding pipeline.Changes
DecodeSquash(squash bool) DecoderConfigOptionhelper insideviper.goto mutate the underlyingmapstructure.DecoderConfig.Squashfield context.TestUnmarshalEmbeddedUnexportedStructinsideviper_test.goto validate successful promoted field traversal without relying on manualmapstructure:",squash"struct tags.Motivation
By default, the underlying reflection engine (
mitchellh/mapstructure) completely ignores fields inside nested unexported embedded structures unless explicit global squashing is toggled. Setting global squashing inside the core configuration would be a breaking change for developers relying on deeply nested, non-flattened keys.Providing
DecodeSquashgives developers a clean, surgical, opt-in mechanism right inside individualUnmarshalparameters without altering global configuration semantics.Tested on
go test ./... -vpasses cleanly with zero regressions).