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:
@@ -209,6 +209,8 @@ func (g *generator) preprocessQueryDocument(doc *ast.QueryDocument) {
|
||||
// needed). Note this does mean abstract-typed fragments spread into
|
||||
// object-typed scope will *not* have access to `__typename`, but they
|
||||
// indeed don't need it, since we do know the type in that context.
|
||||
// TODO(benkraft): We should omit __typename if you asked for
|
||||
// `# @genqlient(struct: true)`.
|
||||
observers.OnField(func(_ *validator.Walker, field *ast.Field) {
|
||||
// We are interested in a field from the query like
|
||||
// field { subField ... }
|
||||
|
||||
Reference in New Issue
Block a user