Clean up, test, and document ContextType and ClientGetter options (#77)
## Summary: ContextType is in use at Khan as a part of our ka-context system; it basically just lets you configure the type to pass as the `ctx` argument to genqlient helpers (or say to omit such an argument). ClientGetter I wrote thinking we might use it; then we didn't (because we have a few different clients we may use) but it's not much code and may be helpful to others. In this commit I clean up, document, and add tests for both options. The cleanup is mainly for ClientGetter, which was kind of broken before because it was a Go snippet but couldn't specify imports. I was thinking maybe you want to be able to write `ctx.Something()`, but I just don't see how to make it work, so I made it a function of context, which is probably the better idea anyway. Additionally, I improved the documentation for both, and added tests for those and several other config options that weren't completely tested. Fixes #5. Issue: https://github.com/Khan/genqlient/issues/5 ## Test plan: make check Author: benjaminjkraft Reviewers: dnerdy, aberkan, MiguelCastillo Required Reviewers: Approved By: dnerdy Checks: ✅ Test (1.17), ✅ Test (1.16), ✅ Test (1.15), ✅ Test (1.14), ✅ Test (1.13), ✅ Lint, ✅ Test (1.17), ✅ Test (1.16), ✅ Test (1.15), ✅ Test (1.14), ✅ Test (1.13), ✅ Lint Pull Request URL: https://github.com/Khan/genqlient/pull/77
This commit is contained in:
@@ -47,8 +47,10 @@ func getViewer(
|
||||
ctx context.Context,
|
||||
client graphql.Client,
|
||||
) (*getViewerResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval getViewerResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"getViewer",
|
||||
`
|
||||
@@ -75,8 +77,10 @@ func getUser(
|
||||
"Login": login,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval getUserResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"getUser",
|
||||
`
|
||||
|
||||
+21
-8
@@ -53,16 +53,29 @@ type Config struct {
|
||||
// Generated
|
||||
Package string `yaml:"package"`
|
||||
|
||||
// Set to the fully-qualified name of a type which generated helpers should
|
||||
// accept and use as the context.Context for HTTP requests. Defaults to
|
||||
// context.Context; set to the empty string to omit context entirely.
|
||||
// Set to the fully-qualified name of a Go type which generated helpers
|
||||
// should accept and use as the context.Context for HTTP requests.
|
||||
//
|
||||
// Defaults to context.Context; set to the empty string to omit context
|
||||
// entirely (i.e. use context.Background()). Must be a type which
|
||||
// implements context.Context.
|
||||
ContextType string `yaml:"context_type"`
|
||||
|
||||
// If set, a snippet of Go code to get a *graphql.Client from the context
|
||||
// (which will be named ctx). For example, this might do
|
||||
// ctx.Value(myKey).(*graphql.Client). If omitted, client must be
|
||||
// passed to each method explicitly.
|
||||
// TODO(#5): This is a bit broken, fix it.
|
||||
// If set, a function to get a graphql.Client, perhaps from the context.
|
||||
// By default, the client must be passed explicitly to each genqlient
|
||||
// generated query-helper.
|
||||
//
|
||||
// This is useful if you have a shared client, either a global, or
|
||||
// available from context, and don't want to pass it explicitly. In this
|
||||
// case the signature of the genqlient-generated helpers will omit the
|
||||
// `graphql.Context` and they will call this function instead.
|
||||
//
|
||||
// Must be the fully-qualified name of a function which accepts a context
|
||||
// (of the type configured as ContextType (above), which defaults to
|
||||
// `context.Context`, or a function of no arguments if ContextType is set
|
||||
// to the empty string) and returns (graphql.Client, error). If the
|
||||
// client-getter returns an error, the helper will return the error
|
||||
// without making a query.
|
||||
ClientGetter string `yaml:"client_getter"`
|
||||
|
||||
// A map from GraphQL type name to Go fully-qualified type name to override
|
||||
|
||||
+22
-11
@@ -7,6 +7,7 @@ package generate
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"go/format"
|
||||
"sort"
|
||||
"strings"
|
||||
@@ -66,7 +67,7 @@ type argument struct {
|
||||
Options *GenqlientDirective
|
||||
}
|
||||
|
||||
func newGenerator(config *Config, schema *ast.Schema) *generator {
|
||||
func newGenerator(config *Config, schema *ast.Schema) (*generator, error) {
|
||||
g := generator{
|
||||
Config: config,
|
||||
typeMap: map[string]goType{},
|
||||
@@ -76,20 +77,26 @@ func newGenerator(config *Config, schema *ast.Schema) *generator {
|
||||
schema: schema,
|
||||
}
|
||||
|
||||
if g.Config.ClientGetter == "" {
|
||||
_, err := g.addRef("github.com/Khan/genqlient/graphql.Client")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
_, err := g.addRef("github.com/Khan/genqlient/graphql.Client")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if g.Config.ContextType != "" {
|
||||
_, err := g.addRef(g.Config.ContextType)
|
||||
|
||||
if g.Config.ClientGetter != "" {
|
||||
_, err := g.addRef(g.Config.ClientGetter)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return nil, fmt.Errorf("invalid client_getter: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
return &g
|
||||
if g.Config.ContextType != "" {
|
||||
_, err := g.addRef(g.Config.ContextType)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid context_type: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
return &g, nil
|
||||
}
|
||||
|
||||
func (g *generator) Types() (string, error) {
|
||||
@@ -305,7 +312,11 @@ func Generate(config *Config) (map[string][]byte, error) {
|
||||
// Step 2: For each operation, convert it into data structures representing
|
||||
// Go types (defined in types.go). The bulk of this logic is in
|
||||
// convert.go.
|
||||
g := newGenerator(config, schema)
|
||||
g, err := newGenerator(config, schema)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, op := range document.Operations {
|
||||
if err = g.addOperation(op); err != nil {
|
||||
return nil, err
|
||||
|
||||
+120
-17
@@ -18,6 +18,36 @@ const (
|
||||
errorsDir = "testdata/errors"
|
||||
)
|
||||
|
||||
// buildGoFile returns an error if the given Go code is not valid.
|
||||
//
|
||||
// namePrefix is used for the temp-file, and is just for debugging.
|
||||
func buildGoFile(namePrefix string, content []byte) error {
|
||||
// We need to put this within the current module, rather than in
|
||||
// /tmp, so that it can access internal/testutil.
|
||||
f, err := ioutil.TempFile("./testdata/tmp", namePrefix+"_*.go")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
f.Close()
|
||||
os.Remove(f.Name())
|
||||
}()
|
||||
|
||||
_, err = f.Write(content)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
cmd := exec.Command("go", "build", f.Name())
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
err = cmd.Run()
|
||||
if err != nil {
|
||||
return fmt.Errorf("generated code does not compile: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// TestGenerate is a snapshot-based test of code-generation.
|
||||
//
|
||||
// This file just has the test runner; the actual data is all in
|
||||
@@ -91,29 +121,102 @@ func TestGenerate(t *testing.T) {
|
||||
"https://github.com/Khan/genqlient/issues/43")
|
||||
}
|
||||
|
||||
goContent := generated[goFilename]
|
||||
// We need to put this within the current module, rather than in
|
||||
// /tmp, so that it can access internal/testutil.
|
||||
f, err := ioutil.TempFile("./testdata/tmp", sourceFilename+"_*.go")
|
||||
err := buildGoFile(sourceFilename, generated[goFilename])
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
t.Error(err)
|
||||
}
|
||||
defer func() {
|
||||
f.Close()
|
||||
os.Remove(f.Name())
|
||||
}()
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
_, err = f.Write(goContent)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
// TestGenerateWithConfig tests several configuration options that affect
|
||||
// generated code but don't require particular query structures to test.
|
||||
//
|
||||
// It runs a simple query from TestGenerate with several different genqlient
|
||||
// configurations. It uses snapshots, just like TestGenerate.
|
||||
func TestGenerateWithConfig(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
fakeConfigFilename string
|
||||
config *Config // omits Schema and Operations, set below.
|
||||
}{
|
||||
{"DefaultConfig", "genqlient.yaml", defaultConfig},
|
||||
{"Subpackage", "genqlient.yaml", &Config{
|
||||
Generated: "mypkg/myfile.go",
|
||||
ContextType: "context.Context", // (from defaultConfig)
|
||||
}},
|
||||
{"SubpackageConfig", "mypkg/genqlient.yaml", &Config{
|
||||
Generated: "myfile.go", // (relative to genqlient.yaml)
|
||||
ContextType: "context.Context",
|
||||
}},
|
||||
{"PackageName", "genqlient.yaml", &Config{
|
||||
Generated: "myfile.go",
|
||||
Package: "mypkg",
|
||||
ContextType: "context.Context",
|
||||
}},
|
||||
{"ExportOperations", "genqlient.yaml", &Config{
|
||||
Generated: "generated.go",
|
||||
ExportOperations: "operations.json",
|
||||
ContextType: "context.Context",
|
||||
}},
|
||||
{"CustomContext", "genqlient.yaml", &Config{
|
||||
Generated: "generated.go",
|
||||
ContextType: "github.com/Khan/genqlient/internal/testutil.MyContext",
|
||||
}},
|
||||
{"NoContext", "genqlient.yaml", &Config{
|
||||
Generated: "generated.go",
|
||||
ContextType: "",
|
||||
}},
|
||||
{"ClientGetter", "genqlient.yaml", &Config{
|
||||
Generated: "generated.go",
|
||||
ClientGetter: "github.com/Khan/genqlient/internal/testutil.GetClientFromContext",
|
||||
ContextType: "context.Context",
|
||||
}},
|
||||
{"ClientGetterCustomContext", "genqlient.yaml", &Config{
|
||||
Generated: "generated.go",
|
||||
ClientGetter: "github.com/Khan/genqlient/internal/testutil.GetClientFromMyContext",
|
||||
ContextType: "github.com/Khan/genqlient/internal/testutil.MyContext",
|
||||
}},
|
||||
{"ClientGetterNoContext", "genqlient.yaml", &Config{
|
||||
Generated: "generated.go",
|
||||
ClientGetter: "github.com/Khan/genqlient/internal/testutil.GetClientFromNowhere",
|
||||
ContextType: "",
|
||||
}},
|
||||
}
|
||||
|
||||
sourceFilename := "SimpleQuery.graphql"
|
||||
|
||||
for _, test := range tests {
|
||||
config := test.config
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
err := config.ValidateAndFillDefaults(
|
||||
filepath.Join(dataDir, test.fakeConfigFilename))
|
||||
config.Schema = filepath.Join(dataDir, "schema.graphql")
|
||||
config.Operations = []string{filepath.Join(dataDir, sourceFilename)}
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
generated, err := Generate(config)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
for filename, content := range generated {
|
||||
t.Run(filename, func(t *testing.T) {
|
||||
testutil.Cupaloy.SnapshotT(t, string(content))
|
||||
})
|
||||
}
|
||||
|
||||
t.Run("Build", func(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("skipping build due to -short")
|
||||
}
|
||||
|
||||
cmd := exec.Command("go", "build", f.Name())
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
err = cmd.Run()
|
||||
err := buildGoFile(sourceFilename,
|
||||
generated[config.Generated])
|
||||
if err != nil {
|
||||
t.Fatal(fmt.Errorf("generated code does not compile: %w", err))
|
||||
t.Error(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
@@ -43,9 +43,18 @@ func {{.Name}}(
|
||||
}
|
||||
{{end}}
|
||||
{{end}}
|
||||
{{end -}}
|
||||
|
||||
var err error
|
||||
{{if $.Config.ClientGetter -}}
|
||||
client, err := {{ref $.Config.ClientGetter}}({{if $.Config.ContextType}}ctx{{else}}{{end}})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
{{end}}
|
||||
|
||||
var retval {{.ResponseName}}
|
||||
err := {{if $.Config.ClientGetter}}{{$.Config.ClientGetter}}{{else}}client{{end}}.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
{{if $.Config.ContextType}}ctx{{else}}nil{{end}},
|
||||
"{{.Name}}",
|
||||
`{{.Body}}`,
|
||||
|
||||
+3
-1
@@ -872,8 +872,10 @@ type ComplexInlineFragmentsRootTopic struct {
|
||||
func ComplexInlineFragments(
|
||||
client graphql.Client,
|
||||
) (*ComplexInlineFragmentsResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval ComplexInlineFragmentsResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"ComplexInlineFragments",
|
||||
`
|
||||
|
||||
+3
-1
@@ -23,8 +23,10 @@ func convertTimezone(
|
||||
"tz": tz,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval convertTimezoneResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"convertTimezone",
|
||||
`
|
||||
|
||||
+3
-1
@@ -15,8 +15,10 @@ type EmptyInterfaceResponse struct {
|
||||
func EmptyInterface(
|
||||
client graphql.Client,
|
||||
) (*EmptyInterfaceResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval EmptyInterfaceResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"EmptyInterface",
|
||||
`
|
||||
|
||||
+3
-1
@@ -46,8 +46,10 @@ func InputEnumQuery(
|
||||
"role": role,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval InputEnumQueryResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"InputEnumQuery",
|
||||
`
|
||||
|
||||
+3
-1
@@ -64,8 +64,10 @@ func InputObjectQuery(
|
||||
"query": query,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval InputObjectQueryResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"InputObjectQuery",
|
||||
`
|
||||
|
||||
Vendored
+3
-1
@@ -333,8 +333,10 @@ type InterfaceListFieldWithPointerTopicChildrenVideo struct {
|
||||
func InterfaceListField(
|
||||
client graphql.Client,
|
||||
) (*InterfaceListFieldResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval InterfaceListFieldResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"InterfaceListField",
|
||||
`
|
||||
|
||||
+3
-1
@@ -343,8 +343,10 @@ type InterfaceListOfListOfListsFieldWithPointerVideo struct {
|
||||
func InterfaceListOfListOfListsField(
|
||||
client graphql.Client,
|
||||
) (*InterfaceListOfListOfListsFieldResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval InterfaceListOfListOfListsFieldResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"InterfaceListOfListOfListsField",
|
||||
`
|
||||
|
||||
Vendored
+3
-1
@@ -334,8 +334,10 @@ type InterfaceNestingRootTopicChildrenVideo struct {
|
||||
func InterfaceNesting(
|
||||
client graphql.Client,
|
||||
) (*InterfaceNestingResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval InterfaceNestingResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"InterfaceNesting",
|
||||
`
|
||||
|
||||
+3
-1
@@ -430,8 +430,10 @@ type InterfaceNoFragmentsQueryWithPointerVideo struct {
|
||||
func InterfaceNoFragmentsQuery(
|
||||
client graphql.Client,
|
||||
) (*InterfaceNoFragmentsQueryResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval InterfaceNoFragmentsQueryResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"InterfaceNoFragmentsQuery",
|
||||
`
|
||||
|
||||
+3
-1
@@ -35,8 +35,10 @@ func ListInputQuery(
|
||||
"names": names,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval ListInputQueryResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"ListInputQuery",
|
||||
`
|
||||
|
||||
Vendored
+3
-1
@@ -14,8 +14,10 @@ type ListOfListsOfListsResponse struct {
|
||||
func ListOfListsOfLists(
|
||||
client graphql.Client,
|
||||
) (*ListOfListsOfListsResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval ListOfListsOfListsResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"ListOfListsOfLists",
|
||||
`
|
||||
|
||||
+3
-1
@@ -103,8 +103,10 @@ func OmitEmptyQuery(
|
||||
variables["tz"] = tz
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval OmitEmptyQueryResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"OmitEmptyQuery",
|
||||
`
|
||||
|
||||
+3
-1
@@ -91,8 +91,10 @@ func PointersQuery(
|
||||
"tz": tz,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval PointersQueryResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"PointersQuery",
|
||||
`
|
||||
|
||||
+3
-1
@@ -91,8 +91,10 @@ func PointersQuery(
|
||||
"tz": tz,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval PointersQueryResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"PointersQuery",
|
||||
`
|
||||
|
||||
+3
-1
@@ -45,8 +45,10 @@ func GetPokemonSiblings(
|
||||
"input": input,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval GetPokemonSiblingsResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"GetPokemonSiblings",
|
||||
`
|
||||
|
||||
+3
-1
@@ -34,8 +34,10 @@ type QueryWithAliasUser struct {
|
||||
func QueryWithAlias(
|
||||
client graphql.Client,
|
||||
) (*QueryWithAliasResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval QueryWithAliasResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"QueryWithAlias",
|
||||
`
|
||||
|
||||
+3
-1
@@ -34,8 +34,10 @@ type QueryWithDoubleAliasUser struct {
|
||||
func QueryWithDoubleAlias(
|
||||
client graphql.Client,
|
||||
) (*QueryWithDoubleAliasResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval QueryWithDoubleAliasResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"QueryWithDoubleAlias",
|
||||
`
|
||||
|
||||
+3
-1
@@ -53,8 +53,10 @@ const (
|
||||
func QueryWithEnums(
|
||||
client graphql.Client,
|
||||
) (*QueryWithEnumsResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval QueryWithEnumsResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"QueryWithEnums",
|
||||
`
|
||||
|
||||
Vendored
+3
-1
@@ -29,8 +29,10 @@ type QueryWithSlicesUser struct {
|
||||
func QueryWithSlices(
|
||||
client graphql.Client,
|
||||
) (*QueryWithSlicesResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval QueryWithSlicesResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"QueryWithSlices",
|
||||
`
|
||||
|
||||
Vendored
+3
-1
@@ -32,8 +32,10 @@ type QueryWithStructsUserAuthMethodsAuthMethod struct {
|
||||
func QueryWithStructs(
|
||||
client graphql.Client,
|
||||
) (*QueryWithStructsResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval QueryWithStructsResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"QueryWithStructs",
|
||||
`
|
||||
|
||||
+3
-1
@@ -163,8 +163,10 @@ func (v *SimpleInlineFragmentResponse) UnmarshalJSON(b []byte) error {
|
||||
func SimpleInlineFragment(
|
||||
client graphql.Client,
|
||||
) (*SimpleInlineFragmentResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval SimpleInlineFragmentResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"SimpleInlineFragment",
|
||||
`
|
||||
|
||||
+3
-1
@@ -35,8 +35,10 @@ func SimpleInputQuery(
|
||||
"name": name,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval SimpleInputQueryResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"SimpleInputQuery",
|
||||
`
|
||||
|
||||
+3
-1
@@ -36,8 +36,10 @@ func SimpleMutation(
|
||||
"name": name,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval SimpleMutationResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"SimpleMutation",
|
||||
`
|
||||
|
||||
+3
-1
@@ -30,8 +30,10 @@ type SimpleQueryUser struct {
|
||||
func SimpleQuery(
|
||||
client graphql.Client,
|
||||
) (*SimpleQueryResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval SimpleQueryResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"SimpleQuery",
|
||||
`
|
||||
|
||||
+3
-1
@@ -31,8 +31,10 @@ type TypeNameQueryUser struct {
|
||||
func TypeNameQuery(
|
||||
client graphql.Client,
|
||||
) (*TypeNameQueryResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval TypeNameQueryResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"TypeNameQuery",
|
||||
`
|
||||
|
||||
Vendored
+3
-1
@@ -111,8 +111,10 @@ func (v *UnionNoFragmentsQueryResponse) UnmarshalJSON(b []byte) error {
|
||||
func UnionNoFragmentsQuery(
|
||||
client graphql.Client,
|
||||
) (*UnionNoFragmentsQueryResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval UnionNoFragmentsQueryResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"UnionNoFragmentsQuery",
|
||||
`
|
||||
|
||||
+3
-1
@@ -53,8 +53,10 @@ type UsesEnumTwiceQueryResponse struct {
|
||||
func UsesEnumTwiceQuery(
|
||||
client graphql.Client,
|
||||
) (*UsesEnumTwiceQueryResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval UsesEnumTwiceQueryResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"UsesEnumTwiceQuery",
|
||||
`
|
||||
|
||||
+3
-1
@@ -64,8 +64,10 @@ func unexported(
|
||||
"query": query,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval unexportedResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"unexported",
|
||||
`
|
||||
|
||||
Vendored
+56
@@ -0,0 +1,56 @@
|
||||
package queries
|
||||
|
||||
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/Khan/genqlient/internal/testutil"
|
||||
)
|
||||
|
||||
// SimpleQueryResponse is returned by SimpleQuery on success.
|
||||
type SimpleQueryResponse struct {
|
||||
// user looks up a user by some stuff.
|
||||
//
|
||||
// See UserQueryInput for what stuff is supported.
|
||||
// If query is null, returns the current user.
|
||||
User SimpleQueryUser `json:"user"`
|
||||
}
|
||||
|
||||
// SimpleQueryUser includes the requested fields of the GraphQL type User.
|
||||
// The GraphQL type's documentation follows.
|
||||
//
|
||||
// A User is a user!
|
||||
type SimpleQueryUser struct {
|
||||
// id is the user's ID.
|
||||
//
|
||||
// It is stable, unique, and opaque, like all good IDs.
|
||||
Id string `json:"id"`
|
||||
}
|
||||
|
||||
func SimpleQuery(
|
||||
ctx context.Context,
|
||||
) (*SimpleQueryResponse, error) {
|
||||
var err error
|
||||
client, err := testutil.GetClientFromContext(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var retval SimpleQueryResponse
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"SimpleQuery",
|
||||
`
|
||||
query SimpleQuery {
|
||||
user {
|
||||
id
|
||||
}
|
||||
}
|
||||
`,
|
||||
&retval,
|
||||
nil,
|
||||
)
|
||||
return &retval, err
|
||||
}
|
||||
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
package queries
|
||||
|
||||
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
|
||||
|
||||
import (
|
||||
"github.com/Khan/genqlient/internal/testutil"
|
||||
)
|
||||
|
||||
// SimpleQueryResponse is returned by SimpleQuery on success.
|
||||
type SimpleQueryResponse struct {
|
||||
// user looks up a user by some stuff.
|
||||
//
|
||||
// See UserQueryInput for what stuff is supported.
|
||||
// If query is null, returns the current user.
|
||||
User SimpleQueryUser `json:"user"`
|
||||
}
|
||||
|
||||
// SimpleQueryUser includes the requested fields of the GraphQL type User.
|
||||
// The GraphQL type's documentation follows.
|
||||
//
|
||||
// A User is a user!
|
||||
type SimpleQueryUser struct {
|
||||
// id is the user's ID.
|
||||
//
|
||||
// It is stable, unique, and opaque, like all good IDs.
|
||||
Id string `json:"id"`
|
||||
}
|
||||
|
||||
func SimpleQuery(
|
||||
ctx testutil.MyContext,
|
||||
) (*SimpleQueryResponse, error) {
|
||||
var err error
|
||||
client, err := testutil.GetClientFromMyContext(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var retval SimpleQueryResponse
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"SimpleQuery",
|
||||
`
|
||||
query SimpleQuery {
|
||||
user {
|
||||
id
|
||||
}
|
||||
}
|
||||
`,
|
||||
&retval,
|
||||
nil,
|
||||
)
|
||||
return &retval, err
|
||||
}
|
||||
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
package queries
|
||||
|
||||
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
|
||||
|
||||
import (
|
||||
"github.com/Khan/genqlient/internal/testutil"
|
||||
)
|
||||
|
||||
// SimpleQueryResponse is returned by SimpleQuery on success.
|
||||
type SimpleQueryResponse struct {
|
||||
// user looks up a user by some stuff.
|
||||
//
|
||||
// See UserQueryInput for what stuff is supported.
|
||||
// If query is null, returns the current user.
|
||||
User SimpleQueryUser `json:"user"`
|
||||
}
|
||||
|
||||
// SimpleQueryUser includes the requested fields of the GraphQL type User.
|
||||
// The GraphQL type's documentation follows.
|
||||
//
|
||||
// A User is a user!
|
||||
type SimpleQueryUser struct {
|
||||
// id is the user's ID.
|
||||
//
|
||||
// It is stable, unique, and opaque, like all good IDs.
|
||||
Id string `json:"id"`
|
||||
}
|
||||
|
||||
func SimpleQuery() (*SimpleQueryResponse, error) {
|
||||
var err error
|
||||
client, err := testutil.GetClientFromNowhere()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var retval SimpleQueryResponse
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"SimpleQuery",
|
||||
`
|
||||
query SimpleQuery {
|
||||
user {
|
||||
id
|
||||
}
|
||||
}
|
||||
`,
|
||||
&retval,
|
||||
nil,
|
||||
)
|
||||
return &retval, err
|
||||
}
|
||||
|
||||
Vendored
+52
@@ -0,0 +1,52 @@
|
||||
package queries
|
||||
|
||||
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
|
||||
|
||||
import (
|
||||
"github.com/Khan/genqlient/graphql"
|
||||
"github.com/Khan/genqlient/internal/testutil"
|
||||
)
|
||||
|
||||
// SimpleQueryResponse is returned by SimpleQuery on success.
|
||||
type SimpleQueryResponse struct {
|
||||
// user looks up a user by some stuff.
|
||||
//
|
||||
// See UserQueryInput for what stuff is supported.
|
||||
// If query is null, returns the current user.
|
||||
User SimpleQueryUser `json:"user"`
|
||||
}
|
||||
|
||||
// SimpleQueryUser includes the requested fields of the GraphQL type User.
|
||||
// The GraphQL type's documentation follows.
|
||||
//
|
||||
// A User is a user!
|
||||
type SimpleQueryUser struct {
|
||||
// id is the user's ID.
|
||||
//
|
||||
// It is stable, unique, and opaque, like all good IDs.
|
||||
Id string `json:"id"`
|
||||
}
|
||||
|
||||
func SimpleQuery(
|
||||
ctx testutil.MyContext,
|
||||
client graphql.Client,
|
||||
) (*SimpleQueryResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval SimpleQueryResponse
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"SimpleQuery",
|
||||
`
|
||||
query SimpleQuery {
|
||||
user {
|
||||
id
|
||||
}
|
||||
}
|
||||
`,
|
||||
&retval,
|
||||
nil,
|
||||
)
|
||||
return &retval, err
|
||||
}
|
||||
|
||||
Vendored
+53
@@ -0,0 +1,53 @@
|
||||
package queries
|
||||
|
||||
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/Khan/genqlient/graphql"
|
||||
)
|
||||
|
||||
// SimpleQueryResponse is returned by SimpleQuery on success.
|
||||
type SimpleQueryResponse struct {
|
||||
// user looks up a user by some stuff.
|
||||
//
|
||||
// See UserQueryInput for what stuff is supported.
|
||||
// If query is null, returns the current user.
|
||||
User SimpleQueryUser `json:"user"`
|
||||
}
|
||||
|
||||
// SimpleQueryUser includes the requested fields of the GraphQL type User.
|
||||
// The GraphQL type's documentation follows.
|
||||
//
|
||||
// A User is a user!
|
||||
type SimpleQueryUser struct {
|
||||
// id is the user's ID.
|
||||
//
|
||||
// It is stable, unique, and opaque, like all good IDs.
|
||||
Id string `json:"id"`
|
||||
}
|
||||
|
||||
func SimpleQuery(
|
||||
ctx context.Context,
|
||||
client graphql.Client,
|
||||
) (*SimpleQueryResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval SimpleQueryResponse
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"SimpleQuery",
|
||||
`
|
||||
query SimpleQuery {
|
||||
user {
|
||||
id
|
||||
}
|
||||
}
|
||||
`,
|
||||
&retval,
|
||||
nil,
|
||||
)
|
||||
return &retval, err
|
||||
}
|
||||
|
||||
Vendored
+53
@@ -0,0 +1,53 @@
|
||||
package queries
|
||||
|
||||
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/Khan/genqlient/graphql"
|
||||
)
|
||||
|
||||
// SimpleQueryResponse is returned by SimpleQuery on success.
|
||||
type SimpleQueryResponse struct {
|
||||
// user looks up a user by some stuff.
|
||||
//
|
||||
// See UserQueryInput for what stuff is supported.
|
||||
// If query is null, returns the current user.
|
||||
User SimpleQueryUser `json:"user"`
|
||||
}
|
||||
|
||||
// SimpleQueryUser includes the requested fields of the GraphQL type User.
|
||||
// The GraphQL type's documentation follows.
|
||||
//
|
||||
// A User is a user!
|
||||
type SimpleQueryUser struct {
|
||||
// id is the user's ID.
|
||||
//
|
||||
// It is stable, unique, and opaque, like all good IDs.
|
||||
Id string `json:"id"`
|
||||
}
|
||||
|
||||
func SimpleQuery(
|
||||
ctx context.Context,
|
||||
client graphql.Client,
|
||||
) (*SimpleQueryResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval SimpleQueryResponse
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"SimpleQuery",
|
||||
`
|
||||
query SimpleQuery {
|
||||
user {
|
||||
id
|
||||
}
|
||||
}
|
||||
`,
|
||||
&retval,
|
||||
nil,
|
||||
)
|
||||
return &retval, err
|
||||
}
|
||||
|
||||
generate/testdata/snapshots/TestGenerateWithConfig-ExportOperations-testdata-queries-operations.json
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"operations": [
|
||||
{
|
||||
"operationName": "SimpleQuery",
|
||||
"query": "\nquery SimpleQuery {\n\tuser {\n\t\tid\n\t}\n}\n",
|
||||
"sourceLocation": "SimpleQuery.graphql"
|
||||
}
|
||||
]
|
||||
}
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
package queries
|
||||
|
||||
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
|
||||
|
||||
import (
|
||||
"github.com/Khan/genqlient/graphql"
|
||||
)
|
||||
|
||||
// SimpleQueryResponse is returned by SimpleQuery on success.
|
||||
type SimpleQueryResponse struct {
|
||||
// user looks up a user by some stuff.
|
||||
//
|
||||
// See UserQueryInput for what stuff is supported.
|
||||
// If query is null, returns the current user.
|
||||
User SimpleQueryUser `json:"user"`
|
||||
}
|
||||
|
||||
// SimpleQueryUser includes the requested fields of the GraphQL type User.
|
||||
// The GraphQL type's documentation follows.
|
||||
//
|
||||
// A User is a user!
|
||||
type SimpleQueryUser struct {
|
||||
// id is the user's ID.
|
||||
//
|
||||
// It is stable, unique, and opaque, like all good IDs.
|
||||
Id string `json:"id"`
|
||||
}
|
||||
|
||||
func SimpleQuery(
|
||||
client graphql.Client,
|
||||
) (*SimpleQueryResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval SimpleQueryResponse
|
||||
err = client.MakeRequest(
|
||||
nil,
|
||||
"SimpleQuery",
|
||||
`
|
||||
query SimpleQuery {
|
||||
user {
|
||||
id
|
||||
}
|
||||
}
|
||||
`,
|
||||
&retval,
|
||||
nil,
|
||||
)
|
||||
return &retval, err
|
||||
}
|
||||
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
package mypkg
|
||||
|
||||
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/Khan/genqlient/graphql"
|
||||
)
|
||||
|
||||
// SimpleQueryResponse is returned by SimpleQuery on success.
|
||||
type SimpleQueryResponse struct {
|
||||
// user looks up a user by some stuff.
|
||||
//
|
||||
// See UserQueryInput for what stuff is supported.
|
||||
// If query is null, returns the current user.
|
||||
User SimpleQueryUser `json:"user"`
|
||||
}
|
||||
|
||||
// SimpleQueryUser includes the requested fields of the GraphQL type User.
|
||||
// The GraphQL type's documentation follows.
|
||||
//
|
||||
// A User is a user!
|
||||
type SimpleQueryUser struct {
|
||||
// id is the user's ID.
|
||||
//
|
||||
// It is stable, unique, and opaque, like all good IDs.
|
||||
Id string `json:"id"`
|
||||
}
|
||||
|
||||
func SimpleQuery(
|
||||
ctx context.Context,
|
||||
client graphql.Client,
|
||||
) (*SimpleQueryResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval SimpleQueryResponse
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"SimpleQuery",
|
||||
`
|
||||
query SimpleQuery {
|
||||
user {
|
||||
id
|
||||
}
|
||||
}
|
||||
`,
|
||||
&retval,
|
||||
nil,
|
||||
)
|
||||
return &retval, err
|
||||
}
|
||||
|
||||
Vendored
+53
@@ -0,0 +1,53 @@
|
||||
package mypkg
|
||||
|
||||
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/Khan/genqlient/graphql"
|
||||
)
|
||||
|
||||
// SimpleQueryResponse is returned by SimpleQuery on success.
|
||||
type SimpleQueryResponse struct {
|
||||
// user looks up a user by some stuff.
|
||||
//
|
||||
// See UserQueryInput for what stuff is supported.
|
||||
// If query is null, returns the current user.
|
||||
User SimpleQueryUser `json:"user"`
|
||||
}
|
||||
|
||||
// SimpleQueryUser includes the requested fields of the GraphQL type User.
|
||||
// The GraphQL type's documentation follows.
|
||||
//
|
||||
// A User is a user!
|
||||
type SimpleQueryUser struct {
|
||||
// id is the user's ID.
|
||||
//
|
||||
// It is stable, unique, and opaque, like all good IDs.
|
||||
Id string `json:"id"`
|
||||
}
|
||||
|
||||
func SimpleQuery(
|
||||
ctx context.Context,
|
||||
client graphql.Client,
|
||||
) (*SimpleQueryResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval SimpleQueryResponse
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"SimpleQuery",
|
||||
`
|
||||
query SimpleQuery {
|
||||
user {
|
||||
id
|
||||
}
|
||||
}
|
||||
`,
|
||||
&retval,
|
||||
nil,
|
||||
)
|
||||
return &retval, err
|
||||
}
|
||||
|
||||
generate/testdata/snapshots/TestGenerateWithConfig-SubpackageConfig-testdata-queries-mypkg-myfile.go
Vendored
+53
@@ -0,0 +1,53 @@
|
||||
package mypkg
|
||||
|
||||
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/Khan/genqlient/graphql"
|
||||
)
|
||||
|
||||
// SimpleQueryResponse is returned by SimpleQuery on success.
|
||||
type SimpleQueryResponse struct {
|
||||
// user looks up a user by some stuff.
|
||||
//
|
||||
// See UserQueryInput for what stuff is supported.
|
||||
// If query is null, returns the current user.
|
||||
User SimpleQueryUser `json:"user"`
|
||||
}
|
||||
|
||||
// SimpleQueryUser includes the requested fields of the GraphQL type User.
|
||||
// The GraphQL type's documentation follows.
|
||||
//
|
||||
// A User is a user!
|
||||
type SimpleQueryUser struct {
|
||||
// id is the user's ID.
|
||||
//
|
||||
// It is stable, unique, and opaque, like all good IDs.
|
||||
Id string `json:"id"`
|
||||
}
|
||||
|
||||
func SimpleQuery(
|
||||
ctx context.Context,
|
||||
client graphql.Client,
|
||||
) (*SimpleQueryResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval SimpleQueryResponse
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"SimpleQuery",
|
||||
`
|
||||
query SimpleQuery {
|
||||
user {
|
||||
id
|
||||
}
|
||||
}
|
||||
`,
|
||||
&retval,
|
||||
nil,
|
||||
)
|
||||
return &retval, err
|
||||
}
|
||||
|
||||
@@ -675,8 +675,10 @@ func simpleQuery(
|
||||
ctx context.Context,
|
||||
client graphql.Client,
|
||||
) (*simpleQueryResponse, error) {
|
||||
var err error
|
||||
|
||||
var retval simpleQueryResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"simpleQuery",
|
||||
`
|
||||
@@ -703,8 +705,10 @@ func queryWithVariables(
|
||||
"id": id,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval queryWithVariablesResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"queryWithVariables",
|
||||
`
|
||||
@@ -731,8 +735,10 @@ func queryWithInterfaceNoFragments(
|
||||
"id": id,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval queryWithInterfaceNoFragmentsResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"queryWithInterfaceNoFragments",
|
||||
`
|
||||
@@ -763,8 +769,10 @@ func queryWithInterfaceListField(
|
||||
"ids": ids,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval queryWithInterfaceListFieldResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"queryWithInterfaceListField",
|
||||
`
|
||||
@@ -791,8 +799,10 @@ func queryWithInterfaceListPointerField(
|
||||
"ids": ids,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval queryWithInterfaceListPointerFieldResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"queryWithInterfaceListPointerField",
|
||||
`
|
||||
@@ -819,8 +829,10 @@ func queryWithFragments(
|
||||
"ids": ids,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
var retval queryWithFragmentsResponse
|
||||
err := client.MakeRequest(
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
"queryWithFragments",
|
||||
`
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package testutil
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/Khan/genqlient/graphql"
|
||||
)
|
||||
|
||||
type ID string
|
||||
|
||||
type Pokemon struct {
|
||||
@@ -10,3 +16,13 @@ type Pokemon struct {
|
||||
func (p Pokemon) Battle(q Pokemon) bool {
|
||||
return p.Level > q.Level
|
||||
}
|
||||
|
||||
type MyContext interface {
|
||||
context.Context
|
||||
|
||||
MyMethod()
|
||||
}
|
||||
|
||||
func GetClientFromNowhere() (graphql.Client, error) { return nil, nil }
|
||||
func GetClientFromContext(ctx context.Context) (graphql.Client, error) { return nil, nil }
|
||||
func GetClientFromMyContext(ctx MyContext) (graphql.Client, error) { return nil, nil }
|
||||
|
||||
Reference in New Issue
Block a user