package cdn

import (
	"context"
	"reflect"

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

type RealTimeLogDelivery struct {
	pulumi.CustomResourceState

	Domain pulumi.StringOutput `pulumi:"domain"`

	Logstore pulumi.StringOutput `pulumi:"logstore"`

	Project pulumi.StringOutput `pulumi:"project"`

	SlsRegion pulumi.StringOutput `pulumi:"slsRegion"`

	Status pulumi.StringOutput `pulumi:"status"`
}

func NewRealTimeLogDelivery(ctx *pulumi.Context,
	name string, args *RealTimeLogDeliveryArgs, opts ...pulumi.ResourceOption) (*RealTimeLogDelivery, error) {
	if args == nil {
		return nil, errors.New("missing one or more required arguments")
	}

	if args.Domain == nil {
		return nil, errors.New("invalid value for required argument 'Domain'")
	}
	if args.Logstore == nil {
		return nil, errors.New("invalid value for required argument 'Logstore'")
	}
	if args.Project == nil {
		return nil, errors.New("invalid value for required argument 'Project'")
	}
	if args.SlsRegion == nil {
		return nil, errors.New("invalid value for required argument 'SlsRegion'")
	}
	var resource RealTimeLogDelivery
	err := ctx.RegisterResource("alicloud:cdn/realTimeLogDelivery:RealTimeLogDelivery", name, args, &resource, opts...)
	if err != nil {
		return nil, err
	}
	return &resource, nil
}

func GetRealTimeLogDelivery(ctx *pulumi.Context,
	name string, id pulumi.IDInput, state *RealTimeLogDeliveryState, opts ...pulumi.ResourceOption) (*RealTimeLogDelivery, error) {
	var resource RealTimeLogDelivery
	err := ctx.ReadResource("alicloud:cdn/realTimeLogDelivery:RealTimeLogDelivery", name, id, state, &resource, opts...)
	if err != nil {
		return nil, err
	}
	return &resource, nil
}

type realTimeLogDeliveryState struct {

	Domain *string `pulumi:"domain"`

	Logstore *string `pulumi:"logstore"`

	Project *string `pulumi:"project"`

	SlsRegion *string `pulumi:"slsRegion"`

	Status *string `pulumi:"status"`
}

type RealTimeLogDeliveryState struct {

	Domain pulumi.StringPtrInput

	Logstore pulumi.StringPtrInput

	Project pulumi.StringPtrInput

	SlsRegion pulumi.StringPtrInput

	Status pulumi.StringPtrInput
}

func (RealTimeLogDeliveryState) ElementType() reflect.Type {
	return reflect.TypeOf((*realTimeLogDeliveryState)(nil)).Elem()
}

type realTimeLogDeliveryArgs struct {

	Domain string `pulumi:"domain"`

	Logstore string `pulumi:"logstore"`

	Project string `pulumi:"project"`

	SlsRegion string `pulumi:"slsRegion"`
}

type RealTimeLogDeliveryArgs struct {

	Domain pulumi.StringInput

	Logstore pulumi.StringInput

	Project pulumi.StringInput

	SlsRegion pulumi.StringInput
}

func (RealTimeLogDeliveryArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*realTimeLogDeliveryArgs)(nil)).Elem()
}

type RealTimeLogDeliveryInput interface {
	pulumi.Input

	ToRealTimeLogDeliveryOutput() RealTimeLogDeliveryOutput
	ToRealTimeLogDeliveryOutputWithContext(ctx context.Context) RealTimeLogDeliveryOutput
}

func (*RealTimeLogDelivery) ElementType() reflect.Type {
	return reflect.TypeOf((*RealTimeLogDelivery)(nil))
}

func (i *RealTimeLogDelivery) ToRealTimeLogDeliveryOutput() RealTimeLogDeliveryOutput {
	return i.ToRealTimeLogDeliveryOutputWithContext(context.Background())
}

