diff --git a/example/caller.go b/example/caller.go new file mode 100644 index 0000000..2489345 --- /dev/null +++ b/example/caller.go @@ -0,0 +1,16 @@ +package example + +import ( + "context" + "fmt" + "os" +) + +func Main() { + resp, err := getViewer(context.Background()) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + fmt.Println("you are:", resp.Viewer.Name) +} diff --git a/example/cmd/example/main.go b/example/cmd/example/main.go new file mode 100644 index 0000000..a39abcf --- /dev/null +++ b/example/cmd/example/main.go @@ -0,0 +1,9 @@ +package main + +import ( + example "github.com/Khan/genql/example" +) + +func main() { + example.Main() +} diff --git a/example/generated.go b/example/generated.go index f985945..58c15ed 100755 --- a/example/generated.go +++ b/example/generated.go @@ -3,6 +3,7 @@ package example import ( "context" "encoding/json" + "fmt" "io/ioutil" "net/http" "strings" @@ -10,19 +11,19 @@ import ( "github.com/vektah/gqlparser/gqlerror" ) -type GetViewerResponse = struct { +type getViewerResponse = struct { Viewer struct { Name *string } } // TODO -func GetViewer(ctx context.Context) (*GetViewerResponse, error) { +func getViewer(ctx context.Context) (*getViewerResponse, error) { req, err := http.NewRequest( http.MethodPost, `https://api.github.com/graphql`, strings.NewReader(` -query GetViewer { +query getViewer { Viewer: viewer { Name: name } @@ -44,8 +45,12 @@ query GetViewer { return nil, err } + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("returned error %v: %v", resp.Status, string(body)) + } + var retval struct { - Data GetViewerResponse `json:"data"` + Data getViewerResponse `json:"data"` Errors gqlerror.List `json:"errors"` } err = json.Unmarshal(body, &retval) diff --git a/example/queries.graphql b/example/queries.graphql index 10f97d7..484ce24 100644 --- a/example/queries.graphql +++ b/example/queries.graphql @@ -1,5 +1,5 @@ -# GetViewer gets the current user's name. -query GetViewer { +# getViewer gets the current user's name. +query getViewer { Viewer: viewer { Name: name } diff --git a/generate/operation.go.tmpl b/generate/operation.go.tmpl index 8d7b354..89aff2a 100644 --- a/generate/operation.go.tmpl +++ b/generate/operation.go.tmpl @@ -3,6 +3,7 @@ package {{.PackageName}} import ( "context" "encoding/json" + "fmt" "io/ioutil" "net/http" "strings" @@ -35,6 +36,10 @@ func {{.OperationName}}(ctx context.Context) (*{{.ResponseName}}, error) { return nil, err } + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("returned error %v: %v", resp.Status, string(body)) + } + var retval struct { Data {{.ResponseName}} `json:"data"` Errors gqlerror.List `json:"errors"`