Support string fields and args
At the moment, the fields key in %GraphQL.Type.ObjectType{} and args key only take a map with atom keys. For example:
%GraphQL.Schema{
query: %GraphQL.Type.ObjectType{
name: "RootQueryType",
fields: %{
greeting: %{
type: %GraphQL.Type.String{},
args: %{
name: %{type: %GraphQL.Type.String{}, description: "The name of who you'd like to greet."}
},
resolve: fn(_,_,_) -> "Hello" end
}
}
}
}
However, there are cases where those fields are generated from user's input. By using atoms, we can run out of atoms in the Erlang shell, since atoms are not garbage collected.
It would be ideal to also support this:
%GraphQL.Schema{
query: %GraphQL.Type.ObjectType{
name: "RootQueryType",
fields: %{
"greeting" => %{
type: %GraphQL.Type.String{},
args: %{
"name" => %{type: %GraphQL.Type.String{}, description: "The name of who you'd like to greet."}
},
resolve: fn(_,_,_) -> "Hello" end
}
}
}
}
I've never seen anyone allow a user to define a schema outside of compile time.
Can you expand on your use case more as to what you are trying to do?
Yes, I explained it in another issue here: https://github.com/graphql-elixir/graphql/issues/15#issuecomment-228259099
Basically, I am providing a framework for generic backend, in which the schema is loaded and updated in run time. The schema is defined by user.
I'm not trying to rush here, but I would like to hear the arguments against this. I can see that the dot notation when using atom is nicer than square brackets, but other than that, I see no harm in supporting both.