// Code generated by crd2pulumi DO NOT EDIT.
// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! ***

package v1alpha1

import (
	"context"
	"reflect"

	"antoine-roux.tk/projects/go/pulumi-library/crds/kubernetes/internal"
	v1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/meta/v1"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumix"
)

// TLSStore is the CRD implementation of a Traefik TLS Store. For the time being, only the TLSStore named default is supported. This means that you cannot have two stores that are named default in different Kubernetes namespaces. More info: https://doc.traefik.io/traefik/v2.10/https/tls/#certificates-stores
type TLSStore struct {
	pulumi.CustomResourceState

	ApiVersion pulumi.StringPtrOutput `pulumi:"apiVersion"`
	Kind       pulumi.StringPtrOutput `pulumi:"kind"`
	Metadata   v1.ObjectMetaOutput    `pulumi:"metadata"`
	// TLSStoreSpec defines the desired state of a TLSStore.
	Spec TLSStoreSpecOutput `pulumi:"spec"`
}

// NewTLSStore registers a new resource with the given unique name, arguments, and options.
func NewTLSStore(ctx *pulumi.Context,
	name string, args *TLSStoreArgs, opts ...pulumi.ResourceOption) (*TLSStore, error) {
	if args == nil {
		args = &TLSStoreArgs{}
	}

	args.ApiVersion = pulumi.StringPtr("traefik.io/v1alpha1")
	args.Kind = pulumi.StringPtr("TLSStore")
	opts = internal.PkgResourceDefaultOpts(opts)
	var resource TLSStore
	err := ctx.RegisterResource("kubernetes:traefik.io/v1alpha1:TLSStore", name, args, &resource, opts...)
	if err != nil {
		return nil, err
	}
	return &resource, nil
}

// GetTLSStore gets an existing TLSStore 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 GetTLSStore(ctx *pulumi.Context,
	name string, id pulumi.IDInput, state *TLSStoreState, opts ...pulumi.ResourceOption) (*TLSStore, error) {
	var resource TLSStore
	err := ctx.ReadResource("kubernetes:traefik.io/v1alpha1:TLSStore", name, id, state, &resource, opts...)
	if err != nil {
		return nil, err
	}
	return &resource, nil
}

// Input properties used for looking up and filtering TLSStore resources.
type tlsstoreState struct {
}

type TLSStoreState struct {
}

func (TLSStoreState) ElementType() reflect.Type {
	return reflect.TypeOf((*tlsstoreState)(nil)).Elem()
}

type tlsstoreArgs struct {
	ApiVersion *string        `pulumi:"apiVersion"`
	Kind       *string        `pulumi:"kind"`
	Metadata   *v1.ObjectMeta `pulumi:"metadata"`
	// TLSStoreSpec defines the desired state of a TLSStore.
	Spec *TLSStoreSpec `pulumi:"spec"`
}

// The set of arguments for constructing a TLSStore resource.
type TLSStoreArgs struct {
	ApiVersion pulumi.StringPtrInput
	Kind       pulumi.StringPtrInput
	Metadata   v1.ObjectMetaPtrInput
	// TLSStoreSpec defines the desired state of a TLSStore.
	Spec TLSStoreSpecPtrInput
}

func (TLSStoreArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*tlsstoreArgs)(nil)).Elem()
}

type TLSStoreInput interface {
	pulumi.Input

	ToTLSStoreOutput() TLSStoreOutput
	ToTLSStoreOutputWithContext(ctx context.Context) TLSStoreOutput
}

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

func (i *TLSStore) ToTLSStoreOutput() TLSStoreOutput {
	return i.ToTLSStoreOutputWithContext(context.Background())
}

func (i *TLSStore) ToTLSStoreOutputWithContext(ctx context.Context) TLSStoreOutput {
	return pulumi.ToOutputWithContext(ctx, i).(TLSStoreOutput)
}

func (i *TLSStore) ToOutput(ctx context.Context) pulumix.Output[*TLSStore] {
	return pulumix.Output[*TLSStore]{
		OutputState: i.ToTLSStoreOutputWithContext(ctx).OutputState,
	}
}

type TLSStoreOutput struct{ *pulumi.OutputState }

func (TLSStoreOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**TLSStore)(nil)).Elem()
}

func (o TLSStoreOutput) ToTLSStoreOutput() TLSStoreOutput {
	return o
}

func (o TLSStoreOutput) ToTLSStoreOutputWithContext(ctx context.Context) TLSStoreOutput {
	return o
}

func (o TLSStoreOutput) ToOutput(ctx context.Context) pulumix.Output[*TLSStore] {
	return pulumix.Output[*TLSStore]{
		OutputState: o.OutputState,
	}
}

func (o TLSStoreOutput) ApiVersion() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *TLSStore) pulumi.StringPtrOutput { return v.ApiVersion }).(pulumi.StringPtrOutput)
}

func (o TLSStoreOutput) Kind() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *TLSStore) pulumi.StringPtrOutput { return v.Kind }).(pulumi.StringPtrOutput)
}

func (o TLSStoreOutput) Metadata() v1.ObjectMetaOutput {
	return o.ApplyT(func(v *TLSStore) v1.ObjectMetaOutput { return v.Metadata }).(v1.ObjectMetaOutput)
}

// TLSStoreSpec defines the desired state of a TLSStore.
func (o TLSStoreOutput) Spec() TLSStoreSpecOutput {
	return o.ApplyT(func(v *TLSStore) TLSStoreSpecOutput { return v.Spec }).(TLSStoreSpecOutput)
}

func init() {
	pulumi.RegisterInputType(reflect.TypeOf((*TLSStoreInput)(nil)).Elem(), &TLSStore{})
	pulumi.RegisterOutputType(TLSStoreOutput{})
}