Skip to content

Commit

Permalink
[codegen/go] Update Go SDK function output to check for errors (#9274)
Browse files Browse the repository at this point in the history
* [codegen/go] Update Go SDK function output to check for errors

Fixes pulumi/pulumi-aws#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)
}
```

* Fix generated code panic on *nil (#9284)

* [codegen/go] Update Go SDK function output to check for errors

Fixes pulumi/pulumi-aws#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 r != nil {
				s = *r
			}
			return s, err
		}).(GetPolicyDocumentResultOutput)
}
```

* Alternate fix to safeguard dereferencing nil

* Accept codegen changes in the test suite

Co-authored-by: Guinevere Saenger <guinevere@pulumi.com>

* Update CHANGELOG_PENDING.md

Co-authored-by: Anton Tayanovskyy <anton@pulumi.com>
  • Loading branch information
guineveresaenger and t0yv0 committed Mar 25, 2022
1 parent 13756ec commit de0dcbf
Show file tree
Hide file tree
Showing 18 changed files with 91 additions and 19 deletions.
7 changes: 5 additions & 2 deletions CHANGELOG_PENDING.md
Expand Up @@ -34,9 +34,12 @@

- [cli/engine] - Fix a panic due to passing `""` as the ID for a resource read.
[#9243](https://github.com/pulumi/pulumi/pull/9243)

- [cli/engine] - Fix a panic due to `Check` failing while using update plans.
[#9254](https://github.com/pulumi/pulumi/pull/9254)

- [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)
7 changes: 6 additions & 1 deletion pkg/codegen/go/gen.go
Expand Up @@ -2073,11 +2073,16 @@ 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...)
return *r, err
var s ${fn}Result
if r != nil {
s = *r
}
return s, err
}).(${outputType})
}
`

code = strings.ReplaceAll(code, "${fn}", originalName)
code = strings.ReplaceAll(code, "${outputType}", resultTypeName)
fmt.Fprintf(w, code)
Expand Down
Expand Up @@ -33,7 +33,11 @@ func ArgFunctionOutput(ctx *pulumi.Context, args ArgFunctionOutputArgs, opts ...
ApplyT(func(v interface{}) (ArgFunctionResult, error) {
args := v.(ArgFunctionArgs)
r, err := ArgFunction(ctx, &args, opts...)
return *r, err
var s ArgFunctionResult
if r != nil {
s = *r
}
return s, err
}).(ArgFunctionResultOutput)
}

Expand Down
Expand Up @@ -43,7 +43,11 @@ func ListConfigurationsOutput(ctx *pulumi.Context, args ListConfigurationsOutput
ApplyT(func(v interface{}) (ListConfigurationsResult, error) {
args := v.(ListConfigurationsArgs)
r, err := ListConfigurations(ctx, &args, opts...)
return *r, err
var s ListConfigurationsResult
if r != nil {
s = *r
}
return s, err
}).(ListConfigurationsResultOutput)
}

Expand Down
Expand Up @@ -45,7 +45,11 @@ func ListProductFamiliesOutput(ctx *pulumi.Context, args ListProductFamiliesOutp
ApplyT(func(v interface{}) (ListProductFamiliesResult, error) {
args := v.(ListProductFamiliesArgs)
r, err := ListProductFamilies(ctx, &args, opts...)
return *r, err
var s ListProductFamiliesResult
if r != nil {
s = *r
}
return s, err
}).(ListProductFamiliesResultOutput)
}

Expand Down
Expand Up @@ -60,7 +60,11 @@ func GetAmiIdsOutput(ctx *pulumi.Context, args GetAmiIdsOutputArgs, opts ...pulu
ApplyT(func(v interface{}) (GetAmiIdsResult, error) {
args := v.(GetAmiIdsArgs)
r, err := GetAmiIds(ctx, &args, opts...)
return *r, err
var s GetAmiIdsResult
if r != nil {
s = *r
}
return s, err
}).(GetAmiIdsResultOutput)
}

Expand Down
Expand Up @@ -41,7 +41,11 @@ func ListStorageAccountKeysOutput(ctx *pulumi.Context, args ListStorageAccountKe
ApplyT(func(v interface{}) (ListStorageAccountKeysResult, error) {
args := v.(ListStorageAccountKeysArgs)
r, err := ListStorageAccountKeys(ctx, &args, opts...)
return *r, err
var s ListStorageAccountKeysResult
if r != nil {
s = *r
}
return s, err
}).(ListStorageAccountKeysResultOutput)
}

Expand Down
Expand Up @@ -36,7 +36,11 @@ func FuncWithAllOptionalInputsOutput(ctx *pulumi.Context, args FuncWithAllOption
ApplyT(func(v interface{}) (FuncWithAllOptionalInputsResult, error) {
args := v.(FuncWithAllOptionalInputsArgs)
r, err := FuncWithAllOptionalInputs(ctx, &args, opts...)
return *r, err
var s FuncWithAllOptionalInputsResult
if r != nil {
s = *r
}
return s, err
}).(FuncWithAllOptionalInputsResultOutput)
}

Expand Down
Expand Up @@ -47,7 +47,11 @@ func FuncWithDefaultValueOutput(ctx *pulumi.Context, args FuncWithDefaultValueOu
ApplyT(func(v interface{}) (FuncWithDefaultValueResult, error) {
args := v.(FuncWithDefaultValueArgs)
r, err := FuncWithDefaultValue(ctx, &args, opts...)
return *r, err
var s FuncWithDefaultValueResult
if r != nil {
s = *r
}
return s, err
}).(FuncWithDefaultValueResultOutput)
}

Expand Down
Expand Up @@ -34,7 +34,11 @@ func FuncWithDictParamOutput(ctx *pulumi.Context, args FuncWithDictParamOutputAr
ApplyT(func(v interface{}) (FuncWithDictParamResult, error) {
args := v.(FuncWithDictParamArgs)
r, err := FuncWithDictParam(ctx, &args, opts...)
return *r, err
var s FuncWithDictParamResult
if r != nil {
s = *r
}
return s, err
}).(FuncWithDictParamResultOutput)
}

Expand Down
Expand Up @@ -34,7 +34,11 @@ func FuncWithListParamOutput(ctx *pulumi.Context, args FuncWithListParamOutputAr
ApplyT(func(v interface{}) (FuncWithListParamResult, error) {
args := v.(FuncWithListParamArgs)
r, err := FuncWithListParam(ctx, &args, opts...)
return *r, err
var s FuncWithListParamResult
if r != nil {
s = *r
}
return s, err
}).(FuncWithListParamResultOutput)
}

Expand Down
Expand Up @@ -41,7 +41,11 @@ func GetBastionShareableLinkOutput(ctx *pulumi.Context, args GetBastionShareable
ApplyT(func(v interface{}) (GetBastionShareableLinkResult, error) {
args := v.(GetBastionShareableLinkArgs)
r, err := GetBastionShareableLink(ctx, &args, opts...)
return *r, err
var s GetBastionShareableLinkResult
if r != nil {
s = *r
}
return s, err
}).(GetBastionShareableLinkResultOutput)
}

Expand Down
Expand Up @@ -45,7 +45,11 @@ func GetIntegrationRuntimeObjectMetadatumOutput(ctx *pulumi.Context, args GetInt
ApplyT(func(v interface{}) (GetIntegrationRuntimeObjectMetadatumResult, error) {
args := v.(GetIntegrationRuntimeObjectMetadatumArgs)
r, err := GetIntegrationRuntimeObjectMetadatum(ctx, &args, opts...)
return *r, err
var s GetIntegrationRuntimeObjectMetadatumResult
if r != nil {
s = *r
}
return s, err
}).(GetIntegrationRuntimeObjectMetadatumResultOutput)
}

Expand Down
Expand Up @@ -41,7 +41,11 @@ func ListStorageAccountKeysOutput(ctx *pulumi.Context, args ListStorageAccountKe
ApplyT(func(v interface{}) (ListStorageAccountKeysResult, error) {
args := v.(ListStorageAccountKeysArgs)
r, err := ListStorageAccountKeys(ctx, &args, opts...)
return *r, err
var s ListStorageAccountKeysResult
if r != nil {
s = *r
}
return s, err
}).(ListStorageAccountKeysResultOutput)
}

Expand Down
Expand Up @@ -51,7 +51,11 @@ func FuncWithAllOptionalInputsOutput(ctx *pulumi.Context, args FuncWithAllOption
ApplyT(func(v interface{}) (FuncWithAllOptionalInputsResult, error) {
args := v.(FuncWithAllOptionalInputsArgs)
r, err := FuncWithAllOptionalInputs(ctx, &args, opts...)
return *r, err
var s FuncWithAllOptionalInputsResult
if r != nil {
s = *r
}
return s, err
}).(FuncWithAllOptionalInputsResultOutput)
}

Expand Down
Expand Up @@ -36,7 +36,11 @@ func FuncWithAllOptionalInputsOutput(ctx *pulumi.Context, args FuncWithAllOption
ApplyT(func(v interface{}) (FuncWithAllOptionalInputsResult, error) {
args := v.(FuncWithAllOptionalInputsArgs)
r, err := FuncWithAllOptionalInputs(ctx, &args, opts...)
return *r, err
var s FuncWithAllOptionalInputsResult
if r != nil {
s = *r
}
return s, err
}).(FuncWithAllOptionalInputsResultOutput)
}

Expand Down
Expand Up @@ -32,7 +32,11 @@ func ArgFunctionOutput(ctx *pulumi.Context, args ArgFunctionOutputArgs, opts ...
ApplyT(func(v interface{}) (ArgFunctionResult, error) {
args := v.(ArgFunctionArgs)
r, err := ArgFunction(ctx, &args, opts...)
return *r, err
var s ArgFunctionResult
if r != nil {
s = *r
}
return s, err
}).(ArgFunctionResultOutput)
}

Expand Down
Expand Up @@ -33,7 +33,11 @@ func ArgFunctionOutput(ctx *pulumi.Context, args ArgFunctionOutputArgs, opts ...
ApplyT(func(v interface{}) (ArgFunctionResult, error) {
args := v.(ArgFunctionArgs)
r, err := ArgFunction(ctx, &args, opts...)
return *r, err
var s ArgFunctionResult
if r != nil {
s = *r
}
return s, err
}).(ArgFunctionResultOutput)
}

Expand Down

0 comments on commit de0dcbf

Please sign in to comment.