andreas / ocaml-graphql-server

GraphQL servers in OCaml
MIT License
622 stars 60 forks source link

Nullable defaults args and required default args are impossible to express #195

Open dwwoelfel opened 4 years ago

dwwoelfel commented 4 years ago

There are two use cases of arg defaultValues that can't be expressed with ocaml-graphql-server.

  1. A nullable arg can never be null in the resolver.
  2. A non-null arg can't have a default.

Take the valid graphql schema:

type Query {
  field(argOne: String = "A" argTwo: String! = "B"): String!
}

argTwo can't be expressed with ocaml-graphql-server.

If the resolve function (in js to make it easier to demonstrate what is happening) looks like this:

resolve(_, {argOne, argTwo}) {
  return `${argOne}${argTwo}`
}

A nullable arg can never be null in the resolver:

{
  field(argOne: null)
}
{"field": "B"}

Example of 2:

{
  field(argTwo: null)
}
{"errors": [{"message": "argTwo must be non-null"}]}