-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathfield.go
51 lines (38 loc) · 1.03 KB
/
field.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package fields
import (
"reflect"
)
// Field type to be used in Resolvers.
type Field struct {
CustomName string
Depth int
ParentTree []string
}
// SetCustomName define a custom nome for Field.
func (field *Field) SetCustomName(name string) {
field.CustomName = name
}
// SetParent define the parent resolver of a Feild.
func (field *Field) SetParent(parentResolver interface{}) {
parentField := fromResolver(parentResolver)
field.Depth = parentField.Depth + 1
field.ParentTree = append(
parentField.ParentTree,
nameFromResolver(parentResolver))
}
func fromResolver(resolver interface{}) Field {
fieldValue := reflect.ValueOf(resolver).Elem().FieldByName("Field")
return fieldValue.Interface().(Field)
}
func nameFromResolver(resolver interface{}) string {
field := fromResolver(resolver)
var fieldName string
if field.CustomName != "" {
fieldName = field.CustomName
} else {
fieldType, _ := reflect.TypeOf(
resolver).Elem().FieldByName("Field")
fieldName = fieldType.Tag.Get("graphql")
}
return fieldName
}