///|
/// The built-in `@skip` / `@include` directives. Guarding a field on a boolean
/// variable makes one query text return different shapes: `@include(if: false)`
/// drops the guarded field, `@skip(if: true)` drops it too.
///
/// moon run src/examples/05-directives
#coverage.skip
fn main {
let s = @moongql.Schema::new()
let q = s.object("Query")
q.field("id", NonNull(Scalar("ID")))
q.field("name", NonNull(Scalar("String")))
q.field("age", Scalar("Int"))
let r = @moongql.Resolvers::new()
r.field("Query", "id", fn(_info) { Json("1") })
r.field("Query", "name", fn(_info) { Json("lfanke") })
r.field("Query", "age", fn(_info) { Json(233) })
let query =
#|query ($withAge: Boolean!, $hideName: Boolean!) {
#| id
#| name @skip(if: $hideName)
#| age @include(if: $withAge)
#|}
let shown : Map[String, Json] = { "withAge": true, "hideName": false }
println(@moongql.execute(s, r, query, variables=shown).stringify())
let hidden : Map[String, Json] = { "withAge": false, "hideName": true }
println(@moongql.execute(s, r, query, variables=hidden).stringify())
}