func (i *RealTimeLogDelivery) ToRealTimeLogDeliveryOutputWithContext(ctx context.Context) RealTimeLogDeliveryOutput {
	return pulumi.ToOutputWithContext(ctx, i).(RealTimeLogDeliveryOutput)
}

func (i *RealTimeLogDelivery) ToRealTimeLogDeliveryPtrOutput() RealTimeLogDeliveryPtrOutput {
	return i.ToRealTimeLogDeliveryPtrOutputWithContext(context.Background())
}

func (i *RealTimeLogDelivery) ToRealTimeLogDeliveryPtrOutputWithContext(ctx context.Context) RealTimeLogDeliveryPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(RealTimeLogDeliveryPtrOutput)
}

type RealTimeLogDeliveryPtrInput interface {
	pulumi.Input

	ToRealTimeLogDeliveryPtrOutput() RealTimeLogDeliveryPtrOutput
	ToRealTimeLogDeliveryPtrOutputWithContext(ctx context.Context) RealTimeLogDeliveryPtrOutput
}

type realTimeLogDeliveryPtrType RealTimeLogDeliveryArgs

func (*realTimeLogDeliveryPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**RealTimeLogDelivery)(nil))
}

func (i *realTimeLogDeliveryPtrType) ToRealTimeLogDeliveryPtrOutput() RealTimeLogDeliveryPtrOutput {
	return i.ToRealTimeLogDeliveryPtrOutputWithContext(context.Background())
}

func (i *realTimeLogDeliveryPtrType) ToRealTimeLogDeliveryPtrOutputWithContext(ctx context.Context) RealTimeLogDeliveryPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(RealTimeLogDeliveryPtrOutput)
}

type RealTimeLogDeliveryArrayInput interface {
	pulumi.Input

	ToRealTimeLogDeliveryArrayOutput() RealTimeLogDeliveryArrayOutput
	ToRealTimeLogDeliveryArrayOutputWithContext(context.Context) RealTimeLogDeliveryArrayOutput
}

type RealTimeLogDeliveryArray []RealTimeLogDeliveryInput

func (RealTimeLogDeliveryArray) ElementType() reflect.Type {
	return reflect.TypeOf(([]*RealTimeLogDelivery)(nil))
}

func (i RealTimeLogDeliveryArray) ToRealTimeLogDeliveryArrayOutput() RealTimeLogDeliveryArrayOutput {
	return i.ToRealTimeLogDeliveryArrayOutputWithContext(context.Background())
}

func (i RealTimeLogDeliveryArray) ToRealTimeLogDeliveryArrayOutputWithContext(ctx context.Context) RealTimeLogDeliveryArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(RealTimeLogDeliveryArrayOutput)
}

type RealTimeLogDeliveryMapInput interface {
	pulumi.Input

	ToRealTimeLogDeliveryMapOutput() RealTimeLogDeliveryMapOutput
	ToRealTimeLogDeliveryMapOutputWithContext(context.Context) RealTimeLogDeliveryMapOutput
}

type RealTimeLogDeliveryMap map[string]RealTimeLogDeliveryInput

func (RealTimeLogDeliveryMap) ElementType() reflect.Type {
	return reflect.TypeOf((map[string]*RealTimeLogDelivery)(nil))
}

func (i RealTimeLogDeliveryMap) ToRealTimeLogDeliveryMapOutput() RealTimeLogDeliveryMapOutput {
	return i.ToRealTimeLogDeliveryMapOutputWithContext(context.Background())
}

func (i RealTimeLogDeliveryMap) ToRealTimeLogDeliveryMapOutputWithContext(ctx context.Context) RealTimeLogDeliveryMapOutput {
	return pulumi.ToOutputWithContext(ctx, i).(RealTimeLogDeliveryMapOutput)
}

type RealTimeLogDeliveryOutput struct {
	*pulumi.OutputState
}

func (RealTimeLogDeliveryOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*RealTimeLogDelivery)(nil))
}

