Add a new option to treat an interface like an object (#97)
## Summary: The basic idea here is if you only request interface fields (no fragments) you may not care about the concrete type, and so we could just generate a struct as if it were an object. I don't think it's a good idea to do that by default, because then if you later add a fragment all your code totally changes, but it's quite reasonable as an option! Most of the code involved is just wiring and validation; the core implementation is literally just: treat it like an object. Issue: https://github.com/Khan/genqlient/issues/85 ## Test plan: make check Author: benjaminjkraft Reviewers: csilvers, StevenACoffman, benjaminjkraft, aberkan, dnerdy, jvoll, mahtabsabet, MiguelCastillo Required Reviewers: Approved By: StevenACoffman Checks: ⌛ Test (1.17), ⌛ Test (1.16), ⌛ Test (1.15), ⌛ Test (1.14), ⌛ Lint, ⌛ Test (1.17), ⌛ Test (1.16), ⌛ Test (1.15), ⌛ Test (1.14), ⌛ Lint Pull Request URL: https://github.com/Khan/genqlient/pull/97
This commit is contained in:
@@ -54,6 +54,22 @@ directive genqlient(
|
||||
# zero value and null (for nullable fields).
|
||||
pointer: Boolean
|
||||
|
||||
# If set, this field will use a struct type in Go, even if it's an interface.
|
||||
#
|
||||
# This is useful when you have a query like
|
||||
# query MyQuery {
|
||||
# myInterface { myField }
|
||||
# }
|
||||
# where you are requesting only shared fields of an interface. By default,
|
||||
# genqlient still generates an interface type, for consistency. But this
|
||||
# isn't necessary: a struct would do just fine since there are no
|
||||
# type-specific fields. Setting `struct: true` tells genqlient to do that.
|
||||
#
|
||||
# Note that this is only allowed when there are no fragments in play, such
|
||||
# that all fields are on the interface type. Note that if you later add a
|
||||
# fragment, you'll have to remove this option, and the types will change.
|
||||
struct: Boolean
|
||||
|
||||
# If set, this argument or field will use the given Go type instead of a
|
||||
# genqlient-generated type.
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user