args() :: map()
context() :: map()
error_response() :: {:error, atom()} | {:error, atom(), String.t()}
everything() :: {any(), user(), parent(), field(), context(), args()}
field() :: atom()
parent() :: any()
response() :: :ok | error_response()
t() :: term()
user() :: struct() | nil
before(any(), user(), parent(), field(), context(), args()) :: everything()
can?(any(), user(), parent(), field(), context(), args()) :: response()