fix: premarshal structs get generated with omitempty tag (#267)

This PR addresses a bug described in #263

Basically, whenever a struct involves a custom genqlient binding, a
secondary "premarshal" struct gets generated.

The bug was that this "premarshal" struct was not propagating the
`omitempty` JSON tags, which was resulting in unexpected behavior.

The fix involved a few changed lines in the Go template, and a few
changes in the unit tests.

I have:
- [x] Written a clear PR title and description (above)
- [x] Signed the [Khan Academy CLA](https://www.khanacademy.org/r/cla)
- [x] Added tests covering my changes, if applicable
- [x] Included a link to the issue fixed, if applicable
- [x] Included documentation, for new features (n/a)
- [x] Added an entry to the changelog
This commit is contained in:
Kevin Chen
2023-05-05 09:05:20 -07:00
committed by GitHub
parent 4073a49614
commit 15f507b8de
8 changed files with 177 additions and 22 deletions
@@ -83,19 +83,19 @@ func (v *MyInput) UnmarshalJSON(b []byte) error {
}
type __premarshalMyInput struct {
Email *string `json:"email"`
Email *string `json:"email,omitempty"`
Name *string `json:"name"`
Name *string `json:"name,omitempty"`
Id *testutil.ID `json:"id"`
Id *testutil.ID `json:"id,omitempty"`
Role *Role `json:"role"`
Role *Role `json:"role,omitempty"`
Names []*string `json:"names"`
Names []*string `json:"names,omitempty"`
HasPokemon *testutil.Pokemon `json:"hasPokemon"`
HasPokemon *testutil.Pokemon `json:"hasPokemon,omitempty"`
Birthdate json.RawMessage `json:"birthdate"`
Birthdate json.RawMessage `json:"birthdate,omitempty"`
}
func (v *MyInput) MarshalJSON() ([]byte, error) {
@@ -264,19 +264,19 @@ func (v *UserQueryInput) UnmarshalJSON(b []byte) error {
}
type __premarshalUserQueryInput struct {
Email *string `json:"email"`
Email *string `json:"email,omitempty"`
Name *string `json:"name"`
Name *string `json:"name,omitempty"`
Id *testutil.ID `json:"id"`
Id *testutil.ID `json:"id,omitempty"`
Role *Role `json:"role"`
Role *Role `json:"role,omitempty"`
Names []*string `json:"names"`
Names []*string `json:"names,omitempty"`
HasPokemon *testutil.Pokemon `json:"hasPokemon"`
HasPokemon *testutil.Pokemon `json:"hasPokemon,omitempty"`
Birthdate json.RawMessage `json:"birthdate"`
Birthdate json.RawMessage `json:"birthdate,omitempty"`
}
func (v *UserQueryInput) MarshalJSON() ([]byte, error) {