func (o RealTimeLogDeliveryOutput) ToRealTimeLogDeliveryOutput() RealTimeLogDeliveryOutput {
	return o
}

func (o RealTimeLogDeliveryOutput) ToRealTimeLogDeliveryOutputWithContext(ctx context.Context) RealTimeLogDeliveryOutput {
	return o
}

func (o RealTimeLogDeliveryOutput) ToRealTimeLogDeliveryPtrOutput() RealTimeLogDeliveryPtrOutput {
	return o.ToRealTimeLogDeliveryPtrOutputWithContext(context.Background())
}

func (o RealTimeLogDeliveryOutput) ToRealTimeLogDeliveryPtrOutputWithContext(ctx context.Context) RealTimeLogDeliveryPtrOutput {
	return o.ApplyT(func(v RealTimeLogDelivery) *RealTimeLogDelivery {
		return &v
	}).(RealTimeLogDeliveryPtrOutput)
}

type RealTimeLogDeliveryPtrOutput struct {
	*pulumi.OutputState
}

func (RealTimeLogDeliveryPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**RealTimeLogDelivery)(nil))
}

func (o RealTimeLogDeliveryPtrOutput) ToRealTimeLogDeliveryPtrOutput() RealTimeLogDeliveryPtrOutput {
	return o
}

func (o RealTimeLogDeliveryPtrOutput) ToRealTimeLogDeliveryPtrOutputWithContext(ctx context.Context) RealTimeLogDeliveryPtrOutput {
	return o
}

type RealTimeLogDeliveryArrayOutput struct{ *pulumi.OutputState }

func (RealTimeLogDeliveryArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]RealTimeLogDelivery)(nil))
}

func (o RealTimeLogDeliveryArrayOutput) ToRealTimeLogDeliveryArrayOutput() RealTimeLogDeliveryArrayOutput {
	return o
}

func (o RealTimeLogDeliveryArrayOutput) ToRealTimeLogDeliveryArrayOutputWithContext(ctx context.Context) RealTimeLogDeliveryArrayOutput {
	return o
}

func (o RealTimeLogDeliveryArrayOutput) Index(i pulumi.IntInput) RealTimeLogDeliveryOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) RealTimeLogDelivery {
		return vs[0].([]RealTimeLogDelivery)[vs[1].(int)]
	}).(RealTimeLogDeliveryOutput)
}

type RealTimeLogDeliveryMapOutput struct{ *pulumi.OutputState }

func (RealTimeLogDeliveryMapOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*map[string]RealTimeLogDelivery)(nil))
}

func (o RealTimeLogDeliveryMapOutput) ToRealTimeLogDeliveryMapOutput() RealTimeLogDeliveryMapOutput {
	return o
}

func (o RealTimeLogDeliveryMapOutput) ToRealTimeLogDeliveryMapOutputWithContext(ctx context.Context) RealTimeLogDeliveryMapOutput {
	return o
}

func (o RealTimeLogDeliveryMapOutput) MapIndex(k pulumi.StringInput) RealTimeLogDeliveryOutput {
	return pulumi.All(o, k).ApplyT(func(vs []interface{}) RealTimeLogDelivery {
		return vs[0].(map[string]RealTimeLogDelivery)[vs[1].(string)]
	}).(RealTimeLogDeliveryOutput)
}

func init() {
	pulumi.RegisterOutputType(RealTimeLogDeliveryOutput{})
	pulumi.RegisterOutputType(RealTimeLogDeliveryPtrOutput{})
	pulumi.RegisterOutputType(RealTimeLogDeliveryArrayOutput{})
	pulumi.RegisterOutputType(RealTimeLogDeliveryMapOutput{})
}
// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package cdn

