From b55c8c130fc9fbeb2813a4712054727490df9929 Mon Sep 17 00:00:00 2001 From: Guinevere Saenger Date: Wed, 23 Mar 2022 13:39:41 -0700 Subject: [PATCH] [codegen/go] Update Go SDK function output to check for errors Fixes https://github.com/pulumi/pulumi-aws/issues/1872. This should result in the following sample output in the Go SDK: ``` func GetPolicyDocumentOutput(ctx *pulumi.Context, args GetPolicyDocumentOutputArgs, opts ...pulumi.InvokeOption) GetPolicyDocumentResultOutput { return pulumi.ToOutputWithContext(context.Background(), args). ApplyT(func(v interface{}) (GetPolicyDocumentResult, error) { args := v.(GetPolicyDocumentArgs) r, err := GetPolicyDocument(ctx, &args, opts...) if err != nil { return nil, err } if r == nil { return nil, fmt.Errorf("expected either result or error to be nil, not both") } return *r, err }).(GetPolicyDocumentResultOutput) } ``` --- CHANGELOG_PENDING.md | 3 +++ pkg/codegen/go/gen.go | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index 1f4de013d8af..351724110ebf 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -45,3 +45,6 @@ - [cli] - Stack names correctly take `org set-default` into account when printing. [#9240](https://github.com/pulumi/pulumi/pull/9240) + +- [codegen/go] - Fix Go SDK function output to check for errors + [pulumi-aws#1872](https://github.com/pulumi/pulumi-aws/issues/1872) diff --git a/pkg/codegen/go/gen.go b/pkg/codegen/go/gen.go index 9c82b1f7ba72..dcdd314ea72c 100644 --- a/pkg/codegen/go/gen.go +++ b/pkg/codegen/go/gen.go @@ -2073,11 +2073,18 @@ func ${fn}Output(ctx *pulumi.Context, args ${fn}OutputArgs, opts ...pulumi.Invok ApplyT(func(v interface{}) (${fn}Result, error) { args := v.(${fn}Args) r, err := ${fn}(ctx, &args, opts...) + if err != nil { + return nil, err + } + if r == nil { + return nil, fmt.Errorf("expected either result or error to be nil, not both") + } return *r, err }).(${outputType}) } ` + code = strings.ReplaceAll(code, "${fn}", originalName) code = strings.ReplaceAll(code, "${outputType}", resultTypeName) fmt.Fprintf(w, code)