graphql
graphql copied to clipboard
Further flush out ability to auto-bind to functions and types.
Hello, graphql-go authors.
I began this PR because I encountered a bug in BindFields
where the name given to a type would be the JSON field name, which resulted in conflicts. I was using that function to automatically bind functions, and create types, so that the resolver functions themselves could be reused as regular exported functions.
I migrated that code into this project as well, as I feel it offers a significant improvement to dev experience.
type GreetingInput struct {
Name string `json:"name"`
}
func Greeting(input GreetingInput) string {
return fmt.Sprintf("Hello %s", input.Name)
}
...
rootQuery := graphql.ObjectConfig{Name: "RootQuery", Fields: graphql.Fields{
"greeting": graphql.Bind(Greeting),
}}
or almost any manner of function along these lines:
func MyFunction(ctx context.Context, input MyFunctionInput) (output MyFunctionOutput, error) ...
func MyFunction(ctx *context.Context, input *MyFunctionInput) (output *MyFunctionOutput, error) ...
func MyFunction(ctx context.Context) (output MyFunctionOutput, error) ...
func MyFunction(input MyFunctionInput) (output MyFunctionOutput, error) ...
func MyFunction(input MyFunctionInput) (output MyFunctionOutput) ...
func MyFunction() (output MyFunctionOutput) ...
func MyFunction() (output string) ...
or constant
rootQuery := graphql.ObjectConfig{Name: "RootQuery", Fields: graphql.Fields{
"version": graphql.Bind(1.1),
}}
Cheers!
-Alan 🤖