我有一个简单的case class MyContext(queries: Query)
我提供给架构:sangria.schema.Schema(deriveContextObjectType[MyContext, Query, Unit](_.queries)
MyQuery
是Query
trait MyQuery {
@GraphQLField
def item(ctx: Context[MyContext, Unit])(id: String) ...
}
这很有效。但是,如果我想嵌套解析器怎么办?
query {
item {
status # status is resolved from source B
price # price is resolved from source C
}
}
这可能实现吗?我会返回ObjectType[Item]
status
,其中price
和@GraphQLField
注明了ion-navbar
吗?
答案 0 :(得分:1)
我认为您可以deriveObjectType
使用Item
。它还能够处理@GraphQLField
注释(作为替代方法,您也可以使用IncludeMethods
宏设置)。这是一个例子:
implicit val ItemType = deriveObjectType[MyContext, Item]()
答案 1 :(得分:0)
非常感谢@tenshi's回答!我尝试使用deriveObjectType
,但收到类型错误:
type mismatch;
found : sangria.schema.Context[MyContext,Item]
required: sangria.schema.Context[MyContext,Unit]
但将deriveContextObjectType
与AddFields
结合使用正在发挥作用:
def schema = sangria.schema.Schema(
deriveContextObjectType[MyContext, Query, Unit](_.queries,
AddFields(
Field(
name = "item",
fieldType = deriveContextObjectType[MyContext, Item, Unit](_ => new Item),
resolve = _ => ()
)
))
)
Schema看起来不错,屈服于:
type Query {
item: Item!
}