// Code generated - EDITING IS FUTILE. DO NOT EDIT.

package v1_0

import (
	time "time"
)

// +k8s:openapi-gen=true
type InnerObject1 struct {
	InnerField1 string                   `json:"innerField1"`
	InnerField2 []string                 `json:"innerField2"`
	InnerField3 []InnerObject2           `json:"innerField3"`
	InnerField4 []map[string]interface{} `json:"innerField4"`
}

// NewInnerObject1 creates a new InnerObject1 object.
func NewInnerObject1() *InnerObject1 {
	return &InnerObject1{
		InnerField2: []string{},
		InnerField3: []InnerObject2{},
		InnerField4: []map[string]interface{}{},
	}
}

// OpenAPIModelName returns the OpenAPI model name for InnerObject1.
func (InnerObject1) OpenAPIModelName() string {
	return "codegen-tests.pkg.generated.customkind.v1_0.InnerObject1"
}

// +k8s:openapi-gen=true
type InnerObject2 struct {
	Name    string                 `json:"name"`
	Details map[string]interface{} `json:"details"`
}

// NewInnerObject2 creates a new InnerObject2 object.
func NewInnerObject2() *InnerObject2 {
	return &InnerObject2{
		Details: map[string]interface{}{},
	}
}

// OpenAPIModelName returns the OpenAPI model name for InnerObject2.
func (InnerObject2) OpenAPIModelName() string {
	return "codegen-tests.pkg.generated.customkind.v1_0.InnerObject2"
}

// +k8s:openapi-gen=true
type UnionType interface{}

// +k8s:openapi-gen=true
type Type1 struct {
	Group   string   `json:"group"`
	Options []string `json:"options,omitempty"`
}

// NewType1 creates a new Type1 object.
func NewType1() *Type1 {
	return &Type1{}
}

// OpenAPIModelName returns the OpenAPI model name for Type1.
func (Type1) OpenAPIModelName() string {
	return "codegen-tests.pkg.generated.customkind.v1_0.Type1"
}

// +k8s:openapi-gen=true
type Type2 struct {
	Group   string                 `json:"group"`
	Details map[string]interface{} `json:"details"`
}

// NewType2 creates a new Type2 object.
func NewType2() *Type2 {
	return &Type2{
		Details: map[string]interface{}{},
	}
}

// OpenAPIModelName returns the OpenAPI model name for Type2.
func (Type2) OpenAPIModelName() string {
	return "codegen-tests.pkg.generated.customkind.v1_0.Type2"
}

// +k8s:openapi-gen=true
type RecursiveList struct {
	Val  string         `json:"val"`
	Next *RecursiveList `json:"next,omitempty"`
}

// NewRecursiveList creates a new RecursiveList object.
func NewRecursiveList() *RecursiveList {
	return &RecursiveList{}
}

// OpenAPIModelName returns the OpenAPI model name for RecursiveList.
func (RecursiveList) OpenAPIModelName() string {
	return "codegen-tests.pkg.generated.customkind.v1_0.RecursiveList"
}

// +k8s:openapi-gen=true
type Spec struct {
	Field1       string           `json:"field1"`
	Inner        InnerObject1     `json:"inner"`
	Union        UnionType        `json:"union"`
	Map          map[string]Type2 `json:"map"`
	Timestamp    time.Time        `json:"timestamp"`
	Enum         SpecEnum         `json:"enum"`
	I32          int32            `json:"i32"`
	I64          int64            `json:"i64"`
	BoolField    bool             `json:"boolField"`
	FloatField   float64          `json:"floatField"`
	LinkedList   RecursiveList    `json:"linkedList"`
	ExclusiveInt uint64           `json:"exclusiveInt"`
}

// NewSpec creates a new Spec object.
func NewSpec() *Spec {
	return &Spec{
		Inner:      *NewInnerObject1(),
		Map:        map[string]Type2{},
		Enum:       SpecEnumDefault,
		BoolField:  false,
		LinkedList: *NewRecursiveList(),
	}
}

// OpenAPIModelName returns the OpenAPI model name for Spec.
func (Spec) OpenAPIModelName() string {
	return "codegen-tests.pkg.generated.customkind.v1_0.Spec"
}

// +k8s:openapi-gen=true
type SpecEnum string

const (
	SpecEnumVal1    SpecEnum = "val1"
	SpecEnumVal2    SpecEnum = "val2"
	SpecEnumVal3    SpecEnum = "val3"
	SpecEnumVal4    SpecEnum = "val4"
	SpecEnumDefault SpecEnum = "default"
)

// OpenAPIModelName returns the OpenAPI model name for SpecEnum.
func (SpecEnum) OpenAPIModelName() string {
	return "codegen-tests.pkg.generated.customkind.v1_0.SpecEnum"
}
