Skip to content

Commit 131af61

Browse files
subscription: method resolver not only in root
1 parent b074eae commit 131af61

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

internal/exec/resolvable/resolvable.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,8 +387,8 @@ func (b *execBuilder) makeFieldExec(typeName string, f *schema.Field, m reflect.
387387
var out reflect.Type
388388
if methodIndex != -1 {
389389
out = m.Type.Out(0)
390-
sub, ok := b.schema.EntryPoints["subscription"]
391-
if ok && typeName == sub.TypeName() && out.Kind() == reflect.Chan {
390+
_, ok := b.schema.EntryPoints["subscription"]
391+
if ok && out.Kind() == reflect.Chan {
392392
out = m.Type.Out(0).Elem()
393393
}
394394
} else {

internal/exec/subscribe.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,28 @@ func (r *Request) Subscribe(ctx context.Context, s *resolvable.Schema, op *query
3838
}
3939
f = fields[0]
4040

41+
func() {
42+
tmpF := *f
43+
defer func() {
44+
if r := recover(); r != nil {
45+
f = &tmpF
46+
}
47+
}()
48+
49+
if f.resolver.Kind() == reflect.Ptr {
50+
f.resolver = f.resolver.Elem()
51+
}
52+
f.resolver = f.resolver.FieldByIndex(f.field.FieldIndex)
53+
54+
var fieldsDeep []*fieldToExec
55+
collectFieldsToResolve(f.sels, s, f.resolver, &fieldsDeep, make(map[string]*fieldToExec))
56+
if len(fieldsDeep) == 1 {
57+
f = fieldsDeep[0]
58+
} else {
59+
f = &tmpF
60+
}
61+
}()
62+
4163
var in []reflect.Value
4264
if f.field.HasContext {
4365
in = append(in, reflect.ValueOf(ctx))

0 commit comments

Comments
 (0)