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