Open flintforge opened 2 years ago
currently the resolver is using this return type:
RespResult* = Result[Node, string]
if you need custom error message, a possible alternative is using object variant to replace the string.
type
RespErrorType* = enum
SimpleMsg # formatting handled by executor
CustomMsg # formatting done by user
ListMsg # return one or more error messages
etc.
RespError = object
case typ*: RespErrorType
of SimpleMsg: msg*: string
of CustomMsg: customMsg*: string
of ListMsg: listMsg*: seq[string or errorobject]
etc.
RespResult* = Result[Node, RespError]
then you need to overload err
to provide backward compatible helper proc.
the rest is quite straight forward modification in executeField
of executor.nim
.
But if you have other solution, we can discuss it further.
Errors raised in a resolver — let's take
get they type after a
RespResult
holding a message string and the place where they're occur. Comparing the situation to other GraphQL implementations, I'm wondering if there's a way to provide custom error messages ? Perhaps raising an other exception when an unspecified error kind is met, and adding a custom one with no formatting along the lines ? https://github.com/status-im/nim-graphql/blob/4f98887894b53dc2247ca461a0f2771d1a23e7fb/graphql/graphql.nim#L260Also, is it possible to stack them in a sequence before returning ? I tried with
ctx.errors.add
but this is a user context, not the calling one (if that makes sense, but I'm still building the mental picture of the mechanisms). If not I would gladly PR on that.