import (
	"context"
	"reflect"

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

// Provides a CDN Real Time Log Delivery resource.
//
// For information about CDN Real Time Log Delivery and how to use it, see [What is Real Time Log Delivery](https://www.alibabacloud.com/help/doc-detail/100456.htm).
//
// > **NOTE:** Available in v1.134.0+.
//
// ## Example Usage
//
// Basic Usage
//
// ```go
// package main
//
// import (
// 	"github.com/pulumi/pulumi-alicloud/sdk/v3/go/alicloud/cdn"
// 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
// )
//
// func main() {
// 	pulumi.Run(func(ctx *pulumi.Context) error {
// 		_, err := cdn.NewRealTimeLogDelivery(ctx, "example", &cdn.RealTimeLogDeliveryArgs{
// 			Domain:    pulumi.String("example_value"),
// 			Logstore:  pulumi.String("example_value"),
// 			Project:   pulumi.String("example_value"),
// 			SlsRegion: pulumi.String("cn-hanghzou"),
// 		})
// 		if err != nil {
// 			return err
// 		}
// 		return nil
// 	})
// }
// ```
//
// ## Import
//
// CDN Real Time Log Delivery can be imported using the id, e.g.
//
// ```sh
//  $ pulumi import alicloud:cdn/realTimeLogDelivery:RealTimeLogDelivery example <domain>
// ```
type RealTimeLogDelivery struct {
	pulumi.CustomResourceState

	// The accelerated domain name for which you want to configure real-time log delivery. You can specify multiple domain names and separate them with commas (,).
	Domain pulumi.StringOutput `pulumi:"domain"`
	// The name of the Logstore that collects log data from Alibaba Cloud Content Delivery Network (CDN) in real time.
	Logstore pulumi.StringOutput `pulumi:"logstore"`
	// The name of the Log Service project that is used for real-time log delivery.
	Project pulumi.StringOutput `pulumi:"project"`
	// The region where the Log Service project is deployed.
	SlsRegion pulumi.StringOutput `pulumi:"slsRegion"`
	// The status of the real-time log delivery feature. Valid Values: `online` and `offline`.
	Status pulumi.StringOutput `pulumi:"status"`
}

// NewRealTimeLogDelivery registers a new resource with the given unique name, arguments, and options.
func NewRealTimeLogDelivery(ctx *pulumi.Context,
	name string, args *RealTimeLogDeliveryArgs, opts ...pulumi.ResourceOption) (*RealTimeLogDelivery, error) {
	if args == nil {
		return nil, errors.New("missing one or more required arguments")
	}

	if args.Domain == nil {
		return nil, errors.New("invalid value for required argument 'Domain'")
	}
	if args.Logstore == nil {
		return nil, errors.New("invalid value for required argument 'Logstore'")
	}
	if args.Project == nil {
		return nil, errors.New("invalid value for required argument 'Project'")
	}
	if args.SlsRegion == nil {
		return nil, errors.New("invalid value for required argument 'SlsRegion'")
	}
	var resource RealTimeLogDelivery
	err := ctx.RegisterResource("alicloud:cdn/realTimeLogDelivery:RealTimeLogDelivery", name, args, &resource, opts...)
	if err != nil {
		return nil, err
	}
	return &resource, nil
}

// GetRealTimeLogDelivery gets an existing RealTimeLogDelivery resource's state with the given name, ID, and optional
// state properties that are used to uniquely qualify the lookup (nil if not required).
func GetRealTimeLogDelivery(ctx *pulumi.Context,
	name string, id pulumi.IDInput, state *RealTimeLogDeliveryState, opts ...pulumi.ResourceOption) (*RealTimeLogDelivery, error) {
	var resource RealTimeLogDelivery
	err := ctx.ReadResource("alicloud:cdn/realTimeLogDelivery:RealTimeLogDelivery", name, id, state, &resource, opts...)
	if err != nil {
		return nil, err
	}
	return &resource, nil
}

// Input properties used for looking up and filtering RealTimeLogDelivery resources.
type realTimeLogDeliveryState struct {
	// The accelerated domain name for which you want to configure real-time log delivery. You can specify multiple domain names and separate them with commas (,).
	Domain *string `pulumi:"domain"`
	// The name of the Logstore that collects log data from Alibaba Cloud Content Delivery Network (CDN) in real time.
	Logstore *string `pulumi:"logstore"`
	// The name of the Log Service project that is used for real-time log delivery.
	Project *string `pulumi:"project"`
	// The region where the Log Service project is deployed.
	SlsRegion *string `pulumi:"slsRegion"`
	// The status of the real-time log delivery feature. Valid Values: `online` and `offline`.
	Status *string `pulumi:"status"`
}

type RealTimeLogDeliveryState struct {
	// The accelerated domain name for which you want to configure real-time log delivery. You can specify multiple domain names and separate them with commas (,).
	Domain pulumi.StringPtrInput
	// The name of the Logstore that collects log data from Alibaba Cloud Content Delivery Network (CDN) in real time.
	Logstore pulumi.StringPtrInput
	// The name of the Log Service project that is used for real-time log delivery.
	Project pulumi.StringPtrInput
	// The region where the Log Service project is deployed.
	SlsRegion pulumi.StringPtrInput
	// The status of the real-time log delivery feature. Valid Values: `online` and `offline`.
	Status pulumi.StringPtrInput
}

func (RealTimeLogDeliveryState) ElementType() reflect.Type {
	return reflect.TypeOf((*realTimeLogDeliveryState)(nil)).Elem()
}

type realTimeLogDeliveryArgs struct {
	// The accelerated domain name for which you want to configure real-time log delivery. You can specify multiple domain names and separate them with commas (,).
	Domain string `pulumi:"domain"`
	// The name of the Logstore that collects log data from Alibaba Cloud Content Delivery Network (CDN) in real time.
	Logstore string `pulumi:"logstore"`
	// The name of the Log Service project that is used for real-time log delivery.
	Project string `pulumi:"project"`
	// The region where the Log Service project is deployed.
	SlsRegion string `pulumi:"slsRegion"`
}

// The set of arguments for constructing a RealTimeLogDelivery resource.
type RealTimeLogDeliveryArgs struct {
	// The accelerated domain name for which you want to configure real-time log delivery. You can specify multiple domain names and separate them with commas (,).
	Domain pulumi.StringInput
	// The name of the Logstore that collects log data from Alibaba Cloud Content Delivery Network (CDN) in real time.
	Logstore pulumi.StringInput
	// The name of the Log Service project that is used for real-time log delivery.
	Project pulumi.StringInput
	// The region where the Log Service project is deployed.
	SlsRegion pulumi.StringInput
}

func (RealTimeLogDeliveryArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*realTimeLogDeliveryArgs)(nil)).Elem()
}

