Fix for nested fields backed by map or interface #854
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.
In order to support distinguishing between null and missing values in GraphQL, gqlgen allows binding GraphQL types to
map[string]interface{}
. However, currently those types can't be embedded in generated models because model generation doesn't know about the special cases in type binding that make it work. Trying with master or v0.9.3 gives the errormodelgen: package cannot be nil
.In order to fix this, this PR makes two changes:
Check for a type name of
interface{}
andmap[string]interface{}
inBinder.FindType
. I added a variant function that takes responsibility for splitting the package and type names, but the old function is still there for backwards compatibility.Extend the nilable type logic used in codegen for the executor to model field generation, so that an optional GraphQL value is bound to a field of type
map[string]interface{}
instead of*map[string]interface{}
. In order to maintain backwards compatibility, this change only applies to the special cases where the map or interface type is specified directly in the gqlgen config, not to other Go types that have an underlying nilable type.I have: