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:
+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
|
||||
|
||||
Reference in New Issue
Block a user