// *** WARNING: this file was generated by test. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package config

import (
	"context"
	"reflect"

	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

type Sandwich struct {
	Bread   *string  `pulumi:"bread"`
	Veggies []string `pulumi:"veggies"`
}

// SandwichInput is an input type that accepts SandwichArgs and SandwichOutput values.
// You can construct a concrete instance of `SandwichInput` via:
//
//          SandwichArgs{...}
type SandwichInput interface {
	pulumi.Input

	ToSandwichOutput() SandwichOutput
	ToSandwichOutputWithContext(context.Context) SandwichOutput
}

type SandwichArgs struct {
	Bread   pulumi.StringPtrInput   `pulumi:"bread"`
	Veggies pulumi.StringArrayInput `pulumi:"veggies"`
}

func (SandwichArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*Sandwich)(nil)).Elem()
}

func (i SandwichArgs) ToSandwichOutput() SandwichOutput {
	return i.ToSandwichOutputWithContext(context.Background())
}

func (i SandwichArgs) ToSandwichOutputWithContext(ctx context.Context) SandwichOutput {
	return pulumi.ToOutputWithContext(ctx, i).(SandwichOutput)
}

type SandwichOutput struct{ *pulumi.OutputState }

func (SandwichOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*Sandwich)(nil)).Elem()
}

func (o SandwichOutput) ToSandwichOutput() SandwichOutput {
	return o
}

func (o SandwichOutput) ToSandwichOutputWithContext(ctx context.Context) SandwichOutput {
	return o
}

func (o SandwichOutput) Bread() pulumi.StringPtrOutput {
	return o.ApplyT(func(v Sandwich) *string { return v.Bread }).(pulumi.StringPtrOutput)
}

func (o SandwichOutput) Veggies() pulumi.StringArrayOutput {
	return o.ApplyT(func(v Sandwich) []string { return v.Veggies }).(pulumi.StringArrayOutput)
}

func init() {
	pulumi.RegisterInputType(reflect.TypeOf((*SandwichInput)(nil)).Elem(), SandwichArgs{})
	pulumi.RegisterOutputType(SandwichOutput{})
}
