make client an interface

This commit is contained in:
Ben Kraft
2021-03-25 14:08:12 -07:00
parent a9054e484f
commit 937540d244
17 changed files with 61 additions and 21 deletions
+2 -2
View File
@@ -26,7 +26,7 @@ type getViewerViewerUser struct {
func getViewer( func getViewer(
ctx context.Context, ctx context.Context,
client *graphql.Client, client graphql.Client,
) (*getViewerResponse, error) { ) (*getViewerResponse, error) {
var retval getViewerResponse var retval getViewerResponse
err := client.MakeRequest( err := client.MakeRequest(
@@ -47,7 +47,7 @@ query getViewer {
// getUser gets the given user's name from their username. // getUser gets the given user's name from their username.
func getUser( func getUser(
ctx context.Context, ctx context.Context,
client *graphql.Client, client graphql.Client,
login string, login string,
) (*getUserResponse, error) { ) (*getUserResponse, error) {
variables := map[string]interface{}{ variables := map[string]interface{}{
+1 -1
View File
@@ -24,7 +24,7 @@ func {{.Name}}(
ctx {{$.Config.ContextType}}, ctx {{$.Config.ContextType}},
{{end}} {{end}}
{{- if not $.Config.ClientGetter -}} {{- if not $.Config.ClientGetter -}}
client *graphql.Client, client graphql.Client,
{{end}} {{end}}
{{- range .Args -}} {{- range .Args -}}
{{.GoName}} {{.GoType}}, {{.GoName}} {{.GoType}},
+1 -1
View File
@@ -30,7 +30,7 @@ const (
) )
func InputObjectQuery( func InputObjectQuery(
client *graphql.Client, client graphql.Client,
query UserQueryInput, query UserQueryInput,
) (*InputObjectQueryResponse, error) { ) (*InputObjectQueryResponse, error) {
variables := map[string]interface{}{ variables := map[string]interface{}{
+1 -1
View File
@@ -94,7 +94,7 @@ func (v InterfaceNoFragmentsQueryRootTopicChildrenVideo) implementsGraphQLInterf
} }
func InterfaceNoFragmentsQuery( func InterfaceNoFragmentsQuery(
client *graphql.Client, client graphql.Client,
) (*InterfaceNoFragmentsQueryResponse, error) { ) (*InterfaceNoFragmentsQueryResponse, error) {
var retval InterfaceNoFragmentsQueryResponse var retval InterfaceNoFragmentsQueryResponse
err := client.MakeRequest( err := client.MakeRequest(
+1 -1
View File
@@ -15,7 +15,7 @@ type ListInputQueryUser struct {
} }
func ListInputQuery( func ListInputQuery(
client *graphql.Client, client graphql.Client,
names []string, names []string,
) (*ListInputQueryResponse, error) { ) (*ListInputQueryResponse, error) {
variables := map[string]interface{}{ variables := map[string]interface{}{
+1 -1
View File
@@ -15,7 +15,7 @@ type QueryWithAliasUser struct {
} }
func QueryWithAlias( func QueryWithAlias(
client *graphql.Client, client graphql.Client,
) (*QueryWithAliasResponse, error) { ) (*QueryWithAliasResponse, error) {
var retval QueryWithAliasResponse var retval QueryWithAliasResponse
err := client.MakeRequest( err := client.MakeRequest(
+1 -1
View File
@@ -16,7 +16,7 @@ type QueryWithDoubleAliasUser struct {
} }
func QueryWithDoubleAlias( func QueryWithDoubleAlias(
client *graphql.Client, client graphql.Client,
) (*QueryWithDoubleAliasResponse, error) { ) (*QueryWithDoubleAliasResponse, error) {
var retval QueryWithDoubleAliasResponse var retval QueryWithDoubleAliasResponse
err := client.MakeRequest( err := client.MakeRequest(
+1 -1
View File
@@ -22,7 +22,7 @@ const (
) )
func QueryWithEnums( func QueryWithEnums(
client *graphql.Client, client graphql.Client,
) (*QueryWithEnumsResponse, error) { ) (*QueryWithEnumsResponse, error) {
var retval QueryWithEnumsResponse var retval QueryWithEnumsResponse
err := client.MakeRequest( err := client.MakeRequest(
+1 -1
View File
@@ -18,7 +18,7 @@ type QueryWithSlicesUser struct {
} }
func QueryWithSlices( func QueryWithSlices(
client *graphql.Client, client graphql.Client,
) (*QueryWithSlicesResponse, error) { ) (*QueryWithSlicesResponse, error) {
var retval QueryWithSlicesResponse var retval QueryWithSlicesResponse
err := client.MakeRequest( err := client.MakeRequest(
+1 -1
View File
@@ -20,7 +20,7 @@ type QueryWithStructsUserAuthMethodsAuthMethod struct {
} }
func QueryWithStructs( func QueryWithStructs(
client *graphql.Client, client graphql.Client,
) (*QueryWithStructsResponse, error) { ) (*QueryWithStructsResponse, error) {
var retval QueryWithStructsResponse var retval QueryWithStructsResponse
err := client.MakeRequest( err := client.MakeRequest(
+1 -1
View File
@@ -15,7 +15,7 @@ type SimpleInputQueryUser struct {
} }
func SimpleInputQuery( func SimpleInputQuery(
client *graphql.Client, client graphql.Client,
name string, name string,
) (*SimpleInputQueryResponse, error) { ) (*SimpleInputQueryResponse, error) {
variables := map[string]interface{}{ variables := map[string]interface{}{
+1 -1
View File
@@ -15,7 +15,7 @@ type SimpleQueryUser struct {
} }
func SimpleQuery( func SimpleQuery(
client *graphql.Client, client graphql.Client,
) (*SimpleQueryResponse, error) { ) (*SimpleQueryResponse, error) {
var retval SimpleQueryResponse var retval SimpleQueryResponse
err := client.MakeRequest( err := client.MakeRequest(
+1 -1
View File
@@ -16,7 +16,7 @@ type TypeNameQueryUser struct {
} }
func TypeNameQuery( func TypeNameQuery(
client *graphql.Client, client graphql.Client,
) (*TypeNameQueryResponse, error) { ) (*TypeNameQueryResponse, error) {
var retval TypeNameQueryResponse var retval TypeNameQueryResponse
err := client.MakeRequest( err := client.MakeRequest(
+1 -1
View File
@@ -72,7 +72,7 @@ func (v *UnionNoFragmentsQueryResponse) UnmarshalJSON(b []byte) error {
} }
func UnionNoFragmentsQuery( func UnionNoFragmentsQuery(
client *graphql.Client, client graphql.Client,
) (*UnionNoFragmentsQueryResponse, error) { ) (*UnionNoFragmentsQueryResponse, error) {
var retval UnionNoFragmentsQueryResponse var retval UnionNoFragmentsQueryResponse
err := client.MakeRequest( err := client.MakeRequest(
+1 -1
View File
@@ -34,7 +34,7 @@ type UsesEnumTwiceQueryResponse struct {
} }
func UsesEnumTwiceQuery( func UsesEnumTwiceQuery(
client *graphql.Client, client graphql.Client,
) (*UsesEnumTwiceQueryResponse, error) { ) (*UsesEnumTwiceQueryResponse, error) {
var retval UsesEnumTwiceQueryResponse var retval UsesEnumTwiceQueryResponse
err := client.MakeRequest( err := client.MakeRequest(
+1 -1
View File
@@ -30,7 +30,7 @@ const (
) )
func unexported( func unexported(
client *graphql.Client, client graphql.Client,
query userQueryInput, query userQueryInput,
) (*unexportedResponse, error) { ) (*unexportedResponse, error) {
variables := map[string]interface{}{ variables := map[string]interface{}{
+44 -4
View File
@@ -10,17 +10,57 @@ import (
"github.com/vektah/gqlparser/gqlerror" "github.com/vektah/gqlparser/gqlerror"
) )
type Client struct { // Client is the interface that the generate code calls into to actually make
// requests.
type Client interface {
// MakeRequest must make a request to the client's GraphQL API.
//
// ctx is the context that should be used to make this request. If context
// is disabled in the genql settings, this will be set to
// context.Background().
//
// query is the literal string representing the GraphQL query, e.g.
// `query myQuery { myField }`. variables contains the GraphQL variables
// to be sent along with the query, or may be nil if there are none.
// Typically, GraphQL APIs will accept a JSON payload of the form
// {"query": "query myQuery { ... }", "variables": {...}}`
// but MakeRequest may use some other transport, handle extensions, or set
// other parameters, if it wishes.
//
// retval is a pointer to the struct representing the query result, e.g.
// new(myQueryResponse). Typically, GraphQL APIs will return a JSON
// payload of the form
// {"data": {...}, "errors": {...}}
// and retval is designed so that `data` will json-unmarshal into `retval`.
// (Errors are returned.) But again, MakeRequest may customize this.
MakeRequest(
ctx context.Context,
query string,
retval interface{},
variables map[string]interface{},
) error
}
type client struct {
endpoint string endpoint string
method string method string
httpClient *http.Client httpClient *http.Client
} }
func NewClient(endpoint string, httpClient *http.Client) *Client { // NewClient returns a Client which makes requests to the given endpoint,
// suitable for most users.
//
// The client makes requests to the given GraphQL endpoint using standard
// GraphQL HTTP-over-JSON transport. It will use the given http client, or
// http.DefaultClient if a nil client is passed.
//
// The typical method of adding authentication headers is to wrap the client's
// Transport to add those headers. See example/caller.go for an example.
func NewClient(endpoint string, httpClient *http.Client) Client {
if httpClient == nil { if httpClient == nil {
httpClient = http.DefaultClient httpClient = http.DefaultClient
} }
return &Client{endpoint, http.MethodPost, httpClient} return &client{endpoint, http.MethodPost, httpClient}
} }
type payload struct { type payload struct {
@@ -33,7 +73,7 @@ type response struct {
Errors gqlerror.List `json:"errors"` Errors gqlerror.List `json:"errors"`
} }
func (client *Client) MakeRequest(ctx context.Context, query string, retval interface{}, variables map[string]interface{}) error { func (client *client) MakeRequest(ctx context.Context, query string, retval interface{}, variables map[string]interface{}) error {
body, err := json.Marshal(payload{ body, err := json.Marshal(payload{
Query: query, Query: query,
Variables: variables, Variables: variables,