type RealTimeLogDeliveryInput interface {
	pulumi.Input

	ToRealTimeLogDeliveryOutput() RealTimeLogDeliveryOutput
	ToRealTimeLogDeliveryOutputWithContext(ctx context.Context) RealTimeLogDeliveryOutput
}

func (*RealTimeLogDelivery) ElementType() reflect.Type {
	return reflect.TypeOf((*RealTimeLogDelivery)(nil))
}

func (i *RealTimeLogDelivery) ToRealTimeLogDeliveryOutput() RealTimeLogDeliveryOutput {
	return i.ToRealTimeLogDeliveryOutputWithContext(context.Background())
}

func (i *RealTimeLogDelivery) ToRealTimeLogDeliveryOutputWithContext(ctx context.Context) RealTimeLogDeliveryOutput {
	return pulumi.ToOutputWithContext(ctx, i).(RealTimeLogDeliveryOutput)
}

func (i *RealTimeLogDelivery) ToRealTimeLogDeliveryPtrOutput() RealTimeLogDeliveryPtrOutput {
	return i.ToRealTimeLogDeliveryPtrOutputWithContext(context.Background())
}

func (i *RealTimeLogDelivery) ToRealTimeLogDeliveryPtrOutputWithContext(ctx context.Context) RealTimeLogDeliveryPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(RealTimeLogDeliveryPtrOutput)
}

