do our own aliasing if the queries aren't right
This commit is contained in:
+2
-2
@@ -52,11 +52,11 @@ func Main() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
fmt.Println("you are", *viewerResp.Viewer.Name)
|
fmt.Println("you are", *viewerResp.Viewer.MyName)
|
||||||
|
|
||||||
userResp, err := getUser(context.Background(), graphqlClient, username)
|
userResp, err := getUser(context.Background(), graphqlClient, username)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
fmt.Println(username, "is", *userResp.User.Name)
|
fmt.Println(username, "is", *userResp.User.TheirName)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ import (
|
|||||||
|
|
||||||
type getViewerResponse = struct {
|
type getViewerResponse = struct {
|
||||||
Viewer struct {
|
Viewer struct {
|
||||||
Name *string
|
MyName *string
|
||||||
}
|
} `json:"viewer"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
@@ -17,8 +17,8 @@ func getViewer(ctx context.Context, client *graphql.Client) (*getViewerResponse,
|
|||||||
var retval getViewerResponse
|
var retval getViewerResponse
|
||||||
err := client.MakeRequest(ctx, `
|
err := client.MakeRequest(ctx, `
|
||||||
query getViewer {
|
query getViewer {
|
||||||
Viewer: viewer {
|
viewer {
|
||||||
Name: name
|
MyName: name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`, &retval, nil)
|
`, &retval, nil)
|
||||||
@@ -27,8 +27,8 @@ query getViewer {
|
|||||||
|
|
||||||
type getUserResponse = struct {
|
type getUserResponse = struct {
|
||||||
User *struct {
|
User *struct {
|
||||||
Name *string
|
TheirName *string `json:"theirName"`
|
||||||
}
|
} `json:"user"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
@@ -40,8 +40,8 @@ func getUser(ctx context.Context, client *graphql.Client, login string) (*getUse
|
|||||||
var retval getUserResponse
|
var retval getUserResponse
|
||||||
err := client.MakeRequest(ctx, `
|
err := client.MakeRequest(ctx, `
|
||||||
query getUser ($login: String!) {
|
query getUser ($login: String!) {
|
||||||
User: user(login: $login) {
|
user(login: $login) {
|
||||||
Name: name
|
theirName: name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`, &retval, variables)
|
`, &retval, variables)
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
# getViewer gets the current user's name.
|
# getViewer gets the current user's name.
|
||||||
query getViewer {
|
query getViewer {
|
||||||
Viewer: viewer {
|
viewer {
|
||||||
Name: name
|
MyName: name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# getUser gets the given user's name.
|
# getUser gets the given user's name.
|
||||||
query getUser($login: String!) {
|
query getUser($login: String!) {
|
||||||
User: user(login: $login) {
|
user(login: $login) {
|
||||||
Name: name
|
theirName: name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-7
@@ -30,20 +30,25 @@ func writeSelectionSetStruct(builder *strings.Builder, selectionSet ast.Selectio
|
|||||||
for _, selection := range selectionSet {
|
for _, selection := range selectionSet {
|
||||||
switch selection := selection.(type) {
|
switch selection := selection.(type) {
|
||||||
case *ast.Field:
|
case *ast.Field:
|
||||||
// TODO: assert it starts with uppercase (or do automatically if
|
var jsonName string
|
||||||
// alias is not provided; in this case we may need json tags to
|
|
||||||
// avoid munging the query)
|
|
||||||
if selection.Alias != "" {
|
if selection.Alias != "" {
|
||||||
builder.WriteString(selection.Alias)
|
jsonName = selection.Alias
|
||||||
} else {
|
} else {
|
||||||
builder.WriteString(selection.Name)
|
jsonName = selection.Name
|
||||||
}
|
}
|
||||||
|
// We need an exportable name for JSON-marshaling.
|
||||||
|
goName := strings.Title(jsonName)
|
||||||
|
|
||||||
|
builder.WriteString(goName)
|
||||||
builder.WriteRune(' ')
|
builder.WriteRune(' ')
|
||||||
|
|
||||||
writeType(builder, selection.Definition.Type, selection.SelectionSet, schema)
|
writeType(builder, selection.Definition.Type, selection.SelectionSet, schema)
|
||||||
|
|
||||||
// We don't need a json tag -- we just have GraphQL do the
|
if jsonName != goName {
|
||||||
// aliasing.
|
builder.WriteString("`json:\"")
|
||||||
|
builder.WriteString(jsonName)
|
||||||
|
builder.WriteString("\"`")
|
||||||
|
}
|
||||||
builder.WriteRune('\n')
|
builder.WriteRune('\n')
|
||||||
|
|
||||||
case *ast.FragmentSpread, *ast.InlineFragment:
|
case *ast.FragmentSpread, *ast.InlineFragment:
|
||||||
|
|||||||
Reference in New Issue
Block a user