// Code generated by smithy-go-codegen DO NOT EDIT.

package types

import (
	smithydocument "github.com/aws/smithy-go/document"
	"time"
)

type ComplexNestedErrorData struct {
	Foo *string

	noSmithyDocumentSerde
}

type EmptyStruct struct {
	noSmithyDocumentSerde
}

type KitchenSink struct {
	Blob []byte

	Boolean *bool

	Double *float64

	EmptyStruct *EmptyStruct

	Float *float32

	HttpdateTimestamp *time.Time

	Integer *int32

	Iso8601Timestamp *time.Time

	// This value conforms to the media type: application/json
	JsonValue *string

	ListOfLists [][]string

	ListOfMapsOfStrings []map[string]string

	ListOfStrings []string

	ListOfStructs []SimpleStruct

	Long *int64

	MapOfListsOfStrings map[string][]string

	MapOfMaps map[string]map[string]string

	MapOfStrings map[string]string

	MapOfStructs map[string]SimpleStruct

	RecursiveList []KitchenSink

	RecursiveMap map[string]KitchenSink

	RecursiveStruct *KitchenSink

	SimpleStruct *SimpleStruct

	String_ *string

	StructWithJsonName *StructWithJsonName

	Timestamp *time.Time

	UnixTimestamp *time.Time

	noSmithyDocumentSerde
}

// A union with a representative set of types for members.
//
// The following types satisfy this interface:
//  MyUnionMemberBlobValue
//  MyUnionMemberBooleanValue
//  MyUnionMemberEnumValue
//  MyUnionMemberListValue
//  MyUnionMemberMapValue
//  MyUnionMemberNumberValue
//  MyUnionMemberStringValue
//  MyUnionMemberStructureValue
//  MyUnionMemberTimestampValue
type MyUnion interface {
	isMyUnion()
}

type MyUnionMemberBlobValue struct {
	Value []byte

	noSmithyDocumentSerde
}

func (*MyUnionMemberBlobValue) isMyUnion() {}

type MyUnionMemberBooleanValue struct {
	Value bool

	noSmithyDocumentSerde
}

func (*MyUnionMemberBooleanValue) isMyUnion() {}

type MyUnionMemberEnumValue struct {
	Value FooEnum

	noSmithyDocumentSerde
}

func (*MyUnionMemberEnumValue) isMyUnion() {}

type MyUnionMemberListValue struct {
	Value []string

	noSmithyDocumentSerde
}

func (*MyUnionMemberListValue) isMyUnion() {}

type MyUnionMemberMapValue struct {
	Value map[string]string

	noSmithyDocumentSerde
}

func (*MyUnionMemberMapValue) isMyUnion() {}

type MyUnionMemberNumberValue struct {
	Value int32

	noSmithyDocumentSerde
}

func (*MyUnionMemberNumberValue) isMyUnion() {}

type MyUnionMemberStringValue struct {
	Value string

	noSmithyDocumentSerde
}

func (*MyUnionMemberStringValue) isMyUnion() {}

type MyUnionMemberStructureValue struct {
	Value GreetingStruct

	noSmithyDocumentSerde
}

func (*MyUnionMemberStructureValue) isMyUnion() {}

type MyUnionMemberTimestampValue struct {
	Value time.Time

	noSmithyDocumentSerde
}

func (*MyUnionMemberTimestampValue) isMyUnion() {}

type SimpleStruct struct {
	Value *string

	noSmithyDocumentSerde
}

type StructWithJsonName struct {
	Value *string

	noSmithyDocumentSerde
}

type GreetingStruct struct {
	Hi *string

	noSmithyDocumentSerde
}

type noSmithyDocumentSerde = smithydocument.NoSerde

// UnknownUnionMember is returned when a union member is returned over the wire,
// but has an unknown tag.
type UnknownUnionMember struct {
	Tag   string
	Value []byte

	noSmithyDocumentSerde
}

func (*UnknownUnionMember) isMyUnion() {}
