diff --git a/pkg/codegen/dotnet/doc.go b/pkg/codegen/dotnet/doc.go index a3bbe8d7a705..6a2a727e308b 100644 --- a/pkg/codegen/dotnet/doc.go +++ b/pkg/codegen/dotnet/doc.go @@ -110,26 +110,36 @@ func (d DocLanguageHelper) GetMethodName(m *schema.Method) string { func (d DocLanguageHelper) GetMethodResultName(pkg *schema.Package, modName string, r *schema.Resource, m *schema.Method) string { - if m.Function.ReturnType == nil { - //nolint - return "void" - } - - // if the return type is an object, assume we generated a Result Type for it - if _, isObject := m.Function.ReturnType.(*schema.ObjectType); isObject { - return fmt.Sprintf("%s.%sResult", resourceName(r), d.GetMethodName(m)) + var returnType *schema.ObjectType + if m.Function.ReturnType != nil { + if objectType, ok := m.Function.ReturnType.(*schema.ObjectType); ok { + returnType = objectType + } else { + typeDetails := map[*schema.ObjectType]*typeDetails{} + mod := &modContext{ + pkg: pkg, + mod: modName, + typeDetails: typeDetails, + namespaces: d.Namespaces, + } + return mod.typeString(m.Function.ReturnType, "", false, false, false) + } } - // otherwise just generate the non-object type - typeDetails := map[*schema.ObjectType]*typeDetails{} - mod := &modContext{ - pkg: pkg, - mod: modName, - typeDetails: typeDetails, - namespaces: d.Namespaces, + if info, ok := pkg.Language["csharp"].(CSharpPackageInfo); ok { + if info.LiftSingleValueMethodReturns && returnType != nil && len(returnType.Properties) == 1 { + typeDetails := map[*schema.ObjectType]*typeDetails{} + mod := &modContext{ + pkg: pkg, + mod: modName, + typeDetails: typeDetails, + namespaces: d.Namespaces, + rootNamespace: info.GetRootNamespace(), + } + return mod.typeString(returnType.Properties[0].Type, "", false, false, false) + } } - - return mod.typeString(m.Function.ReturnType, "", false, false, false) + return fmt.Sprintf("%s.%sResult", resourceName(r), d.GetMethodName(m)) } // GetPropertyName uses the property's csharp-specific language info, if available, to generate diff --git a/pkg/codegen/testing/test/testdata/output-funcs/docs/funcwithemptyoutputs/_index.md b/pkg/codegen/testing/test/testdata/output-funcs/docs/funcwithemptyoutputs/_index.md index 58d6c6102acf..1fb0e5cb482a 100644 --- a/pkg/codegen/testing/test/testdata/output-funcs/docs/funcwithemptyoutputs/_index.md +++ b/pkg/codegen/testing/test/testdata/output-funcs/docs/funcwithemptyoutputs/_index.md @@ -19,11 +19,6 @@ n/a ## Using funcWithEmptyOutputs {#using} -Two invocation forms are available. The direct form accepts plain -arguments and either blocks until the result value is available, or -returns a Promise-wrapped result. The output form accepts -Input-wrapped arguments and returns an Output-wrapped result. -
function funcWithEmptyOutputs(args: FuncWithEmptyOutputsArgs, opts?: InvokeOptions): Promise<FuncWithEmptyOutputsResult>
-function funcWithEmptyOutputsOutput(args: FuncWithEmptyOutputsOutputArgs, opts?: InvokeOptions): Output<FuncWithEmptyOutputsResult>
def func_with_empty_outputs(name: Optional[str] = None,
opts: Optional[InvokeOptions] = None) -> FuncWithEmptyOutputsResult
-def func_with_empty_outputs_output(name: Optional[pulumi.Input[str]] = None,
- opts: Optional[InvokeOptions] = None) -> Output[FuncWithEmptyOutputsResult]
@@ -58,8 +48,6 @@ def func_with_empty_outputs_output(
func FuncWithEmptyOutputs(ctx *Context, args *FuncWithEmptyOutputsArgs, opts ...InvokeOption) (*FuncWithEmptyOutputsResult, error)
-func FuncWithEmptyOutputsOutput(ctx *Context, args *FuncWithEmptyOutputsOutputArgs, opts ...InvokeOption) FuncWithEmptyOutputsResultOutput
public static class FuncWithEmptyOutputs
{
- public static Task<FuncWithEmptyOutputsResult> InvokeAsync(FuncWithEmptyOutputsArgs args, InvokeOptions? opts = null)
- public static Output<FuncWithEmptyOutputsResult> Invoke(FuncWithEmptyOutputsInvokeArgs args, InvokeOptions? opts = null)
+ public static Task<FuncWithEmptyOutputsResult> InvokeAsync(FuncWithEmptyOutputsArgs args, InvokeOptions? opts = null)
}
function abs(args: AbsArgs, opts?: InvokeOptions): Promise<AbsResult>
+function absOutput(args: AbsOutputArgs, opts?: InvokeOptions): Output<AbsResult>
def abs(a: Optional[float] = None,
+ b: Optional[float] = None,
+ opts: Optional[InvokeOptions] = None) -> AbsResult
+def abs_output(a: Optional[pulumi.Input[float]] = None,
+ b: Optional[pulumi.Input[float]] = None,
+ opts: Optional[InvokeOptions] = None) -> Output[AbsResult]
func Abs(ctx *Context, args *AbsArgs, opts ...InvokeOption) (*AbsResult, error)
+func AbsOutput(ctx *Context, args *AbsOutputArgs, opts ...InvokeOption) AbsResultOutput
public static class Abs
+{
+ public static Task<AbsResult> InvokeAsync(AbsArgs args, InvokeOptions? opts = null)
+ public static Output<AbsResult> Invoke(AbsInvokeArgs args, InvokeOptions? opts = null)
+}
public static CompletableFuture<AbsResult> abs(AbsArgs args, InvokeOptions options)
+// Output-based functions aren't available in Java yet
+
fn::invoke:
+ function: std:Abs
+ arguments:
+ # arguments dictionary
function absMultiArgs(args: AbsMultiArgsArgs, opts?: InvokeOptions): Promise<AbsMultiArgsResult>
+function absMultiArgsOutput(args: AbsMultiArgsOutputArgs, opts?: InvokeOptions): Output<AbsMultiArgsResult>
def abs_multi_args(a: Optional[float] = None,
+ b: Optional[float] = None,
+ opts: Optional[InvokeOptions] = None) -> AbsMultiArgsResult
+def abs_multi_args_output(a: Optional[pulumi.Input[float]] = None,
+ b: Optional[pulumi.Input[float]] = None,
+ opts: Optional[InvokeOptions] = None) -> Output[AbsMultiArgsResult]
func AbsMultiArgs(ctx *Context, args *AbsMultiArgsArgs, opts ...InvokeOption) (*AbsMultiArgsResult, error)
+func AbsMultiArgsOutput(ctx *Context, args *AbsMultiArgsOutputArgs, opts ...InvokeOption) AbsMultiArgsResultOutput
public static class AbsMultiArgs
+{
+ public static Task<AbsMultiArgsResult> InvokeAsync(AbsMultiArgsArgs args, InvokeOptions? opts = null)
+ public static Output<AbsMultiArgsResult> Invoke(AbsMultiArgsInvokeArgs args, InvokeOptions? opts = null)
+}
public static CompletableFuture<AbsMultiArgsResult> absMultiArgs(AbsMultiArgsArgs args, InvokeOptions options)
+// Output-based functions aren't available in Java yet
+
fn::invoke:
+ function: std:AbsMultiArgs
+ arguments:
+ # arguments dictionary
function absMultiArgsReducedOutput(args: AbsMultiArgsReducedOutputArgs, opts?: InvokeOptions): Promise<AbsMultiArgsReducedOutputResult>
+function absMultiArgsReducedOutputOutput(args: AbsMultiArgsReducedOutputOutputArgs, opts?: InvokeOptions): Output<AbsMultiArgsReducedOutputResult>
def abs_multi_args_reduced_output(a: Optional[float] = None,
+ b: Optional[float] = None,
+ opts: Optional[InvokeOptions] = None) -> AbsMultiArgsReducedOutputResult
+def abs_multi_args_reduced_output_output(a: Optional[pulumi.Input[float]] = None,
+ b: Optional[pulumi.Input[float]] = None,
+ opts: Optional[InvokeOptions] = None) -> Output[AbsMultiArgsReducedOutputResult]
func AbsMultiArgsReducedOutput(ctx *Context, args *AbsMultiArgsReducedOutputArgs, opts ...InvokeOption) (*AbsMultiArgsReducedOutputResult, error)
+func AbsMultiArgsReducedOutputOutput(ctx *Context, args *AbsMultiArgsReducedOutputOutputArgs, opts ...InvokeOption) AbsMultiArgsReducedOutputResultOutput
public static class AbsMultiArgsReducedOutput
+{
+ public static Task<AbsMultiArgsReducedOutputResult> InvokeAsync(AbsMultiArgsReducedOutputArgs args, InvokeOptions? opts = null)
+ public static Output<AbsMultiArgsReducedOutputResult> Invoke(AbsMultiArgsReducedOutputInvokeArgs args, InvokeOptions? opts = null)
+}
public static CompletableFuture<AbsMultiArgsReducedOutputResult> absMultiArgsReducedOutput(AbsMultiArgsReducedOutputArgs args, InvokeOptions options)
+// Output-based functions aren't available in Java yet
+
fn::invoke:
+ function: std:AbsMultiArgsReducedOutput
+ arguments:
+ # arguments dictionary
function absMultiArgsReducedOutputSwapped(args: AbsMultiArgsReducedOutputSwappedArgs, opts?: InvokeOptions): Promise<AbsMultiArgsReducedOutputSwappedResult>
+function absMultiArgsReducedOutputSwappedOutput(args: AbsMultiArgsReducedOutputSwappedOutputArgs, opts?: InvokeOptions): Output<AbsMultiArgsReducedOutputSwappedResult>
def abs_multi_args_reduced_output_swapped(b: Optional[float] = None,
+ a: Optional[float] = None,
+ opts: Optional[InvokeOptions] = None) -> AbsMultiArgsReducedOutputSwappedResult
+def abs_multi_args_reduced_output_swapped_output(b: Optional[pulumi.Input[float]] = None,
+ a: Optional[pulumi.Input[float]] = None,
+ opts: Optional[InvokeOptions] = None) -> Output[AbsMultiArgsReducedOutputSwappedResult]
func AbsMultiArgsReducedOutputSwapped(ctx *Context, args *AbsMultiArgsReducedOutputSwappedArgs, opts ...InvokeOption) (*AbsMultiArgsReducedOutputSwappedResult, error)
+func AbsMultiArgsReducedOutputSwappedOutput(ctx *Context, args *AbsMultiArgsReducedOutputSwappedOutputArgs, opts ...InvokeOption) AbsMultiArgsReducedOutputSwappedResultOutput
public static class AbsMultiArgsReducedOutputSwapped
+{
+ public static Task<AbsMultiArgsReducedOutputSwappedResult> InvokeAsync(AbsMultiArgsReducedOutputSwappedArgs args, InvokeOptions? opts = null)
+ public static Output<AbsMultiArgsReducedOutputSwappedResult> Invoke(AbsMultiArgsReducedOutputSwappedInvokeArgs args, InvokeOptions? opts = null)
+}
public static CompletableFuture<AbsMultiArgsReducedOutputSwappedResult> absMultiArgsReducedOutputSwapped(AbsMultiArgsReducedOutputSwappedArgs args, InvokeOptions options)
+// Output-based functions aren't available in Java yet
+
fn::invoke:
+ function: std:AbsMultiArgsReducedOutputSwapped
+ arguments:
+ # arguments dictionary
function absReducedOutput(args: AbsReducedOutputArgs, opts?: InvokeOptions): Promise<AbsReducedOutputResult>
+function absReducedOutputOutput(args: AbsReducedOutputOutputArgs, opts?: InvokeOptions): Output<AbsReducedOutputResult>
def abs_reduced_output(a: Optional[float] = None,
+ b: Optional[float] = None,
+ opts: Optional[InvokeOptions] = None) -> AbsReducedOutputResult
+def abs_reduced_output_output(a: Optional[pulumi.Input[float]] = None,
+ b: Optional[pulumi.Input[float]] = None,
+ opts: Optional[InvokeOptions] = None) -> Output[AbsReducedOutputResult]
func AbsReducedOutput(ctx *Context, args *AbsReducedOutputArgs, opts ...InvokeOption) (*AbsReducedOutputResult, error)
+func AbsReducedOutputOutput(ctx *Context, args *AbsReducedOutputOutputArgs, opts ...InvokeOption) AbsReducedOutputResultOutput
public static class AbsReducedOutput
+{
+ public static Task<AbsReducedOutputResult> InvokeAsync(AbsReducedOutputArgs args, InvokeOptions? opts = null)
+ public static Output<AbsReducedOutputResult> Invoke(AbsReducedOutputInvokeArgs args, InvokeOptions? opts = null)
+}
public static CompletableFuture<AbsReducedOutputResult> absReducedOutput(AbsReducedOutputArgs args, InvokeOptions options)
+// Output-based functions aren't available in Java yet
+
fn::invoke:
+ function: std:AbsReducedOutput
+ arguments:
+ # arguments dictionary
new Provider(name: string, args?: ProviderArgs, opts?: CustomResourceOptions);
@overload
+def Provider(resource_name: str,
+ opts: Optional[ResourceOptions] = None)
+@overload
+def Provider(resource_name: str,
+ args: Optional[ProviderArgs] = None,
+ opts: Optional[ResourceOptions] = None)
func NewProvider(ctx *Context, name string, args *ProviderArgs, opts ...ResourceOption) (*Provider, error)
public Provider(string name, ProviderArgs? args = null, CustomResourceOptions? opts = null)
+public Provider(String name, ProviderArgs args)
+public Provider(String name, ProviderArgs args, CustomResourceOptions options)
+
type: pulumi:providers:std
+properties: # The arguments to resource properties.
+options: # Bag of options to control resource's behavior.
+
+
The provider-assigned unique ID for this managed resource.
+The provider-assigned unique ID for this managed resource.
+The provider-assigned unique ID for this managed resource.
+The provider-assigned unique ID for this managed resource.
+The provider-assigned unique ID for this managed resource.
+The provider-assigned unique ID for this managed resource.
+