Files
genqlient/generate/testdata/snapshots/TestGenerate-Recursion.graphql-Recursion.graphql.go
T
Ben KraftandGitHub fcae8dd1d7 Add support for specifying type-names, and conflict-detection (#94)
## Summary:
In this commit I add two related features to genqlient:
conflict-detection to avoid generating two distinct types with the same
name, and an option to specify the type-name genqlient should use for
some type.

The conflict-detection was pretty simple once I realized I had already
written all the code to do it in #70.  There was a bunch of wiring,
since we now need to keep track of the GraphQL type/selection-set that
each type corresponds to, but it was pretty straightforward.  This
allows us to:
- detect and reject if you have really sneaky type-names (there are some
  examples documented in `names.go`)
- more clearly crash if genqlient accidentally generates two conflicting
  types, and
- avoid stack-overflow when handing recursive (input) types (although
  sadly the poor support for options on input types (#14) makes them
  difficult to use in many cases; you really need to be able to set
  `pointer: true`)

And with that all set up, the type-naming was also easy!  (It doesn't
have to get into the core of the type-generator, just plug in where we
choose names.  The desire for conflict detection was the main reason I
hadn't set it up already.)  Note that the existing limitation of #70 that
the fields have to be in exactly the same order remains (and is now
documented as #93); it's not deeply hard to fix but it's surprisingly
much work.

Issue: https://github.com/Khan/genqlient/issues/60
Issue: https://github.com/Khan/genqlient/issues/12

## Test plan:
make check


Author: benjaminjkraft

Reviewers: StevenACoffman, jvoll, benjaminjkraft, aberkan, csilvers, dnerdy, mahtabsabet, MiguelCastillo

Required Reviewers: 

Approved By: StevenACoffman, jvoll

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/94
2021-09-15 18:06:43 -07:00

72 lines
1.7 KiB
Go

package test
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
import (
"github.com/Khan/genqlient/graphql"
"github.com/Khan/genqlient/internal/testutil"
)
// RecursionRecurRecursive includes the requested fields of the GraphQL type Recursive.
type RecursionRecurRecursive struct {
Rec RecursionRecurRecursiveRecRecursive `json:"rec"`
}
// RecursionRecurRecursiveRecRecursive includes the requested fields of the GraphQL type Recursive.
type RecursionRecurRecursiveRecRecursive struct {
Rec RecursionRecurRecursiveRecRecursiveRecRecursive `json:"rec"`
}
// RecursionRecurRecursiveRecRecursiveRecRecursive includes the requested fields of the GraphQL type Recursive.
type RecursionRecurRecursiveRecRecursiveRecRecursive struct {
Rec RecursionRecurRecursiveRecRecursiveRecRecursiveRecRecursive `json:"rec"`
}
// RecursionRecurRecursiveRecRecursiveRecRecursiveRecRecursive includes the requested fields of the GraphQL type Recursive.
type RecursionRecurRecursiveRecRecursiveRecRecursiveRecRecursive struct {
Id testutil.ID `json:"id"`
}
// RecursionResponse is returned by Recursion on success.
type RecursionResponse struct {
Recur RecursionRecurRecursive `json:"recur"`
}
type RecursiveInput struct {
Rec []RecursiveInput `json:"rec"`
}
func Recursion(
client graphql.Client,
input RecursiveInput,
) (*RecursionResponse, error) {
variables := map[string]interface{}{
"input": input,
}
var err error
var retval RecursionResponse
err = client.MakeRequest(
nil,
"Recursion",
`
query Recursion ($input: RecursiveInput!) {
recur(input: $input) {
rec {
rec {
rec {
id
}
}
}
}
}
`,
&retval,
variables,
)
return &retval, err
}