type RealTimeLogDeliveryPtrInput interface {
	pulumi.Input

	ToRealTimeLogDeliveryPtrOutput() RealTimeLogDeliveryPtrOutput
	ToRealTimeLogDeliveryPtrOutputWithContext(ctx context.Context) RealTimeLogDeliveryPtrOutput
}

type realTimeLogDeliveryPtrType RealTimeLogDeliveryArgs

func (*realTimeLogDeliveryPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**RealTimeLogDelivery)(nil))
}

func (i *realTimeLogDeliveryPtrType) ToRealTimeLogDeliveryPtrOutput() RealTimeLogDeliveryPtrOutput {
	return i.ToRealTimeLogDeliveryPtrOutputWithContext(context.Background())
}

func (i *realTimeLogDeliveryPtrType) ToRealTimeLogDeliveryPtrOutputWithContext(ctx context.Context) RealTimeLogDeliveryPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(RealTimeLogDeliveryPtrOutput)
}

// RealTimeLogDeliveryArrayInput is an input type that accepts RealTimeLogDeliveryArray and RealTimeLogDeliveryArrayOutput values.
// You can construct a concrete instance of `RealTimeLogDeliveryArrayInput` via:
//
//          RealTimeLogDeliveryArray{ RealTimeLogDeliveryArgs{...} }
type RealTimeLogDeliveryArrayInput interface {
	pulumi.Input

	ToRealTimeLogDeliveryArrayOutput() RealTimeLogDeliveryArrayOutput
	ToRealTimeLogDeliveryArrayOutputWithContext(context.Context) RealTimeLogDeliveryArrayOutput
}

type RealTimeLogDeliveryArray []RealTimeLogDeliveryInput

func (RealTimeLogDeliveryArray) ElementType() reflect.Type {
	return reflect.TypeOf(([]*RealTimeLogDelivery)(nil))
}

func (i RealTimeLogDeliveryArray) ToRealTimeLogDeliveryArrayOutput() RealTimeLogDeliveryArrayOutput {
	return i.ToRealTimeLogDeliveryArrayOutputWithContext(context.Background())
}

func (i RealTimeLogDeliveryArray) ToRealTimeLogDeliveryArrayOutputWithContext(ctx context.Context) RealTimeLogDeliveryArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(RealTimeLogDeliveryArrayOutput)
}

// RealTimeLogDeliveryMapInput is an input type that accepts RealTimeLogDeliveryMap and RealTimeLogDeliveryMapOutput values.
// You can construct a concrete instance of `RealTimeLogDeliveryMapInput` via:
//
//          RealTimeLogDeliveryMap{ "key": RealTimeLogDeliveryArgs{...} }
type RealTimeLogDeliveryMapInput interface {
	pulumi.Input

	ToRealTimeLogDeliveryMapOutput() RealTimeLogDeliveryMapOutput
	ToRealTimeLogDeliveryMapOutputWithContext(context.Context) RealTimeLogDeliveryMapOutput
}

type RealTimeLogDeliveryMap map[string]RealTimeLogDeliveryInput

func (RealTimeLogDeliveryMap) ElementType() reflect.Type {
	return reflect.TypeOf((map[string]*RealTimeLogDelivery)(nil))
}

func (i RealTimeLogDeliveryMap) ToRealTimeLogDeliveryMapOutput() RealTimeLogDeliveryMapOutput {
	return i.ToRealTimeLogDeliveryMapOutputWithContext(context.Background())
}

func (i RealTimeLogDeliveryMap) ToRealTimeLogDeliveryMapOutputWithContext(ctx context.Context) RealTimeLogDeliveryMapOutput {
	return pulumi.ToOutputWithContext(ctx, i).(RealTimeLogDeliveryMapOutput)
}

