From beaa2ae2945c75f3bae3402ec0956153b00d7803 Mon Sep 17 00:00:00 2001 From: vvakame Date: Sun, 30 Jun 2019 10:24:47 +0900 Subject: [PATCH] Fix pointer returns from directive --- codegen/args.gotpl | 4 ++++ codegen/field.gotpl | 5 +++++ codegen/input.gotpl | 4 ++++ codegen/testserver/generated.go | 6 ++++++ 4 files changed, 19 insertions(+) diff --git a/codegen/args.gotpl b/codegen/args.gotpl index c76bf0f7648..318f1ff451b 100644 --- a/codegen/args.gotpl +++ b/codegen/args.gotpl @@ -14,6 +14,10 @@ func (ec *executionContext) {{ $name }}(ctx context.Context, rawArgs map[string] } if data, ok := tmp.({{ $arg.TypeReference.GO | ref }}) ; ok { arg{{$i}} = data + {{- if $arg.TypeReference.IsNilable }} + } else if tmp == nil { + arg{{$i}} = nil + {{- end }} } else { return nil, fmt.Errorf(`unexpected type %T from directive, should be {{ $arg.TypeReference.GO }}`, tmp) } diff --git a/codegen/field.gotpl b/codegen/field.gotpl index c0f6fcae0de..1970614be27 100644 --- a/codegen/field.gotpl +++ b/codegen/field.gotpl @@ -107,6 +107,11 @@ if data, ok := tmp.({{ .TypeReference.GO | ref }}) ; ok { return data, nil } + {{- if .TypeReference.IsNilable -}} + else if tmp == nil { + return nil, nil + } + {{- end }} return nil, fmt.Errorf(`unexpected type %T from directive, should be {{ .TypeReference.GO }}`, tmp) {{- else -}} ctx = rctx // use context from middleware stack in children diff --git a/codegen/input.gotpl b/codegen/input.gotpl index b51d53a2627..bdf3622caf1 100644 --- a/codegen/input.gotpl +++ b/codegen/input.gotpl @@ -25,6 +25,10 @@ } if data, ok := tmp.({{ $field.TypeReference.GO | ref }}) ; ok { it.{{$field.GoFieldName}} = data + {{- if $field.TypeReference.IsNilable }} + } else if tmp == nil { + it.{{$field.GoFieldName}} = nil + {{- end }} } else { return it, fmt.Errorf(`unexpected type %T from directive, should be {{ $field.TypeReference.GO }}`, tmp) } diff --git a/codegen/testserver/generated.go b/codegen/testserver/generated.go index 97a5e10d0f5..06bb4766e52 100644 --- a/codegen/testserver/generated.go +++ b/codegen/testserver/generated.go @@ -1928,6 +1928,8 @@ func (ec *executionContext) field_Query_directiveNullableArg_args(ctx context.Co } if data, ok := tmp.(*int); ok { arg0 = data + } else if tmp == nil { + arg0 = nil } else { return nil, fmt.Errorf(`unexpected type %T from directive, should be *int`, tmp) } @@ -1949,6 +1951,8 @@ func (ec *executionContext) field_Query_directiveNullableArg_args(ctx context.Co } if data, ok := tmp.(*int); ok { arg1 = data + } else if tmp == nil { + arg1 = nil } else { return nil, fmt.Errorf(`unexpected type %T from directive, should be *int`, tmp) } @@ -7379,6 +7383,8 @@ func (ec *executionContext) unmarshalInputInputDirectives(ctx context.Context, o } if data, ok := tmp.(*ThirdParty); ok { it.ThirdParty = data + } else if tmp == nil { + it.ThirdParty = nil } else { return it, fmt.Errorf(`unexpected type %T from directive, should be *github.com/99designs/gqlgen/codegen/testserver.ThirdParty`, tmp) }