package gendemo

// Code generated by go-ipld-prime gengo.  DO NOT EDIT.

import (
	"github.com/ipld/go-ipld-prime/datamodel"
)

var _ datamodel.Node = nil // suppress errors when this dependency is not referenced
// Type is a struct embeding a NodePrototype/Type for every Node implementation in this package.
// One of its major uses is to start the construction of a value.
// You can use it like this:
//
//	gendemo.Type.YourTypeName.NewBuilder().BeginMap() //...
//
// and:
//
//	gendemo.Type.OtherTypeName.NewBuilder().AssignString("x") // ...
var Type typeSlab

type typeSlab struct {
	Bar                     _Bar__Prototype
	Bar__Repr               _Bar__ReprPrototype
	Baz                     _Baz__Prototype
	Baz__Repr               _Baz__ReprPrototype
	Foo                     _Foo__Prototype
	Foo__Repr               _Foo__ReprPrototype
	Int                     _Int__Prototype
	Int__Repr               _Int__ReprPrototype
	Map__String__Msg3       _Map__String__Msg3__Prototype
	Map__String__Msg3__Repr _Map__String__Msg3__ReprPrototype
	Msg3                    _Msg3__Prototype
	Msg3__Repr              _Msg3__ReprPrototype
	String                  _String__Prototype
	String__Repr            _String__ReprPrototype
	UnionKinded             _UnionKinded__Prototype
	UnionKinded__Repr       _UnionKinded__ReprPrototype
}

// --- type definitions follow ---

// Bar matches the IPLD Schema type "Bar".  It has bool kind.
type Bar = *_Bar
type _Bar struct{ x bool }

// Baz matches the IPLD Schema type "Baz".  It has string kind.
type Baz = *_Baz
type _Baz struct{ x string }

// Foo matches the IPLD Schema type "Foo".  It has int kind.
type Foo = *_Foo
type _Foo struct{ x int64 }

// Int matches the IPLD Schema type "Int".  It has int kind.
type Int = *_Int
type _Int struct{ x int64 }

// Map__String__Msg3 matches the IPLD Schema type "Map__String__Msg3".  It has map kind.
type Map__String__Msg3 = *_Map__String__Msg3
type _Map__String__Msg3 struct {
	m map[_String]*_Msg3
	t []_Map__String__Msg3__entry
}
type _Map__String__Msg3__entry struct {
	k _String
	v _Msg3
}

// Msg3 matches the IPLD Schema type "Msg3".  It has struct type-kind, and may be interrogated like map kind.
type Msg3 = *_Msg3
type _Msg3 struct {
	whee _Int
	woot _Int
	waga _Int
}

// String matches the IPLD Schema type "String".  It has string kind.
type String = *_String
type _String struct{ x string }

// UnionKinded matches the IPLD Schema type "UnionKinded".
// UnionKinded has union typekind, which means its data model behaviors are that of a map kind.
type UnionKinded = *_UnionKinded
type _UnionKinded struct {
	tag uint
	x1  _Foo
	x2  _Bar
	x3  _Baz
}
type _UnionKinded__iface interface {
	_UnionKinded__member()
}

func (_Foo) _UnionKinded__member() {}
func (_Bar) _UnionKinded__member() {}
func (_Baz) _UnionKinded__member() {}
