handle nested lists correctly

This commit is contained in:
Ben Kraft
2021-04-15 17:49:09 -07:00
parent e82a32f47a
commit 40fc7fdbc5
5 changed files with 45 additions and 2 deletions
+3
View File
@@ -0,0 +1,3 @@
query ListOfListsOfLists {
listOfListsOfLists
}
+29
View File
@@ -0,0 +1,29 @@
package test
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
import (
"github.com/Khan/genqlient/graphql"
)
type ListOfListsOfListsResponse struct {
ListOfListsOfLists [][][]string `json:"listOfListsOfLists"`
}
func ListOfListsOfLists(
client graphql.Client,
) (*ListOfListsOfListsResponse, error) {
var retval ListOfListsOfListsResponse
err := client.MakeRequest(
nil,
"ListOfListsOfLists",
`
query ListOfListsOfLists {
listOfListsOfLists
}
`,
&retval,
nil,
)
return &retval, err
}
@@ -0,0 +1,9 @@
{
"operations": [
{
"operationName": "ListOfListsOfLists",
"query": "\nquery ListOfListsOfLists {\n\tlistOfListsOfLists\n}\n",
"sourceLocation": "testdata/queries/ListOfListsOfLists.graphql"
}
]
}
+1
View File
@@ -67,6 +67,7 @@ type Query {
convert(dt: DateTime!, tz: String): DateTime!
maybeConvert(dt: DateTime, tz: String): DateTime
getJunk: Junk
listOfListsOfLists: [[[String!]!]!]!
}
type Mutation {
+3 -2
View File
@@ -292,14 +292,15 @@ func (builder *typeBuilder) writeType(name, namePrefix string, typ *ast.Type, fi
// gqlgen does slightly different things here, but its implementation may
// be useful to crib from:
// https://github.com/99designs/gqlgen/blob/master/plugin/modelgen/models.go#L113
if typ.Elem != nil { // XXX: this should be for, not if
for typ.Elem != nil {
// Type is a list.
builder.WriteString("[]")
typ = typ.Elem
}
if options.GetPointer() {
// TODO: this does []*T, you might in principle want *[]T or
// *[]*T. We could add a "sliceptr" option if it comes up.
// *[]*T. We could add a "sliceptr" option if it comes up (that's
// still not correct if you wanted *[][]*[]T, but, like, tough luck).
builder.WriteString("*")
}