type RealTimeLogDeliveryOutput struct {
	*pulumi.OutputState
}

func (RealTimeLogDeliveryOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*RealTimeLogDelivery)(nil))
}

func (o RealTimeLogDeliveryOutput) ToRealTimeLogDeliveryOutput() RealTimeLogDeliveryOutput {
	return o
}

func (o RealTimeLogDeliveryOutput) ToRealTimeLogDeliveryOutputWithContext(ctx context.Context) RealTimeLogDeliveryOutput {
	return o
}

func (o RealTimeLogDeliveryOutput) ToRealTimeLogDeliveryPtrOutput() RealTimeLogDeliveryPtrOutput {
	return o.ToRealTimeLogDeliveryPtrOutputWithContext(context.Background())
}

func (o RealTimeLogDeliveryOutput) ToRealTimeLogDeliveryPtrOutputWithContext(ctx context.Context) RealTimeLogDeliveryPtrOutput {
	return o.ApplyT(func(v RealTimeLogDelivery) *RealTimeLogDelivery {
		return &v
	}).(RealTimeLogDeliveryPtrOutput)
}

type RealTimeLogDeliveryPtrOutput struct {
	*pulumi.OutputState
}

func (RealTimeLogDeliveryPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**RealTimeLogDelivery)(nil))
}

func (o RealTimeLogDeliveryPtrOutput) ToRealTimeLogDeliveryPtrOutput() RealTimeLogDeliveryPtrOutput {
	return o
}

func (o RealTimeLogDeliveryPtrOutput) ToRealTimeLogDeliveryPtrOutputWithContext(ctx context.Context) RealTimeLogDeliveryPtrOutput {
	return o
}

type RealTimeLogDeliveryArrayOutput struct{ *pulumi.OutputState }

func (RealTimeLogDeliveryArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]RealTimeLogDelivery)(nil))
}

func (o RealTimeLogDeliveryArrayOutput) ToRealTimeLogDeliveryArrayOutput() RealTimeLogDeliveryArrayOutput {
	return o
}

func (o RealTimeLogDeliveryArrayOutput) ToRealTimeLogDeliveryArrayOutputWithContext(ctx context.Context) RealTimeLogDeliveryArrayOutput {
	return o
}

func (o RealTimeLogDeliveryArrayOutput) Index(i pulumi.IntInput) RealTimeLogDeliveryOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) RealTimeLogDelivery {
		return vs[0].([]RealTimeLogDelivery)[vs[1].(int)]
	}).(RealTimeLogDeliveryOutput)
}

type RealTimeLogDeliveryMapOutput struct{ *pulumi.OutputState }

func (RealTimeLogDeliveryMapOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*map[string]RealTimeLogDelivery)(nil))
}

func (o RealTimeLogDeliveryMapOutput) ToRealTimeLogDeliveryMapOutput() RealTimeLogDeliveryMapOutput {
	return o
}

func (o RealTimeLogDeliveryMapOutput) ToRealTimeLogDeliveryMapOutputWithContext(ctx context.Context) RealTimeLogDeliveryMapOutput {
	return o
}

func (o RealTimeLogDeliveryMapOutput) MapIndex(k pulumi.StringInput) RealTimeLogDeliveryOutput {
	return pulumi.All(o, k).ApplyT(func(vs []interface{}) RealTimeLogDelivery {
		return vs[0].(map[string]RealTimeLogDelivery)[vs[1].(string)]
	}).(RealTimeLogDeliveryOutput)
}

func init() {
	pulumi.RegisterOutputType(RealTimeLogDeliveryOutput{})
	pulumi.RegisterOutputType(RealTimeLogDeliveryPtrOutput{})
	pulumi.RegisterOutputType(RealTimeLogDeliveryArrayOutput{})
	pulumi.RegisterOutputType(RealTimeLogDeliveryMapOutput{})
}
