1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/gqlengine-gqlengine

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
selection.go 1.2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Kevin Chen Отправлено 21.02.2020 04:06 4edc04d
package gqlengine
import (
"reflect"
"strings"
"github.com/karfield/graphql"
)
type FieldSelection interface {
IsSelected(fieldNames ...string) bool
}
var _fieldSelectionType = reflect.TypeOf((*FieldSelection)(nil)).Elem()
type fieldSelectionSet struct {
*graphql.ResolveInfo
}
func (f *fieldSelectionSet) IsSelected(fieldNames ...string) bool {
for i := 0; i < len(fieldNames); i++ {
name := fieldNames[i]
if strings.HasPrefix(name, f.FieldName) {
continue
}
if !strings.HasPrefix(name, "/") && !strings.HasPrefix(name, "*/") {
fieldNames[i] = "*/" + name
}
}
return f.IsFieldSelected(fieldNames...)
}
type fieldSelectionBuilder struct{}
func (f *fieldSelectionBuilder) build(params graphql.ResolveParams) (reflect.Value, error) {
var s FieldSelection = &fieldSelectionSet{&params.Info}
return reflect.ValueOf(s), nil
}
func (engine *Engine) asFieldSelection(in reflect.Type) (*fieldSelectionBuilder, error) {
unwrappedInfo, err := unwrap(in)
if err != nil {
return nil, err
}
if unwrappedInfo.array {
return nil, nil
}
if unwrappedInfo.baseType.Kind() == reflect.Interface {
if unwrappedInfo.baseType == _fieldSelectionType {
return &fieldSelectionBuilder{}, nil
}
}
return nil, nil
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/gqlengine-gqlengine.git
git@api.gitlife.ru:oschina-mirror/gqlengine-gqlengine.git
oschina-mirror
gqlengine-gqlengine
gqlengine-gqlengine
master