Sangria API は、これらの Map[String, Any] の型を想定しています。
本当じゃない。サングリアで実行するための変数は、任意の型にすることができます。これは、型クラスT
のインスタンスを持っているという唯一の要件です。InputUnmarshaller[T]
すべてのマーシャリング統合ライブラリはInputUnmarshaller
、対応する JSON AST タイプのインスタンスを提供します。
これは、sangria-circeが定義しInputUnmarshaller[io.circe.Json]
、 でインポートできることを意味しますimport sangria.marshalling.circe._
。
Json
以下は、変数としてcirce を使用する方法の小さな自己完結型の例です。
import io.circe.Json
import sangria.schema._
import sangria.execution._
import sangria.macros._
import sangria.marshalling.circe._
val query =
graphql"""
query ($$foo: Int!, $$bar: Int!) {
add(a: $$foo, b: $$bar)
}
"""
val QueryType = ObjectType("Query", fields[Unit, Unit](
Field("add", IntType,
arguments = Argument("a", IntType) :: Argument("b", IntType) :: Nil,
resolve = c ⇒ c.arg[Int]("a") + c.arg[Int]("b"))))
val schema = Schema(QueryType)
val vars = Json.obj(
"foo" → Json.fromInt(123),
"bar" → Json.fromInt(456))
val result: Future[Json] =
Executor.execute(schema, query, variables = vars)
この例でわかるようにio.circe.Json
、実行の変数として使用しました。実行すると、次の結果 JSON が生成されます。
{
"data": {
"add": 579
}
}