github.com/sdvpn/gqlgen@v0.7.2/integration/resolver.go (about) 1 //go:generate gorunpkg github.com/99designs/gqlgen 2 3 package integration 4 5 import ( 6 "context" 7 "fmt" 8 "remote_api" 9 "time" 10 11 "github.com/99designs/gqlgen/integration/models-go" 12 ) 13 14 type CustomError struct { 15 UserMessage string 16 InternalError string 17 } 18 19 func (e *CustomError) Error() string { 20 return e.InternalError 21 } 22 23 type Resolver struct{} 24 25 func (r *Resolver) User() UserResolver { 26 return &userResolver{r} 27 } 28 29 func (r *Resolver) Element() ElementResolver { 30 return &elementResolver{r} 31 } 32 33 func (r *Resolver) Query() QueryResolver { 34 return &queryResolver{r} 35 } 36 37 type elementResolver struct{ *Resolver } 38 39 func (r *elementResolver) Error(ctx context.Context, obj *models.Element) (bool, error) { 40 // A silly hack to make the result order stable 41 time.Sleep(time.Duration(obj.ID) * 10 * time.Millisecond) 42 43 return false, fmt.Errorf("boom") 44 } 45 46 func (r *elementResolver) Mismatched(ctx context.Context, obj *models.Element) ([]bool, error) { 47 return []bool{true}, nil 48 } 49 50 func (r *elementResolver) Child(ctx context.Context, obj *models.Element) (models.Element, error) { 51 return models.Element{ID: obj.ID * 10}, nil 52 } 53 54 type queryResolver struct{ *Resolver } 55 56 func (r *queryResolver) Error(ctx context.Context, typeArg *models.ErrorType) (bool, error) { 57 if *typeArg == models.ErrorTypeCustom { 58 return false, &CustomError{"User message", "Internal Message"} 59 } 60 61 return false, fmt.Errorf("Normal error") 62 } 63 64 func (r *queryResolver) Path(ctx context.Context) ([]*models.Element, error) { 65 return []*models.Element{{1}, {2}, {3}, {4}}, nil 66 } 67 68 func (r *queryResolver) Date(ctx context.Context, filter models.DateFilter) (bool, error) { 69 if filter.Value != "asdf" { 70 return false, fmt.Errorf("value must be asdf") 71 } 72 73 if *filter.Timezone != "UTC" { 74 return false, fmt.Errorf("timezone must be utc") 75 } 76 77 if *filter.Op != models.DateFilterOpEq { 78 return false, fmt.Errorf("unknown op %s", *filter.Op) 79 } 80 81 return true, nil 82 } 83 84 func (r *queryResolver) Viewer(ctx context.Context) (*models.Viewer, error) { 85 return &models.Viewer{ 86 User: &remote_api.User{Name: "Bob"}, 87 }, nil 88 } 89 90 func (r *queryResolver) JSONEncoding(ctx context.Context) (string, error) { 91 return "\U000fe4ed", nil 92 } 93 94 type userResolver struct{ *Resolver } 95 96 func (r *userResolver) Likes(ctx context.Context, obj *remote_api.User) ([]string, error) { 97 return obj.Likes, nil 98 }