本文整理汇总了Golang中github.com/housinganywhere/graphql.NewInterface函数的典型用法代码示例。如果您正苦于以下问题:Golang NewInterface函数的具体用法?Golang NewInterface怎么用?Golang NewInterface使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewInterface函数的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: TestTypeSystem_ObjectsMustAdhereToInterfaceTheyImplement_RejectsAnObjectMissingAnInterfaceArgument
func TestTypeSystem_ObjectsMustAdhereToInterfaceTheyImplement_RejectsAnObjectMissingAnInterfaceArgument(t *testing.T) {
anotherInterface := graphql.NewInterface(graphql.InterfaceConfig{
Name: "AnotherInterface",
ResolveType: func(p graphql.ResolveTypeParams) *graphql.Object {
return nil
},
Fields: graphql.Fields{
"field": &graphql.Field{
Type: graphql.String,
Args: graphql.FieldConfigArgument{
"input": &graphql.ArgumentConfig{
Type: graphql.String,
},
},
},
},
})
anotherObject := graphql.NewObject(graphql.ObjectConfig{
Name: "AnotherObject",
Interfaces: []*graphql.Interface{anotherInterface},
Fields: graphql.Fields{
"field": &graphql.Field{
Type: graphql.String,
},
},
})
_, err := schemaWithObjectFieldOfType(anotherObject)
expectedError := `AnotherInterface.field expects argument "input" but AnotherObject.field does not provide it.`
if err == nil || err.Error() != expectedError {
t.Fatalf("Expected error: %v, got %v", expectedError, err)
}
}
开发者ID:housinganywhere,项目名称:graphql,代码行数:32,代码来源:validation_test.go
示例2:
func TestTypeSystem_ObjectsMustAdhereToInterfaceTheyImplement_RejectsAnObjectWithASupersetNullableInterfaceFieldType(t *testing.T) {
anotherInterface := graphql.NewInterface(graphql.InterfaceConfig{
Name: "AnotherInterface",
ResolveType: func(p graphql.ResolveTypeParams) *graphql.Object {
return nil
},
Fields: graphql.Fields{
"field": &graphql.Field{
Type: graphql.NewNonNull(graphql.String),
},
},
})
anotherObject := graphql.NewObject(graphql.ObjectConfig{
Name: "AnotherObject",
Interfaces: []*graphql.Interface{anotherInterface},
Fields: graphql.Fields{
"field": &graphql.Field{
Type: graphql.String,
},
},
})
_, err := schemaWithFieldType(anotherObject)
expectedError := `AnotherInterface.field expects type "String!" but AnotherObject.field provides type "String".`
if err == nil || err.Error() != expectedError {
t.Fatalf("Expected error: %v, got %v", expectedError, err)
}
}
开发者ID:housinganywhere,项目名称:graphql,代码行数:27,代码来源:validation_test.go
示例3: TestTypeSystem_ObjectsCanOnlyImplementInterfaces_AcceptsAnObjectImplementingAnInterface
func TestTypeSystem_ObjectsCanOnlyImplementInterfaces_AcceptsAnObjectImplementingAnInterface(t *testing.T) {
anotherInterfaceType := graphql.NewInterface(graphql.InterfaceConfig{
Name: "AnotherInterface",
ResolveType: func(p graphql.ResolveTypeParams) *graphql.Object {
return nil
},
Fields: graphql.Fields{
"f": &graphql.Field{
Type: graphql.String,
},
},
})
_, err := schemaWithObjectImplementingType(anotherInterfaceType)
if err != nil {
t.Fatalf(`unexpected error: %v"`, err)
}
}
开发者ID:housinganywhere,项目名称:graphql,代码行数:17,代码来源:validation_test.go
示例4: TestTypeSystem_DefinitionExample_IncludesInterfacesThunkSubtypesInTheTypeMap
func TestTypeSystem_DefinitionExample_IncludesInterfacesThunkSubtypesInTheTypeMap(t *testing.T) {
someInterface := graphql.NewInterface(graphql.InterfaceConfig{
Name: "SomeInterface",
Fields: graphql.Fields{
"f": &graphql.Field{
Type: graphql.Int,
},
},
})
someSubType := graphql.NewObject(graphql.ObjectConfig{
Name: "SomeSubtype",
Fields: graphql.Fields{
"f": &graphql.Field{
Type: graphql.Int,
},
},
Interfaces: (graphql.InterfacesThunk)(func() []*graphql.Interface {
return []*graphql.Interface{someInterface}
}),
IsTypeOf: func(p graphql.IsTypeOfParams) bool {
return true
},
})
schema, err := graphql.NewSchema(graphql.SchemaConfig{
Query: graphql.NewObject(graphql.ObjectConfig{
Name: "Query",
Fields: graphql.Fields{
"iface": &graphql.Field{
Type: someInterface,
},
},
}),
Types: []graphql.Type{someSubType},
})
if err != nil {
t.Fatalf("unexpected error, got: %v", err)
}
if schema.Type("SomeSubtype") != someSubType {
t.Fatalf(`schema.GetType("SomeSubtype") expected to equal someSubType, got: %v`, schema.Type("SomeSubtype"))
}
}
开发者ID:housinganywhere,项目名称:graphql,代码行数:43,代码来源:definition_test.go
示例5: schemaWithInterfaceFieldOfType
func schemaWithInterfaceFieldOfType(ttype graphql.Type) (graphql.Schema, error) {
badInterfaceType := graphql.NewInterface(graphql.InterfaceConfig{
Name: "BadInterface",
Fields: graphql.Fields{
"badField": &graphql.Field{
Type: ttype,
},
},
})
return graphql.NewSchema(graphql.SchemaConfig{
Query: graphql.NewObject(graphql.ObjectConfig{
Name: "Query",
Fields: graphql.Fields{
"f": &graphql.Field{
Type: badInterfaceType,
},
},
}),
})
}
开发者ID:housinganywhere,项目名称:graphql,代码行数:21,代码来源:validation_test.go
示例6: NewNodeDefinitions
/*
Given a function to map from an ID to an underlying object, and a function
to map from an underlying object to the concrete GraphQLObjectType it
corresponds to, constructs a `Node` interface that objects can implement,
and a field config for a `node` root field.
If the typeResolver is omitted, object resolution on the interface will be
handled with the `isTypeOf` method on object types, as with any GraphQL
interface without a provided `resolveType` method.
*/
func NewNodeDefinitions(config NodeDefinitionsConfig) *NodeDefinitions {
nodeInterface := graphql.NewInterface(graphql.InterfaceConfig{
Name: "Node",
Description: "An object with an ID",
Fields: graphql.Fields{
"id": &graphql.Field{
Type: graphql.NewNonNull(graphql.ID),
Description: "The id of the object",
},
},
ResolveType: config.TypeResolve,
})
nodeField := &graphql.Field{
Name: "Node",
Description: "Fetches an object given its ID",
Type: nodeInterface,
Args: graphql.FieldConfigArgument{
"id": &graphql.ArgumentConfig{
Type: graphql.NewNonNull(graphql.ID),
Description: "The ID of an object",
},
},
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
if config.IDFetcher == nil {
return nil, nil
}
id := ""
if iid, ok := p.Args["id"]; ok {
id = fmt.Sprintf("%v", iid)
}
return config.IDFetcher(id, p.Info, p.Context)
},
}
return &NodeDefinitions{
NodeInterface: nodeInterface,
NodeField: nodeField,
}
}
开发者ID:housinganywhere,项目名称:relay,代码行数:49,代码来源:node.go
示例7:
"id": &graphql.ArgumentConfig{
Type: graphql.String,
},
},
},
},
})
var objectType = graphql.NewObject(graphql.ObjectConfig{
Name: "Object",
IsTypeOf: func(p graphql.IsTypeOfParams) bool {
return true
},
})
var interfaceType = graphql.NewInterface(graphql.InterfaceConfig{
Name: "Interface",
})
var unionType = graphql.NewUnion(graphql.UnionConfig{
Name: "Union",
Types: []*graphql.Object{
objectType,
},
})
var enumType = graphql.NewEnum(graphql.EnumConfig{
Name: "Enum",
Values: graphql.EnumValueConfigMap{
"foo": &graphql.EnumValueConfig{},
},
})
var inputObjectType = graphql.NewInputObject(graphql.InputObjectConfig{
Name: "InputObject",
开发者ID:housinganywhere,项目名称:graphql,代码行数:31,代码来源:definition_test.go
示例8:
type testCat2 struct {
Name string `json:"name"`
Meows bool `json:"meows"`
}
type testPerson struct {
Name string `json:"name"`
Pets []testPet `json:"pets"`
Friends []testNamedType `json:"friends"`
}
var namedType = graphql.NewInterface(graphql.InterfaceConfig{
Name: "Named",
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
},
},
})
var dogType = graphql.NewObject(graphql.ObjectConfig{
Name: "Dog",
Interfaces: []*graphql.Interface{
namedType,
},
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
},
"barks": &graphql.Field{
Type: graphql.Boolean,
},
开发者ID:housinganywhere,项目名称:graphql,代码行数:31,代码来源:union_interface_test.go
示例9: TestUnionIntersectionTypes_GetsExecutionInfoInResolver
func TestUnionIntersectionTypes_GetsExecutionInfoInResolver(t *testing.T) {
var encounteredContextValue string
var encounteredSchema graphql.Schema
var encounteredRootValue string
var personType2 *graphql.Object
namedType2 := graphql.NewInterface(graphql.InterfaceConfig{
Name: "Named",
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
},
},
ResolveType: func(p graphql.ResolveTypeParams) *graphql.Object {
encounteredSchema = p.Info.Schema
encounteredContextValue, _ = p.Context.Value("authToken").(string)
encounteredRootValue = p.Info.RootValue.(*testPerson).Name
return personType2
},
})
personType2 = graphql.NewObject(graphql.ObjectConfig{
Name: "Person",
Interfaces: []*graphql.Interface{
namedType2,
},
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
},
"friends": &graphql.Field{
Type: graphql.NewList(namedType2),
},
},
})
schema2, _ := graphql.NewSchema(graphql.SchemaConfig{
Query: personType2,
})
john2 := &testPerson{
Name: "John",
Friends: []testNamedType{
liz,
},
}
doc := `{ name, friends { name } }`
expected := &graphql.Result{
Data: map[string]interface{}{
"name": "John",
"friends": []interface{}{
map[string]interface{}{
"name": "Liz",
},
},
},
}
// parse query
ast := testutil.TestParse(t, doc)
// create context
ctx := context.Background()
ctx = context.WithValue(ctx, "authToken", "contextStringValue123")
// execute
ep := graphql.ExecuteParams{
Schema: schema2,
AST: ast,
Root: john2,
Context: ctx,
}
result := testutil.TestExecute(t, ep)
if !reflect.DeepEqual(expected, result) {
t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result))
}
if !reflect.DeepEqual("contextStringValue123", encounteredContextValue) {
t.Fatalf("Unexpected result, Diff: %v", testutil.Diff("contextStringValue123", encounteredContextValue))
}
if !reflect.DeepEqual("John", encounteredRootValue) {
t.Fatalf("Unexpected result, Diff: %v", testutil.Diff("John", encounteredRootValue))
}
if !reflect.DeepEqual(schema2, encounteredSchema) {
t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(schema2, encounteredSchema))
}
}
开发者ID:housinganywhere,项目名称:graphql,代码行数:88,代码来源:union_interface_test.go
示例10: init
func init() {
someBoxInterface = graphql.NewInterface(graphql.InterfaceConfig{
Name: "SomeBox",
ResolveType: func(p graphql.ResolveTypeParams) *graphql.Object {
return stringBoxObject
},
Fields: graphql.FieldsThunk(func() graphql.Fields {
return graphql.Fields{
"deepBox": &graphql.Field{
Type: someBoxInterface,
},
"unrelatedField": &graphql.Field{
Type: graphql.String,
},
}
}),
})
stringBoxObject = graphql.NewObject(graphql.ObjectConfig{
Name: "StringBox",
Interfaces: (graphql.InterfacesThunk)(func() []*graphql.Interface {
return []*graphql.Interface{someBoxInterface}
}),
Fields: graphql.FieldsThunk(func() graphql.Fields {
return graphql.Fields{
"scalar": &graphql.Field{
Type: graphql.String,
},
"deepBox": &graphql.Field{
Type: stringBoxObject,
},
"unrelatedField": &graphql.Field{
Type: graphql.String,
},
"listStringBox": &graphql.Field{
Type: graphql.NewList(stringBoxObject),
},
"stringBox": &graphql.Field{
Type: stringBoxObject,
},
"intBox": &graphql.Field{
Type: intBoxObject,
},
}
}),
})
intBoxObject = graphql.NewObject(graphql.ObjectConfig{
Name: "IntBox",
Interfaces: (graphql.InterfacesThunk)(func() []*graphql.Interface {
return []*graphql.Interface{someBoxInterface}
}),
Fields: graphql.FieldsThunk(func() graphql.Fields {
return graphql.Fields{
"scalar": &graphql.Field{
Type: graphql.Int,
},
"deepBox": &graphql.Field{
Type: someBoxInterface,
},
"unrelatedField": &graphql.Field{
Type: graphql.String,
},
"listStringBox": &graphql.Field{
Type: graphql.NewList(stringBoxObject),
},
"stringBox": &graphql.Field{
Type: stringBoxObject,
},
"intBox": &graphql.Field{
Type: intBoxObject,
},
}
}),
})
var nonNullStringBox1Interface = graphql.NewInterface(graphql.InterfaceConfig{
Name: "NonNullStringBox1",
ResolveType: func(p graphql.ResolveTypeParams) *graphql.Object {
return stringBoxObject
},
Fields: graphql.Fields{
"scalar": &graphql.Field{
Type: graphql.NewNonNull(graphql.String),
},
},
})
NonNullStringBox1Impl := graphql.NewObject(graphql.ObjectConfig{
Name: "NonNullStringBox1Impl",
Interfaces: (graphql.InterfacesThunk)(func() []*graphql.Interface {
return []*graphql.Interface{someBoxInterface, nonNullStringBox1Interface}
}),
Fields: graphql.Fields{
"scalar": &graphql.Field{
Type: graphql.NewNonNull(graphql.String),
},
"unrelatedField": &graphql.Field{
Type: graphql.String,
},
"deepBox": &graphql.Field{
Type: someBoxInterface,
},
},
//.........这里部分代码省略.........
开发者ID:housinganywhere,项目名称:graphql,代码行数:101,代码来源:rules_overlapping_fields_can_be_merged_test.go
示例11: TestResolveTypeOnInterfaceYieldsUsefulError
func TestResolveTypeOnInterfaceYieldsUsefulError(t *testing.T) {
var dogType *graphql.Object
var catType *graphql.Object
var humanType *graphql.Object
petType := graphql.NewInterface(graphql.InterfaceConfig{
Name: "Pet",
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
},
},
ResolveType: func(p graphql.ResolveTypeParams) *graphql.Object {
if _, ok := p.Value.(*testCat); ok {
return catType
}
if _, ok := p.Value.(*testDog); ok {
return dogType
}
if _, ok := p.Value.(*testHuman); ok {
return humanType
}
return nil
},
})
humanType = graphql.NewObject(graphql.ObjectConfig{
Name: "Human",
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
},
},
})
dogType = graphql.NewObject(graphql.ObjectConfig{
Name: "Dog",
Interfaces: []*graphql.Interface{
petType,
},
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
},
"woofs": &graphql.Field{
Type: graphql.Boolean,
},
},
})
catType = graphql.NewObject(graphql.ObjectConfig{
Name: "Cat",
Interfaces: []*graphql.Interface{
petType,
},
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
},
"meows": &graphql.Field{
Type: graphql.Boolean,
},
},
})
schema, err := graphql.NewSchema(graphql.SchemaConfig{
Query: graphql.NewObject(graphql.ObjectConfig{
Name: "Query",
Fields: graphql.Fields{
"pets": &graphql.Field{
Type: graphql.NewList(petType),
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
return []interface{}{
&testDog{"Odie", true},
&testCat{"Garfield", false},
&testHuman{"Jon"},
}, nil
},
},
},
}),
Types: []graphql.Type{catType, dogType},
})
if err != nil {
t.Fatalf("Error in schema %v", err.Error())
}
query := `{
pets {
name
... on Dog {
woofs
}
... on Cat {
meows
}
}
}`
expected := &graphql.Result{
Data: map[string]interface{}{
"pets": []interface{}{
map[string]interface{}{
//.........这里部分代码省略.........
开发者ID:housinganywhere,项目名称:graphql,代码行数:101,代码来源:abstract_test.go
示例12: init
func init() {
Luke = StarWarsChar{
ID: "1000",
Name: "Luke Skywalker",
AppearsIn: []int{4, 5, 6},
HomePlanet: "Tatooine",
}
Vader = StarWarsChar{
ID: "1001",
Name: "Darth Vader",
AppearsIn: []int{4, 5, 6},
HomePlanet: "Tatooine",
}
Han = StarWarsChar{
ID: "1002",
Name: "Han Solo",
AppearsIn: []int{4, 5, 6},
}
Leia = StarWarsChar{
ID: "1003",
Name: "Leia Organa",
AppearsIn: []int{4, 5, 6},
HomePlanet: "Alderaa",
}
Tarkin = StarWarsChar{
ID: "1004",
Name: "Wilhuff Tarkin",
AppearsIn: []int{4},
}
Threepio = StarWarsChar{
ID: "2000",
Name: "C-3PO",
AppearsIn: []int{4, 5, 6},
PrimaryFunction: "Protocol",
}
Artoo = StarWarsChar{
ID: "2001",
Name: "R2-D2",
AppearsIn: []int{4, 5, 6},
PrimaryFunction: "Astromech",
}
Luke.Friends = append(Luke.Friends, []StarWarsChar{Han, Leia, Threepio, Artoo}...)
Vader.Friends = append(Luke.Friends, []StarWarsChar{Tarkin}...)
Han.Friends = append(Han.Friends, []StarWarsChar{Luke, Leia, Artoo}...)
Leia.Friends = append(Leia.Friends, []StarWarsChar{Luke, Han, Threepio, Artoo}...)
Tarkin.Friends = append(Tarkin.Friends, []StarWarsChar{Vader}...)
Threepio.Friends = append(Threepio.Friends, []StarWarsChar{Luke, Han, Leia, Artoo}...)
Artoo.Friends = append(Artoo.Friends, []StarWarsChar{Luke, Han, Leia}...)
HumanData = map[int]StarWarsChar{
1000: Luke,
1001: Vader,
1002: Han,
1003: Leia,
1004: Tarkin,
}
DroidData = map[int]StarWarsChar{
2000: Threepio,
2001: Artoo,
}
episodeEnum := graphql.NewEnum(graphql.EnumConfig{
Name: "Episode",
Description: "One of the films in the Star Wars Trilogy",
Values: graphql.EnumValueConfigMap{
"NEWHOPE": &graphql.EnumValueConfig{
Value: 4,
Description: "Released in 1977.",
},
"EMPIRE": &graphql.EnumValueConfig{
Value: 5,
Description: "Released in 1980.",
},
"JEDI": &graphql.EnumValueConfig{
Value: 6,
Description: "Released in 1983.",
},
},
})
characterInterface := graphql.NewInterface(graphql.InterfaceConfig{
Name: "Character",
Description: "A character in the Star Wars Trilogy",
Fields: graphql.Fields{
"id": &graphql.Field{
Type: graphql.NewNonNull(graphql.String),
Description: "The id of the character.",
},
"name": &graphql.Field{
Type: graphql.String,
Description: "The name of the character.",
},
"appearsIn": &graphql.Field{
Type: graphql.NewList(episodeEnum),
Description: "Which movies they appear in.",
},
},
ResolveType: func(p graphql.ResolveTypeParams) *graphql.Object {
if character, ok := p.Value.(StarWarsChar); ok {
id, _ := strconv.Atoi(character.ID)
human := GetHuman(id)
//.........这里部分代码省略.........
开发者ID:housinganywhere,项目名称:graphql,代码行数:101,代码来源:testutil.go
示例13: init
func init() {
var beingInterface = graphql.NewInterface(graphql.InterfaceConfig{
Name: "Being",
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
Args: graphql.FieldConfigArgument{
"surname": &graphql.ArgumentConfig{
Type: graphql.Boolean,
},
},
},
},
})
var petInterface = graphql.NewInterface(graphql.InterfaceConfig{
Name: "Pet",
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
Args: graphql.FieldConfigArgument{
"surname": &graphql.ArgumentConfig{
Type: graphql.Boolean,
},
},
},
},
})
var canineInterface = graphql.NewInterface(graphql.InterfaceConfig{
Name: "Canine",
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
Args: graphql.FieldConfigArgument{
"surname": &graphql.ArgumentConfig{
Type: graphql.Boolean,
},
},
},
},
})
var dogCommandEnum = graphql.NewEnum(graphql.EnumConfig{
Name: "DogCommand",
Values: graphql.EnumValueConfigMap{
"SIT": &graphql.EnumValueConfig{
Value: 0,
},
"HEEL": &graphql.EnumValueConfig{
Value: 1,
},
"DOWN": &graphql.EnumValueConfig{
Value: 2,
},
},
})
var dogType = graphql.NewObject(graphql.ObjectConfig{
Name: "Dog",
IsTypeOf: func(p graphql.IsTypeOfParams) bool {
return true
},
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
Args: graphql.FieldConfigArgument{
"surname": &graphql.ArgumentConfig{
Type: graphql.Boolean,
},
},
},
"nickname": &graphql.Field{
Type: graphql.String,
},
"barkVolume": &graphql.Field{
Type: graphql.Int,
},
"barks": &graphql.Field{
Type: graphql.Boolean,
},
"doesKnowCommand": &graphql.Field{
Type: graphql.Boolean,
Args: graphql.FieldConfigArgument{
"dogCommand": &graphql.ArgumentConfig{
Type: dogCommandEnum,
},
},
},
"isHousetrained": &graphql.Field{
Type: graphql.Boolean,
Args: graphql.FieldConfigArgument{
"atOtherHomes": &graphql.ArgumentConfig{
Type: graphql.Boolean,
DefaultValue: true,
},
},
},
"isAtLocation": &graphql.Field{
Type: graphql.Boolean,
Args: graphql.FieldConfigArgument{
"x": &graphql.ArgumentConfig{
Type: graphql.Int,
//.........这里部分代码省略.........
开发者ID:housinganywhere,项目名称:graphql,代码行数:101,代码来源:rules_test_harness.go
示例14: TestIsTypeOfUsedToResolveRuntimeTypeForInterface
func TestIsTypeOfUsedToResolveRuntimeTypeForInterface(t *testing.T) {
petType := graphql.NewInterface(graphql.InterfaceConfig{
Name: "Pet",
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
},
},
})
// ie declare that Dog belongs to Pet interface
dogType := graphql.NewObject(graphql.ObjectConfig{
Name: "Dog",
Interfaces: []*graphql.Interface{
petType,
},
IsTypeOf: func(p graphql.IsTypeOfParams) bool {
_, ok := p.Value.(*testDog)
return ok
},
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
if dog, ok := p.Source.(*testDog); ok {
return dog.Name, nil
}
return nil, nil
},
},
"woofs": &graphql.Field{
Type: graphql.Boolean,
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
if dog, ok := p.Source.(*testDog); ok {
return dog.Woofs, nil
}
return nil, nil
},
},
},
})
// ie declare that Cat belongs to Pet interface
catType := graphql.NewObject(graphql.ObjectConfig{
Name: "Cat",
Interfaces: []*graphql.Interface{
petType,
},
IsTypeOf: func(p graphql.IsTypeOfParams) bool {
_, ok := p.Value.(*testCat)
return ok
},
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
if cat, ok := p.Source.(*testCat); ok {
return cat.Name, nil
}
return nil, nil
},
},
"meows": &graphql.Field{
Type: graphql.Boolean,
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
if cat, ok := p.Source.(*testCat); ok {
return cat.Meows, nil
}
return nil, nil
},
},
},
})
schema, err := graphql.NewSchema(graphql.SchemaConfig{
Query: graphql.NewObject(graphql.ObjectConfig{
Name: "Query",
Fields: graphql.Fields{
"pets": &graphql.Field{
Type: graphql.NewList(petType),
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
return []interface{}{
&testDog{"Odie", true},
&testCat{"Garfield", false},
}, nil
},
},
},
}),
Types: []graphql.Type{catType, dogType},
})
if err != nil {
t.Fatalf("Error in schema %v", err.Error())
}
query := `{
pets {
name
... on Dog {
woofs
}
//.........这里部分代码省略.........
开发者ID:housinganywhere,项目名称:graphql,代码行数:101,代码来源:abstract_test.go
注:本文中的github.com/housinganywhere/graphql.NewInterface函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论