github.com/maeglindeveloper/gqlgen@v0.13.1-0.20210413081235-57808b12a0a0/example/selection/selection.go (about) 1 //go:generate go run ../../testdata/gqlgen.go 2 3 package selection 4 5 import ( 6 "context" 7 "fmt" 8 "time" 9 10 "github.com/99designs/gqlgen/graphql" 11 "github.com/vektah/gqlparser/v2/ast" 12 ) 13 14 type Resolver struct{} 15 16 func (r *Resolver) Query() QueryResolver { 17 return &queryResolver{r} 18 } 19 20 type queryResolver struct{ *Resolver } 21 22 func (r *queryResolver) Events(ctx context.Context) ([]Event, error) { 23 var sels []string 24 25 reqCtx := graphql.GetOperationContext(ctx) 26 fieldSelections := graphql.GetFieldContext(ctx).Field.Selections 27 for _, sel := range fieldSelections { 28 switch sel := sel.(type) { 29 case *ast.Field: 30 sels = append(sels, fmt.Sprintf("%s as %s", sel.Name, sel.Alias)) 31 case *ast.InlineFragment: 32 sels = append(sels, fmt.Sprintf("inline fragment on %s", sel.TypeCondition)) 33 case *ast.FragmentSpread: 34 fragment := reqCtx.Doc.Fragments.ForName(sel.Name) 35 sels = append(sels, fmt.Sprintf("named fragment %s on %s", sel.Name, fragment.TypeCondition)) 36 } 37 } 38 39 var events []Event 40 for i := 0; i < 10; i++ { 41 if i%2 == 0 { 42 events = append(events, &Like{ 43 Selection: sels, 44 Collected: formatCollected(graphql.CollectFieldsCtx(ctx, []string{"Like"})), 45 Reaction: ":=)", 46 Sent: time.Now(), 47 }) 48 } else { 49 events = append(events, &Post{ 50 Selection: sels, 51 Collected: formatCollected(graphql.CollectFieldsCtx(ctx, []string{"Post"})), 52 Message: "Hey", 53 Sent: time.Now(), 54 }) 55 } 56 } 57 58 return events, nil 59 } 60 61 func formatCollected(cf []graphql.CollectedField) []string { 62 res := make([]string, len(cf)) 63 64 for i, f := range cf { 65 res[i] = f.Name + " as " + f.Alias 66 } 67 return res 68 }