github.com/ipld/go-ipld-prime@v0.21.0/node/gendemo/ipldsch_satisfaction.go (about)

     1  package gendemo
     2  
     3  // Code generated by go-ipld-prime gengo.  DO NOT EDIT.
     4  
     5  import (
     6  	"github.com/ipld/go-ipld-prime/datamodel"
     7  	"github.com/ipld/go-ipld-prime/node/mixins"
     8  	"github.com/ipld/go-ipld-prime/schema"
     9  )
    10  
    11  func (n Bar) Bool() bool {
    12  	return n.x
    13  }
    14  func (_Bar__Prototype) FromBool(v bool) (Bar, error) {
    15  	n := _Bar{v}
    16  	return &n, nil
    17  }
    18  
    19  type _Bar__Maybe struct {
    20  	m schema.Maybe
    21  	v _Bar
    22  }
    23  type MaybeBar = *_Bar__Maybe
    24  
    25  func (m MaybeBar) IsNull() bool {
    26  	return m.m == schema.Maybe_Null
    27  }
    28  func (m MaybeBar) IsAbsent() bool {
    29  	return m.m == schema.Maybe_Absent
    30  }
    31  func (m MaybeBar) Exists() bool {
    32  	return m.m == schema.Maybe_Value
    33  }
    34  func (m MaybeBar) AsNode() datamodel.Node {
    35  	switch m.m {
    36  	case schema.Maybe_Absent:
    37  		return datamodel.Absent
    38  	case schema.Maybe_Null:
    39  		return datamodel.Null
    40  	case schema.Maybe_Value:
    41  		return &m.v
    42  	default:
    43  		panic("unreachable")
    44  	}
    45  }
    46  func (m MaybeBar) Must() Bar {
    47  	if !m.Exists() {
    48  		panic("unbox of a maybe rejected")
    49  	}
    50  	return &m.v
    51  }
    52  
    53  var _ datamodel.Node = (Bar)(&_Bar{})
    54  var _ schema.TypedNode = (Bar)(&_Bar{})
    55  
    56  func (Bar) Kind() datamodel.Kind {
    57  	return datamodel.Kind_Bool
    58  }
    59  func (Bar) LookupByString(string) (datamodel.Node, error) {
    60  	return mixins.Bool{TypeName: "gendemo.Bar"}.LookupByString("")
    61  }
    62  func (Bar) LookupByNode(datamodel.Node) (datamodel.Node, error) {
    63  	return mixins.Bool{TypeName: "gendemo.Bar"}.LookupByNode(nil)
    64  }
    65  func (Bar) LookupByIndex(idx int64) (datamodel.Node, error) {
    66  	return mixins.Bool{TypeName: "gendemo.Bar"}.LookupByIndex(0)
    67  }
    68  func (Bar) LookupBySegment(seg datamodel.PathSegment) (datamodel.Node, error) {
    69  	return mixins.Bool{TypeName: "gendemo.Bar"}.LookupBySegment(seg)
    70  }
    71  func (Bar) MapIterator() datamodel.MapIterator {
    72  	return nil
    73  }
    74  func (Bar) ListIterator() datamodel.ListIterator {
    75  	return nil
    76  }
    77  func (Bar) Length() int64 {
    78  	return -1
    79  }
    80  func (Bar) IsAbsent() bool {
    81  	return false
    82  }
    83  func (Bar) IsNull() bool {
    84  	return false
    85  }
    86  func (n Bar) AsBool() (bool, error) {
    87  	return n.x, nil
    88  }
    89  func (Bar) AsInt() (int64, error) {
    90  	return mixins.Bool{TypeName: "gendemo.Bar"}.AsInt()
    91  }
    92  func (Bar) AsFloat() (float64, error) {
    93  	return mixins.Bool{TypeName: "gendemo.Bar"}.AsFloat()
    94  }
    95  func (Bar) AsString() (string, error) {
    96  	return mixins.Bool{TypeName: "gendemo.Bar"}.AsString()
    97  }
    98  func (Bar) AsBytes() ([]byte, error) {
    99  	return mixins.Bool{TypeName: "gendemo.Bar"}.AsBytes()
   100  }
   101  func (Bar) AsLink() (datamodel.Link, error) {
   102  	return mixins.Bool{TypeName: "gendemo.Bar"}.AsLink()
   103  }
   104  func (Bar) Prototype() datamodel.NodePrototype {
   105  	return _Bar__Prototype{}
   106  }
   107  
   108  type _Bar__Prototype struct{}
   109  
   110  func (_Bar__Prototype) NewBuilder() datamodel.NodeBuilder {
   111  	var nb _Bar__Builder
   112  	nb.Reset()
   113  	return &nb
   114  }
   115  
   116  type _Bar__Builder struct {
   117  	_Bar__Assembler
   118  }
   119  
   120  func (nb *_Bar__Builder) Build() datamodel.Node {
   121  	if *nb.m != schema.Maybe_Value {
   122  		panic("invalid state: cannot call Build on an assembler that's not finished")
   123  	}
   124  	return nb.w
   125  }
   126  func (nb *_Bar__Builder) Reset() {
   127  	var w _Bar
   128  	var m schema.Maybe
   129  	*nb = _Bar__Builder{_Bar__Assembler{w: &w, m: &m}}
   130  }
   131  
   132  type _Bar__Assembler struct {
   133  	w *_Bar
   134  	m *schema.Maybe
   135  }
   136  
   137  func (na *_Bar__Assembler) reset() {}
   138  func (_Bar__Assembler) BeginMap(sizeHint int64) (datamodel.MapAssembler, error) {
   139  	return mixins.BoolAssembler{TypeName: "gendemo.Bar"}.BeginMap(0)
   140  }
   141  func (_Bar__Assembler) BeginList(sizeHint int64) (datamodel.ListAssembler, error) {
   142  	return mixins.BoolAssembler{TypeName: "gendemo.Bar"}.BeginList(0)
   143  }
   144  func (na *_Bar__Assembler) AssignNull() error {
   145  	switch *na.m {
   146  	case allowNull:
   147  		*na.m = schema.Maybe_Null
   148  		return nil
   149  	case schema.Maybe_Absent:
   150  		return mixins.BoolAssembler{TypeName: "gendemo.Bar"}.AssignNull()
   151  	case schema.Maybe_Value, schema.Maybe_Null:
   152  		panic("invalid state: cannot assign into assembler that's already finished")
   153  	}
   154  	panic("unreachable")
   155  }
   156  func (na *_Bar__Assembler) AssignBool(v bool) error {
   157  	switch *na.m {
   158  	case schema.Maybe_Value, schema.Maybe_Null:
   159  		panic("invalid state: cannot assign into assembler that's already finished")
   160  	}
   161  	na.w.x = v
   162  	*na.m = schema.Maybe_Value
   163  	return nil
   164  }
   165  func (_Bar__Assembler) AssignInt(int64) error {
   166  	return mixins.BoolAssembler{TypeName: "gendemo.Bar"}.AssignInt(0)
   167  }
   168  func (_Bar__Assembler) AssignFloat(float64) error {
   169  	return mixins.BoolAssembler{TypeName: "gendemo.Bar"}.AssignFloat(0)
   170  }
   171  func (_Bar__Assembler) AssignString(string) error {
   172  	return mixins.BoolAssembler{TypeName: "gendemo.Bar"}.AssignString("")
   173  }
   174  func (_Bar__Assembler) AssignBytes([]byte) error {
   175  	return mixins.BoolAssembler{TypeName: "gendemo.Bar"}.AssignBytes(nil)
   176  }
   177  func (_Bar__Assembler) AssignLink(datamodel.Link) error {
   178  	return mixins.BoolAssembler{TypeName: "gendemo.Bar"}.AssignLink(nil)
   179  }
   180  func (na *_Bar__Assembler) AssignNode(v datamodel.Node) error {
   181  	if v.IsNull() {
   182  		return na.AssignNull()
   183  	}
   184  	if v2, ok := v.(*_Bar); ok {
   185  		switch *na.m {
   186  		case schema.Maybe_Value, schema.Maybe_Null:
   187  			panic("invalid state: cannot assign into assembler that's already finished")
   188  		}
   189  		*na.w = *v2
   190  		*na.m = schema.Maybe_Value
   191  		return nil
   192  	}
   193  	if v2, err := v.AsBool(); err != nil {
   194  		return err
   195  	} else {
   196  		return na.AssignBool(v2)
   197  	}
   198  }
   199  func (_Bar__Assembler) Prototype() datamodel.NodePrototype {
   200  	return _Bar__Prototype{}
   201  }
   202  func (Bar) Type() schema.Type {
   203  	return nil /*TODO:typelit*/
   204  }
   205  func (n Bar) Representation() datamodel.Node {
   206  	return (*_Bar__Repr)(n)
   207  }
   208  
   209  type _Bar__Repr = _Bar
   210  
   211  var _ datamodel.Node = &_Bar__Repr{}
   212  
   213  type _Bar__ReprPrototype = _Bar__Prototype
   214  type _Bar__ReprAssembler = _Bar__Assembler
   215  
   216  func (n Baz) String() string {
   217  	return n.x
   218  }
   219  func (_Baz__Prototype) fromString(w *_Baz, v string) error {
   220  	*w = _Baz{v}
   221  	return nil
   222  }
   223  func (_Baz__Prototype) FromString(v string) (Baz, error) {
   224  	n := _Baz{v}
   225  	return &n, nil
   226  }
   227  
   228  type _Baz__Maybe struct {
   229  	m schema.Maybe
   230  	v _Baz
   231  }
   232  type MaybeBaz = *_Baz__Maybe
   233  
   234  func (m MaybeBaz) IsNull() bool {
   235  	return m.m == schema.Maybe_Null
   236  }
   237  func (m MaybeBaz) IsAbsent() bool {
   238  	return m.m == schema.Maybe_Absent
   239  }
   240  func (m MaybeBaz) Exists() bool {
   241  	return m.m == schema.Maybe_Value
   242  }
   243  func (m MaybeBaz) AsNode() datamodel.Node {
   244  	switch m.m {
   245  	case schema.Maybe_Absent:
   246  		return datamodel.Absent
   247  	case schema.Maybe_Null:
   248  		return datamodel.Null
   249  	case schema.Maybe_Value:
   250  		return &m.v
   251  	default:
   252  		panic("unreachable")
   253  	}
   254  }
   255  func (m MaybeBaz) Must() Baz {
   256  	if !m.Exists() {
   257  		panic("unbox of a maybe rejected")
   258  	}
   259  	return &m.v
   260  }
   261  
   262  var _ datamodel.Node = (Baz)(&_Baz{})
   263  var _ schema.TypedNode = (Baz)(&_Baz{})
   264  
   265  func (Baz) Kind() datamodel.Kind {
   266  	return datamodel.Kind_String
   267  }
   268  func (Baz) LookupByString(string) (datamodel.Node, error) {
   269  	return mixins.String{TypeName: "gendemo.Baz"}.LookupByString("")
   270  }
   271  func (Baz) LookupByNode(datamodel.Node) (datamodel.Node, error) {
   272  	return mixins.String{TypeName: "gendemo.Baz"}.LookupByNode(nil)
   273  }
   274  func (Baz) LookupByIndex(idx int64) (datamodel.Node, error) {
   275  	return mixins.String{TypeName: "gendemo.Baz"}.LookupByIndex(0)
   276  }
   277  func (Baz) LookupBySegment(seg datamodel.PathSegment) (datamodel.Node, error) {
   278  	return mixins.String{TypeName: "gendemo.Baz"}.LookupBySegment(seg)
   279  }
   280  func (Baz) MapIterator() datamodel.MapIterator {
   281  	return nil
   282  }
   283  func (Baz) ListIterator() datamodel.ListIterator {
   284  	return nil
   285  }
   286  func (Baz) Length() int64 {
   287  	return -1
   288  }
   289  func (Baz) IsAbsent() bool {
   290  	return false
   291  }
   292  func (Baz) IsNull() bool {
   293  	return false
   294  }
   295  func (Baz) AsBool() (bool, error) {
   296  	return mixins.String{TypeName: "gendemo.Baz"}.AsBool()
   297  }
   298  func (Baz) AsInt() (int64, error) {
   299  	return mixins.String{TypeName: "gendemo.Baz"}.AsInt()
   300  }
   301  func (Baz) AsFloat() (float64, error) {
   302  	return mixins.String{TypeName: "gendemo.Baz"}.AsFloat()
   303  }
   304  func (n Baz) AsString() (string, error) {
   305  	return n.x, nil
   306  }
   307  func (Baz) AsBytes() ([]byte, error) {
   308  	return mixins.String{TypeName: "gendemo.Baz"}.AsBytes()
   309  }
   310  func (Baz) AsLink() (datamodel.Link, error) {
   311  	return mixins.String{TypeName: "gendemo.Baz"}.AsLink()
   312  }
   313  func (Baz) Prototype() datamodel.NodePrototype {
   314  	return _Baz__Prototype{}
   315  }
   316  
   317  type _Baz__Prototype struct{}
   318  
   319  func (_Baz__Prototype) NewBuilder() datamodel.NodeBuilder {
   320  	var nb _Baz__Builder
   321  	nb.Reset()
   322  	return &nb
   323  }
   324  
   325  type _Baz__Builder struct {
   326  	_Baz__Assembler
   327  }
   328  
   329  func (nb *_Baz__Builder) Build() datamodel.Node {
   330  	if *nb.m != schema.Maybe_Value {
   331  		panic("invalid state: cannot call Build on an assembler that's not finished")
   332  	}
   333  	return nb.w
   334  }
   335  func (nb *_Baz__Builder) Reset() {
   336  	var w _Baz
   337  	var m schema.Maybe
   338  	*nb = _Baz__Builder{_Baz__Assembler{w: &w, m: &m}}
   339  }
   340  
   341  type _Baz__Assembler struct {
   342  	w *_Baz
   343  	m *schema.Maybe
   344  }
   345  
   346  func (na *_Baz__Assembler) reset() {}
   347  func (_Baz__Assembler) BeginMap(sizeHint int64) (datamodel.MapAssembler, error) {
   348  	return mixins.StringAssembler{TypeName: "gendemo.Baz"}.BeginMap(0)
   349  }
   350  func (_Baz__Assembler) BeginList(sizeHint int64) (datamodel.ListAssembler, error) {
   351  	return mixins.StringAssembler{TypeName: "gendemo.Baz"}.BeginList(0)
   352  }
   353  func (na *_Baz__Assembler) AssignNull() error {
   354  	switch *na.m {
   355  	case allowNull:
   356  		*na.m = schema.Maybe_Null
   357  		return nil
   358  	case schema.Maybe_Absent:
   359  		return mixins.StringAssembler{TypeName: "gendemo.Baz"}.AssignNull()
   360  	case schema.Maybe_Value, schema.Maybe_Null:
   361  		panic("invalid state: cannot assign into assembler that's already finished")
   362  	}
   363  	panic("unreachable")
   364  }
   365  func (_Baz__Assembler) AssignBool(bool) error {
   366  	return mixins.StringAssembler{TypeName: "gendemo.Baz"}.AssignBool(false)
   367  }
   368  func (_Baz__Assembler) AssignInt(int64) error {
   369  	return mixins.StringAssembler{TypeName: "gendemo.Baz"}.AssignInt(0)
   370  }
   371  func (_Baz__Assembler) AssignFloat(float64) error {
   372  	return mixins.StringAssembler{TypeName: "gendemo.Baz"}.AssignFloat(0)
   373  }
   374  func (na *_Baz__Assembler) AssignString(v string) error {
   375  	switch *na.m {
   376  	case schema.Maybe_Value, schema.Maybe_Null:
   377  		panic("invalid state: cannot assign into assembler that's already finished")
   378  	}
   379  	na.w.x = v
   380  	*na.m = schema.Maybe_Value
   381  	return nil
   382  }
   383  func (_Baz__Assembler) AssignBytes([]byte) error {
   384  	return mixins.StringAssembler{TypeName: "gendemo.Baz"}.AssignBytes(nil)
   385  }
   386  func (_Baz__Assembler) AssignLink(datamodel.Link) error {
   387  	return mixins.StringAssembler{TypeName: "gendemo.Baz"}.AssignLink(nil)
   388  }
   389  func (na *_Baz__Assembler) AssignNode(v datamodel.Node) error {
   390  	if v.IsNull() {
   391  		return na.AssignNull()
   392  	}
   393  	if v2, ok := v.(*_Baz); ok {
   394  		switch *na.m {
   395  		case schema.Maybe_Value, schema.Maybe_Null:
   396  			panic("invalid state: cannot assign into assembler that's already finished")
   397  		}
   398  		*na.w = *v2
   399  		*na.m = schema.Maybe_Value
   400  		return nil
   401  	}
   402  	if v2, err := v.AsString(); err != nil {
   403  		return err
   404  	} else {
   405  		return na.AssignString(v2)
   406  	}
   407  }
   408  func (_Baz__Assembler) Prototype() datamodel.NodePrototype {
   409  	return _Baz__Prototype{}
   410  }
   411  func (Baz) Type() schema.Type {
   412  	return nil /*TODO:typelit*/
   413  }
   414  func (n Baz) Representation() datamodel.Node {
   415  	return (*_Baz__Repr)(n)
   416  }
   417  
   418  type _Baz__Repr = _Baz
   419  
   420  var _ datamodel.Node = &_Baz__Repr{}
   421  
   422  type _Baz__ReprPrototype = _Baz__Prototype
   423  type _Baz__ReprAssembler = _Baz__Assembler
   424  
   425  func (n Foo) Int() int64 {
   426  	return n.x
   427  }
   428  func (_Foo__Prototype) FromInt(v int64) (Foo, error) {
   429  	n := _Foo{v}
   430  	return &n, nil
   431  }
   432  
   433  type _Foo__Maybe struct {
   434  	m schema.Maybe
   435  	v _Foo
   436  }
   437  type MaybeFoo = *_Foo__Maybe
   438  
   439  func (m MaybeFoo) IsNull() bool {
   440  	return m.m == schema.Maybe_Null
   441  }
   442  func (m MaybeFoo) IsAbsent() bool {
   443  	return m.m == schema.Maybe_Absent
   444  }
   445  func (m MaybeFoo) Exists() bool {
   446  	return m.m == schema.Maybe_Value
   447  }
   448  func (m MaybeFoo) AsNode() datamodel.Node {
   449  	switch m.m {
   450  	case schema.Maybe_Absent:
   451  		return datamodel.Absent
   452  	case schema.Maybe_Null:
   453  		return datamodel.Null
   454  	case schema.Maybe_Value:
   455  		return &m.v
   456  	default:
   457  		panic("unreachable")
   458  	}
   459  }
   460  func (m MaybeFoo) Must() Foo {
   461  	if !m.Exists() {
   462  		panic("unbox of a maybe rejected")
   463  	}
   464  	return &m.v
   465  }
   466  
   467  var _ datamodel.Node = (Foo)(&_Foo{})
   468  var _ schema.TypedNode = (Foo)(&_Foo{})
   469  
   470  func (Foo) Kind() datamodel.Kind {
   471  	return datamodel.Kind_Int
   472  }
   473  func (Foo) LookupByString(string) (datamodel.Node, error) {
   474  	return mixins.Int{TypeName: "gendemo.Foo"}.LookupByString("")
   475  }
   476  func (Foo) LookupByNode(datamodel.Node) (datamodel.Node, error) {
   477  	return mixins.Int{TypeName: "gendemo.Foo"}.LookupByNode(nil)
   478  }
   479  func (Foo) LookupByIndex(idx int64) (datamodel.Node, error) {
   480  	return mixins.Int{TypeName: "gendemo.Foo"}.LookupByIndex(0)
   481  }
   482  func (Foo) LookupBySegment(seg datamodel.PathSegment) (datamodel.Node, error) {
   483  	return mixins.Int{TypeName: "gendemo.Foo"}.LookupBySegment(seg)
   484  }
   485  func (Foo) MapIterator() datamodel.MapIterator {
   486  	return nil
   487  }
   488  func (Foo) ListIterator() datamodel.ListIterator {
   489  	return nil
   490  }
   491  func (Foo) Length() int64 {
   492  	return -1
   493  }
   494  func (Foo) IsAbsent() bool {
   495  	return false
   496  }
   497  func (Foo) IsNull() bool {
   498  	return false
   499  }
   500  func (Foo) AsBool() (bool, error) {
   501  	return mixins.Int{TypeName: "gendemo.Foo"}.AsBool()
   502  }
   503  func (n Foo) AsInt() (int64, error) {
   504  	return n.x, nil
   505  }
   506  func (Foo) AsFloat() (float64, error) {
   507  	return mixins.Int{TypeName: "gendemo.Foo"}.AsFloat()
   508  }
   509  func (Foo) AsString() (string, error) {
   510  	return mixins.Int{TypeName: "gendemo.Foo"}.AsString()
   511  }
   512  func (Foo) AsBytes() ([]byte, error) {
   513  	return mixins.Int{TypeName: "gendemo.Foo"}.AsBytes()
   514  }
   515  func (Foo) AsLink() (datamodel.Link, error) {
   516  	return mixins.Int{TypeName: "gendemo.Foo"}.AsLink()
   517  }
   518  func (Foo) Prototype() datamodel.NodePrototype {
   519  	return _Foo__Prototype{}
   520  }
   521  
   522  type _Foo__Prototype struct{}
   523  
   524  func (_Foo__Prototype) NewBuilder() datamodel.NodeBuilder {
   525  	var nb _Foo__Builder
   526  	nb.Reset()
   527  	return &nb
   528  }
   529  
   530  type _Foo__Builder struct {
   531  	_Foo__Assembler
   532  }
   533  
   534  func (nb *_Foo__Builder) Build() datamodel.Node {
   535  	if *nb.m != schema.Maybe_Value {
   536  		panic("invalid state: cannot call Build on an assembler that's not finished")
   537  	}
   538  	return nb.w
   539  }
   540  func (nb *_Foo__Builder) Reset() {
   541  	var w _Foo
   542  	var m schema.Maybe
   543  	*nb = _Foo__Builder{_Foo__Assembler{w: &w, m: &m}}
   544  }
   545  
   546  type _Foo__Assembler struct {
   547  	w *_Foo
   548  	m *schema.Maybe
   549  }
   550  
   551  func (na *_Foo__Assembler) reset() {}
   552  func (_Foo__Assembler) BeginMap(sizeHint int64) (datamodel.MapAssembler, error) {
   553  	return mixins.IntAssembler{TypeName: "gendemo.Foo"}.BeginMap(0)
   554  }
   555  func (_Foo__Assembler) BeginList(sizeHint int64) (datamodel.ListAssembler, error) {
   556  	return mixins.IntAssembler{TypeName: "gendemo.Foo"}.BeginList(0)
   557  }
   558  func (na *_Foo__Assembler) AssignNull() error {
   559  	switch *na.m {
   560  	case allowNull:
   561  		*na.m = schema.Maybe_Null
   562  		return nil
   563  	case schema.Maybe_Absent:
   564  		return mixins.IntAssembler{TypeName: "gendemo.Foo"}.AssignNull()
   565  	case schema.Maybe_Value, schema.Maybe_Null:
   566  		panic("invalid state: cannot assign into assembler that's already finished")
   567  	}
   568  	panic("unreachable")
   569  }
   570  func (_Foo__Assembler) AssignBool(bool) error {
   571  	return mixins.IntAssembler{TypeName: "gendemo.Foo"}.AssignBool(false)
   572  }
   573  func (na *_Foo__Assembler) AssignInt(v int64) error {
   574  	switch *na.m {
   575  	case schema.Maybe_Value, schema.Maybe_Null:
   576  		panic("invalid state: cannot assign into assembler that's already finished")
   577  	}
   578  	na.w.x = v
   579  	*na.m = schema.Maybe_Value
   580  	return nil
   581  }
   582  func (_Foo__Assembler) AssignFloat(float64) error {
   583  	return mixins.IntAssembler{TypeName: "gendemo.Foo"}.AssignFloat(0)
   584  }
   585  func (_Foo__Assembler) AssignString(string) error {
   586  	return mixins.IntAssembler{TypeName: "gendemo.Foo"}.AssignString("")
   587  }
   588  func (_Foo__Assembler) AssignBytes([]byte) error {
   589  	return mixins.IntAssembler{TypeName: "gendemo.Foo"}.AssignBytes(nil)
   590  }
   591  func (_Foo__Assembler) AssignLink(datamodel.Link) error {
   592  	return mixins.IntAssembler{TypeName: "gendemo.Foo"}.AssignLink(nil)
   593  }
   594  func (na *_Foo__Assembler) AssignNode(v datamodel.Node) error {
   595  	if v.IsNull() {
   596  		return na.AssignNull()
   597  	}
   598  	if v2, ok := v.(*_Foo); ok {
   599  		switch *na.m {
   600  		case schema.Maybe_Value, schema.Maybe_Null:
   601  			panic("invalid state: cannot assign into assembler that's already finished")
   602  		}
   603  		*na.w = *v2
   604  		*na.m = schema.Maybe_Value
   605  		return nil
   606  	}
   607  	if v2, err := v.AsInt(); err != nil {
   608  		return err
   609  	} else {
   610  		return na.AssignInt(v2)
   611  	}
   612  }
   613  func (_Foo__Assembler) Prototype() datamodel.NodePrototype {
   614  	return _Foo__Prototype{}
   615  }
   616  func (Foo) Type() schema.Type {
   617  	return nil /*TODO:typelit*/
   618  }
   619  func (n Foo) Representation() datamodel.Node {
   620  	return (*_Foo__Repr)(n)
   621  }
   622  
   623  type _Foo__Repr = _Foo
   624  
   625  var _ datamodel.Node = &_Foo__Repr{}
   626  
   627  type _Foo__ReprPrototype = _Foo__Prototype
   628  type _Foo__ReprAssembler = _Foo__Assembler
   629  
   630  func (n Int) Int() int64 {
   631  	return n.x
   632  }
   633  func (_Int__Prototype) FromInt(v int64) (Int, error) {
   634  	n := _Int{v}
   635  	return &n, nil
   636  }
   637  
   638  type _Int__Maybe struct {
   639  	m schema.Maybe
   640  	v _Int
   641  }
   642  type MaybeInt = *_Int__Maybe
   643  
   644  func (m MaybeInt) IsNull() bool {
   645  	return m.m == schema.Maybe_Null
   646  }
   647  func (m MaybeInt) IsAbsent() bool {
   648  	return m.m == schema.Maybe_Absent
   649  }
   650  func (m MaybeInt) Exists() bool {
   651  	return m.m == schema.Maybe_Value
   652  }
   653  func (m MaybeInt) AsNode() datamodel.Node {
   654  	switch m.m {
   655  	case schema.Maybe_Absent:
   656  		return datamodel.Absent
   657  	case schema.Maybe_Null:
   658  		return datamodel.Null
   659  	case schema.Maybe_Value:
   660  		return &m.v
   661  	default:
   662  		panic("unreachable")
   663  	}
   664  }
   665  func (m MaybeInt) Must() Int {
   666  	if !m.Exists() {
   667  		panic("unbox of a maybe rejected")
   668  	}
   669  	return &m.v
   670  }
   671  
   672  var _ datamodel.Node = (Int)(&_Int{})
   673  var _ schema.TypedNode = (Int)(&_Int{})
   674  
   675  func (Int) Kind() datamodel.Kind {
   676  	return datamodel.Kind_Int
   677  }
   678  func (Int) LookupByString(string) (datamodel.Node, error) {
   679  	return mixins.Int{TypeName: "gendemo.Int"}.LookupByString("")
   680  }
   681  func (Int) LookupByNode(datamodel.Node) (datamodel.Node, error) {
   682  	return mixins.Int{TypeName: "gendemo.Int"}.LookupByNode(nil)
   683  }
   684  func (Int) LookupByIndex(idx int64) (datamodel.Node, error) {
   685  	return mixins.Int{TypeName: "gendemo.Int"}.LookupByIndex(0)
   686  }
   687  func (Int) LookupBySegment(seg datamodel.PathSegment) (datamodel.Node, error) {
   688  	return mixins.Int{TypeName: "gendemo.Int"}.LookupBySegment(seg)
   689  }
   690  func (Int) MapIterator() datamodel.MapIterator {
   691  	return nil
   692  }
   693  func (Int) ListIterator() datamodel.ListIterator {
   694  	return nil
   695  }
   696  func (Int) Length() int64 {
   697  	return -1
   698  }
   699  func (Int) IsAbsent() bool {
   700  	return false
   701  }
   702  func (Int) IsNull() bool {
   703  	return false
   704  }
   705  func (Int) AsBool() (bool, error) {
   706  	return mixins.Int{TypeName: "gendemo.Int"}.AsBool()
   707  }
   708  func (n Int) AsInt() (int64, error) {
   709  	return n.x, nil
   710  }
   711  func (Int) AsFloat() (float64, error) {
   712  	return mixins.Int{TypeName: "gendemo.Int"}.AsFloat()
   713  }
   714  func (Int) AsString() (string, error) {
   715  	return mixins.Int{TypeName: "gendemo.Int"}.AsString()
   716  }
   717  func (Int) AsBytes() ([]byte, error) {
   718  	return mixins.Int{TypeName: "gendemo.Int"}.AsBytes()
   719  }
   720  func (Int) AsLink() (datamodel.Link, error) {
   721  	return mixins.Int{TypeName: "gendemo.Int"}.AsLink()
   722  }
   723  func (Int) Prototype() datamodel.NodePrototype {
   724  	return _Int__Prototype{}
   725  }
   726  
   727  type _Int__Prototype struct{}
   728  
   729  func (_Int__Prototype) NewBuilder() datamodel.NodeBuilder {
   730  	var nb _Int__Builder
   731  	nb.Reset()
   732  	return &nb
   733  }
   734  
   735  type _Int__Builder struct {
   736  	_Int__Assembler
   737  }
   738  
   739  func (nb *_Int__Builder) Build() datamodel.Node {
   740  	if *nb.m != schema.Maybe_Value {
   741  		panic("invalid state: cannot call Build on an assembler that's not finished")
   742  	}
   743  	return nb.w
   744  }
   745  func (nb *_Int__Builder) Reset() {
   746  	var w _Int
   747  	var m schema.Maybe
   748  	*nb = _Int__Builder{_Int__Assembler{w: &w, m: &m}}
   749  }
   750  
   751  type _Int__Assembler struct {
   752  	w *_Int
   753  	m *schema.Maybe
   754  }
   755  
   756  func (na *_Int__Assembler) reset() {}
   757  func (_Int__Assembler) BeginMap(sizeHint int64) (datamodel.MapAssembler, error) {
   758  	return mixins.IntAssembler{TypeName: "gendemo.Int"}.BeginMap(0)
   759  }
   760  func (_Int__Assembler) BeginList(sizeHint int64) (datamodel.ListAssembler, error) {
   761  	return mixins.IntAssembler{TypeName: "gendemo.Int"}.BeginList(0)
   762  }
   763  func (na *_Int__Assembler) AssignNull() error {
   764  	switch *na.m {
   765  	case allowNull:
   766  		*na.m = schema.Maybe_Null
   767  		return nil
   768  	case schema.Maybe_Absent:
   769  		return mixins.IntAssembler{TypeName: "gendemo.Int"}.AssignNull()
   770  	case schema.Maybe_Value, schema.Maybe_Null:
   771  		panic("invalid state: cannot assign into assembler that's already finished")
   772  	}
   773  	panic("unreachable")
   774  }
   775  func (_Int__Assembler) AssignBool(bool) error {
   776  	return mixins.IntAssembler{TypeName: "gendemo.Int"}.AssignBool(false)
   777  }
   778  func (na *_Int__Assembler) AssignInt(v int64) error {
   779  	switch *na.m {
   780  	case schema.Maybe_Value, schema.Maybe_Null:
   781  		panic("invalid state: cannot assign into assembler that's already finished")
   782  	}
   783  	na.w.x = v
   784  	*na.m = schema.Maybe_Value
   785  	return nil
   786  }
   787  func (_Int__Assembler) AssignFloat(float64) error {
   788  	return mixins.IntAssembler{TypeName: "gendemo.Int"}.AssignFloat(0)
   789  }
   790  func (_Int__Assembler) AssignString(string) error {
   791  	return mixins.IntAssembler{TypeName: "gendemo.Int"}.AssignString("")
   792  }
   793  func (_Int__Assembler) AssignBytes([]byte) error {
   794  	return mixins.IntAssembler{TypeName: "gendemo.Int"}.AssignBytes(nil)
   795  }
   796  func (_Int__Assembler) AssignLink(datamodel.Link) error {
   797  	return mixins.IntAssembler{TypeName: "gendemo.Int"}.AssignLink(nil)
   798  }
   799  func (na *_Int__Assembler) AssignNode(v datamodel.Node) error {
   800  	if v.IsNull() {
   801  		return na.AssignNull()
   802  	}
   803  	if v2, ok := v.(*_Int); ok {
   804  		switch *na.m {
   805  		case schema.Maybe_Value, schema.Maybe_Null:
   806  			panic("invalid state: cannot assign into assembler that's already finished")
   807  		}
   808  		*na.w = *v2
   809  		*na.m = schema.Maybe_Value
   810  		return nil
   811  	}
   812  	if v2, err := v.AsInt(); err != nil {
   813  		return err
   814  	} else {
   815  		return na.AssignInt(v2)
   816  	}
   817  }
   818  func (_Int__Assembler) Prototype() datamodel.NodePrototype {
   819  	return _Int__Prototype{}
   820  }
   821  func (Int) Type() schema.Type {
   822  	return nil /*TODO:typelit*/
   823  }
   824  func (n Int) Representation() datamodel.Node {
   825  	return (*_Int__Repr)(n)
   826  }
   827  
   828  type _Int__Repr = _Int
   829  
   830  var _ datamodel.Node = &_Int__Repr{}
   831  
   832  type _Int__ReprPrototype = _Int__Prototype
   833  type _Int__ReprAssembler = _Int__Assembler
   834  
   835  func (n *_Map__String__Msg3) Lookup(k String) Msg3 {
   836  	v, exists := n.m[*k]
   837  	if !exists {
   838  		return nil
   839  	}
   840  	return v
   841  }
   842  func (n *_Map__String__Msg3) LookupMaybe(k String) MaybeMsg3 {
   843  	v, exists := n.m[*k]
   844  	if !exists {
   845  		return &_Map__String__Msg3__valueAbsent
   846  	}
   847  	return &_Msg3__Maybe{
   848  		m: schema.Maybe_Value,
   849  		v: v,
   850  	}
   851  }
   852  
   853  var _Map__String__Msg3__valueAbsent = _Msg3__Maybe{m: schema.Maybe_Absent}
   854  
   855  func (n Map__String__Msg3) Iterator() *Map__String__Msg3__Itr {
   856  	return &Map__String__Msg3__Itr{n, 0}
   857  }
   858  
   859  type Map__String__Msg3__Itr struct {
   860  	n   Map__String__Msg3
   861  	idx int
   862  }
   863  
   864  func (itr *Map__String__Msg3__Itr) Next() (k String, v Msg3) {
   865  	if itr.idx >= len(itr.n.t) {
   866  		return nil, nil
   867  	}
   868  	x := &itr.n.t[itr.idx]
   869  	k = &x.k
   870  	v = &x.v
   871  	itr.idx++
   872  	return
   873  }
   874  func (itr *Map__String__Msg3__Itr) Done() bool {
   875  	return itr.idx >= len(itr.n.t)
   876  }
   877  
   878  type _Map__String__Msg3__Maybe struct {
   879  	m schema.Maybe
   880  	v _Map__String__Msg3
   881  }
   882  type MaybeMap__String__Msg3 = *_Map__String__Msg3__Maybe
   883  
   884  func (m MaybeMap__String__Msg3) IsNull() bool {
   885  	return m.m == schema.Maybe_Null
   886  }
   887  func (m MaybeMap__String__Msg3) IsAbsent() bool {
   888  	return m.m == schema.Maybe_Absent
   889  }
   890  func (m MaybeMap__String__Msg3) Exists() bool {
   891  	return m.m == schema.Maybe_Value
   892  }
   893  func (m MaybeMap__String__Msg3) AsNode() datamodel.Node {
   894  	switch m.m {
   895  	case schema.Maybe_Absent:
   896  		return datamodel.Absent
   897  	case schema.Maybe_Null:
   898  		return datamodel.Null
   899  	case schema.Maybe_Value:
   900  		return &m.v
   901  	default:
   902  		panic("unreachable")
   903  	}
   904  }
   905  func (m MaybeMap__String__Msg3) Must() Map__String__Msg3 {
   906  	if !m.Exists() {
   907  		panic("unbox of a maybe rejected")
   908  	}
   909  	return &m.v
   910  }
   911  
   912  var _ datamodel.Node = (Map__String__Msg3)(&_Map__String__Msg3{})
   913  var _ schema.TypedNode = (Map__String__Msg3)(&_Map__String__Msg3{})
   914  
   915  func (Map__String__Msg3) Kind() datamodel.Kind {
   916  	return datamodel.Kind_Map
   917  }
   918  func (n Map__String__Msg3) LookupByString(k string) (datamodel.Node, error) {
   919  	var k2 _String
   920  	if err := (_String__ReprPrototype{}).fromString(&k2, k); err != nil {
   921  		return nil, err // TODO wrap in some kind of ErrInvalidKey
   922  	}
   923  	v, exists := n.m[k2]
   924  	if !exists {
   925  		return nil, datamodel.ErrNotExists{Segment: datamodel.PathSegmentOfString(k)}
   926  	}
   927  	return v, nil
   928  }
   929  func (n Map__String__Msg3) LookupByNode(k datamodel.Node) (datamodel.Node, error) {
   930  	k2, ok := k.(String)
   931  	if !ok {
   932  		panic("todo invalid key type error")
   933  		// 'schema.ErrInvalidKey{TypeName:"gendemo.Map__String__Msg3", Key:&_String{k}}' doesn't quite cut it: need room to explain the type, and it's not guaranteed k can be turned into a string at all
   934  	}
   935  	v, exists := n.m[*k2]
   936  	if !exists {
   937  		return nil, datamodel.ErrNotExists{Segment: datamodel.PathSegmentOfString(k2.String())}
   938  	}
   939  	return v, nil
   940  }
   941  func (Map__String__Msg3) LookupByIndex(idx int64) (datamodel.Node, error) {
   942  	return mixins.Map{TypeName: "gendemo.Map__String__Msg3"}.LookupByIndex(0)
   943  }
   944  func (n Map__String__Msg3) LookupBySegment(seg datamodel.PathSegment) (datamodel.Node, error) {
   945  	return n.LookupByString(seg.String())
   946  }
   947  func (n Map__String__Msg3) MapIterator() datamodel.MapIterator {
   948  	return &_Map__String__Msg3__MapItr{n, 0}
   949  }
   950  
   951  type _Map__String__Msg3__MapItr struct {
   952  	n   Map__String__Msg3
   953  	idx int
   954  }
   955  
   956  func (itr *_Map__String__Msg3__MapItr) Next() (k datamodel.Node, v datamodel.Node, _ error) {
   957  	if itr.idx >= len(itr.n.t) {
   958  		return nil, nil, datamodel.ErrIteratorOverread{}
   959  	}
   960  	x := &itr.n.t[itr.idx]
   961  	k = &x.k
   962  	v = &x.v
   963  	itr.idx++
   964  	return
   965  }
   966  func (itr *_Map__String__Msg3__MapItr) Done() bool {
   967  	return itr.idx >= len(itr.n.t)
   968  }
   969  
   970  func (Map__String__Msg3) ListIterator() datamodel.ListIterator {
   971  	return nil
   972  }
   973  func (n Map__String__Msg3) Length() int64 {
   974  	return int64(len(n.t))
   975  }
   976  func (Map__String__Msg3) IsAbsent() bool {
   977  	return false
   978  }
   979  func (Map__String__Msg3) IsNull() bool {
   980  	return false
   981  }
   982  func (Map__String__Msg3) AsBool() (bool, error) {
   983  	return mixins.Map{TypeName: "gendemo.Map__String__Msg3"}.AsBool()
   984  }
   985  func (Map__String__Msg3) AsInt() (int64, error) {
   986  	return mixins.Map{TypeName: "gendemo.Map__String__Msg3"}.AsInt()
   987  }
   988  func (Map__String__Msg3) AsFloat() (float64, error) {
   989  	return mixins.Map{TypeName: "gendemo.Map__String__Msg3"}.AsFloat()
   990  }
   991  func (Map__String__Msg3) AsString() (string, error) {
   992  	return mixins.Map{TypeName: "gendemo.Map__String__Msg3"}.AsString()
   993  }
   994  func (Map__String__Msg3) AsBytes() ([]byte, error) {
   995  	return mixins.Map{TypeName: "gendemo.Map__String__Msg3"}.AsBytes()
   996  }
   997  func (Map__String__Msg3) AsLink() (datamodel.Link, error) {
   998  	return mixins.Map{TypeName: "gendemo.Map__String__Msg3"}.AsLink()
   999  }
  1000  func (Map__String__Msg3) Prototype() datamodel.NodePrototype {
  1001  	return _Map__String__Msg3__Prototype{}
  1002  }
  1003  
  1004  type _Map__String__Msg3__Prototype struct{}
  1005  
  1006  func (_Map__String__Msg3__Prototype) NewBuilder() datamodel.NodeBuilder {
  1007  	var nb _Map__String__Msg3__Builder
  1008  	nb.Reset()
  1009  	return &nb
  1010  }
  1011  
  1012  type _Map__String__Msg3__Builder struct {
  1013  	_Map__String__Msg3__Assembler
  1014  }
  1015  
  1016  func (nb *_Map__String__Msg3__Builder) Build() datamodel.Node {
  1017  	if *nb.m != schema.Maybe_Value {
  1018  		panic("invalid state: cannot call Build on an assembler that's not finished")
  1019  	}
  1020  	return nb.w
  1021  }
  1022  func (nb *_Map__String__Msg3__Builder) Reset() {
  1023  	var w _Map__String__Msg3
  1024  	var m schema.Maybe
  1025  	*nb = _Map__String__Msg3__Builder{_Map__String__Msg3__Assembler{w: &w, m: &m}}
  1026  }
  1027  
  1028  type _Map__String__Msg3__Assembler struct {
  1029  	w     *_Map__String__Msg3
  1030  	m     *schema.Maybe
  1031  	state maState
  1032  
  1033  	cm schema.Maybe
  1034  	ka _String__Assembler
  1035  	va _Msg3__Assembler
  1036  }
  1037  
  1038  func (na *_Map__String__Msg3__Assembler) reset() {
  1039  	na.state = maState_initial
  1040  	na.ka.reset()
  1041  	na.va.reset()
  1042  }
  1043  func (na *_Map__String__Msg3__Assembler) BeginMap(sizeHint int64) (datamodel.MapAssembler, error) {
  1044  	switch *na.m {
  1045  	case schema.Maybe_Value, schema.Maybe_Null:
  1046  		panic("invalid state: cannot assign into assembler that's already finished")
  1047  	case midvalue:
  1048  		panic("invalid state: it makes no sense to 'begin' twice on the same assembler!")
  1049  	}
  1050  	*na.m = midvalue
  1051  	if sizeHint < 0 {
  1052  		sizeHint = 0
  1053  	}
  1054  	na.w.m = make(map[_String]*_Msg3, sizeHint)
  1055  	na.w.t = make([]_Map__String__Msg3__entry, 0, sizeHint)
  1056  	return na, nil
  1057  }
  1058  func (_Map__String__Msg3__Assembler) BeginList(sizeHint int64) (datamodel.ListAssembler, error) {
  1059  	return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.BeginList(0)
  1060  }
  1061  func (na *_Map__String__Msg3__Assembler) AssignNull() error {
  1062  	switch *na.m {
  1063  	case allowNull:
  1064  		*na.m = schema.Maybe_Null
  1065  		return nil
  1066  	case schema.Maybe_Absent:
  1067  		return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.AssignNull()
  1068  	case schema.Maybe_Value, schema.Maybe_Null:
  1069  		panic("invalid state: cannot assign into assembler that's already finished")
  1070  	case midvalue:
  1071  		panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!")
  1072  	}
  1073  	panic("unreachable")
  1074  }
  1075  func (_Map__String__Msg3__Assembler) AssignBool(bool) error {
  1076  	return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.AssignBool(false)
  1077  }
  1078  func (_Map__String__Msg3__Assembler) AssignInt(int64) error {
  1079  	return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.AssignInt(0)
  1080  }
  1081  func (_Map__String__Msg3__Assembler) AssignFloat(float64) error {
  1082  	return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.AssignFloat(0)
  1083  }
  1084  func (_Map__String__Msg3__Assembler) AssignString(string) error {
  1085  	return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.AssignString("")
  1086  }
  1087  func (_Map__String__Msg3__Assembler) AssignBytes([]byte) error {
  1088  	return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.AssignBytes(nil)
  1089  }
  1090  func (_Map__String__Msg3__Assembler) AssignLink(datamodel.Link) error {
  1091  	return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.AssignLink(nil)
  1092  }
  1093  func (na *_Map__String__Msg3__Assembler) AssignNode(v datamodel.Node) error {
  1094  	if v.IsNull() {
  1095  		return na.AssignNull()
  1096  	}
  1097  	if v2, ok := v.(*_Map__String__Msg3); ok {
  1098  		switch *na.m {
  1099  		case schema.Maybe_Value, schema.Maybe_Null:
  1100  			panic("invalid state: cannot assign into assembler that's already finished")
  1101  		case midvalue:
  1102  			panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!")
  1103  		}
  1104  		*na.w = *v2
  1105  		*na.m = schema.Maybe_Value
  1106  		return nil
  1107  	}
  1108  	if v.Kind() != datamodel.Kind_Map {
  1109  		return datamodel.ErrWrongKind{TypeName: "gendemo.Map__String__Msg3", MethodName: "AssignNode", AppropriateKind: datamodel.KindSet_JustMap, ActualKind: v.Kind()}
  1110  	}
  1111  	itr := v.MapIterator()
  1112  	for !itr.Done() {
  1113  		k, v, err := itr.Next()
  1114  		if err != nil {
  1115  			return err
  1116  		}
  1117  		if err := na.AssembleKey().AssignNode(k); err != nil {
  1118  			return err
  1119  		}
  1120  		if err := na.AssembleValue().AssignNode(v); err != nil {
  1121  			return err
  1122  		}
  1123  	}
  1124  	return na.Finish()
  1125  }
  1126  func (_Map__String__Msg3__Assembler) Prototype() datamodel.NodePrototype {
  1127  	return _Map__String__Msg3__Prototype{}
  1128  }
  1129  func (ma *_Map__String__Msg3__Assembler) keyFinishTidy() bool {
  1130  	switch ma.cm {
  1131  	case schema.Maybe_Value:
  1132  		ma.ka.w = nil
  1133  		tz := &ma.w.t[len(ma.w.t)-1]
  1134  		ma.cm = schema.Maybe_Absent
  1135  		ma.state = maState_expectValue
  1136  		ma.w.m[tz.k] = &tz.v
  1137  		ma.va.w = &tz.v
  1138  		ma.va.m = &ma.cm
  1139  		ma.ka.reset()
  1140  		return true
  1141  	default:
  1142  		return false
  1143  	}
  1144  }
  1145  func (ma *_Map__String__Msg3__Assembler) valueFinishTidy() bool {
  1146  	switch ma.cm {
  1147  	case schema.Maybe_Value:
  1148  		ma.va.w = nil
  1149  		ma.cm = schema.Maybe_Absent
  1150  		ma.state = maState_initial
  1151  		ma.va.reset()
  1152  		return true
  1153  	default:
  1154  		return false
  1155  	}
  1156  }
  1157  func (ma *_Map__String__Msg3__Assembler) AssembleEntry(k string) (datamodel.NodeAssembler, error) {
  1158  	switch ma.state {
  1159  	case maState_initial:
  1160  		// carry on
  1161  	case maState_midKey:
  1162  		panic("invalid state: AssembleEntry cannot be called when in the middle of assembling another key")
  1163  	case maState_expectValue:
  1164  		panic("invalid state: AssembleEntry cannot be called when expecting start of value assembly")
  1165  	case maState_midValue:
  1166  		if !ma.valueFinishTidy() {
  1167  			panic("invalid state: AssembleEntry cannot be called when in the middle of assembling a value")
  1168  		} // if tidy success: carry on
  1169  	case maState_finished:
  1170  		panic("invalid state: AssembleEntry cannot be called on an assembler that's already finished")
  1171  	}
  1172  
  1173  	var k2 _String
  1174  	if err := (_String__ReprPrototype{}).fromString(&k2, k); err != nil {
  1175  		return nil, err // TODO wrap in some kind of ErrInvalidKey
  1176  	}
  1177  	if _, exists := ma.w.m[k2]; exists {
  1178  		return nil, datamodel.ErrRepeatedMapKey{Key: &k2}
  1179  	}
  1180  	ma.w.t = append(ma.w.t, _Map__String__Msg3__entry{k: k2})
  1181  	tz := &ma.w.t[len(ma.w.t)-1]
  1182  	ma.state = maState_midValue
  1183  
  1184  	ma.w.m[k2] = &tz.v
  1185  	ma.va.w = &tz.v
  1186  	ma.va.m = &ma.cm
  1187  	return &ma.va, nil
  1188  }
  1189  func (ma *_Map__String__Msg3__Assembler) AssembleKey() datamodel.NodeAssembler {
  1190  	switch ma.state {
  1191  	case maState_initial:
  1192  		// carry on
  1193  	case maState_midKey:
  1194  		panic("invalid state: AssembleKey cannot be called when in the middle of assembling another key")
  1195  	case maState_expectValue:
  1196  		panic("invalid state: AssembleKey cannot be called when expecting start of value assembly")
  1197  	case maState_midValue:
  1198  		if !ma.valueFinishTidy() {
  1199  			panic("invalid state: AssembleKey cannot be called when in the middle of assembling a value")
  1200  		} // if tidy success: carry on
  1201  	case maState_finished:
  1202  		panic("invalid state: AssembleKey cannot be called on an assembler that's already finished")
  1203  	}
  1204  	ma.w.t = append(ma.w.t, _Map__String__Msg3__entry{})
  1205  	ma.state = maState_midKey
  1206  	ma.ka.m = &ma.cm
  1207  	ma.ka.w = &ma.w.t[len(ma.w.t)-1].k
  1208  	return &ma.ka
  1209  }
  1210  func (ma *_Map__String__Msg3__Assembler) AssembleValue() datamodel.NodeAssembler {
  1211  	switch ma.state {
  1212  	case maState_initial:
  1213  		panic("invalid state: AssembleValue cannot be called when no key is primed")
  1214  	case maState_midKey:
  1215  		if !ma.keyFinishTidy() {
  1216  			panic("invalid state: AssembleValue cannot be called when in the middle of assembling a key")
  1217  		} // if tidy success: carry on
  1218  	case maState_expectValue:
  1219  		// carry on
  1220  	case maState_midValue:
  1221  		panic("invalid state: AssembleValue cannot be called when in the middle of assembling another value")
  1222  	case maState_finished:
  1223  		panic("invalid state: AssembleValue cannot be called on an assembler that's already finished")
  1224  	}
  1225  	ma.state = maState_midValue
  1226  	return &ma.va
  1227  }
  1228  func (ma *_Map__String__Msg3__Assembler) Finish() error {
  1229  	switch ma.state {
  1230  	case maState_initial:
  1231  		// carry on
  1232  	case maState_midKey:
  1233  		panic("invalid state: Finish cannot be called when in the middle of assembling a key")
  1234  	case maState_expectValue:
  1235  		panic("invalid state: Finish cannot be called when expecting start of value assembly")
  1236  	case maState_midValue:
  1237  		if !ma.valueFinishTidy() {
  1238  			panic("invalid state: Finish cannot be called when in the middle of assembling a value")
  1239  		} // if tidy success: carry on
  1240  	case maState_finished:
  1241  		panic("invalid state: Finish cannot be called on an assembler that's already finished")
  1242  	}
  1243  	ma.state = maState_finished
  1244  	*ma.m = schema.Maybe_Value
  1245  	return nil
  1246  }
  1247  func (ma *_Map__String__Msg3__Assembler) KeyPrototype() datamodel.NodePrototype {
  1248  	return _String__Prototype{}
  1249  }
  1250  func (ma *_Map__String__Msg3__Assembler) ValuePrototype(_ string) datamodel.NodePrototype {
  1251  	return _Msg3__Prototype{}
  1252  }
  1253  func (Map__String__Msg3) Type() schema.Type {
  1254  	return nil /*TODO:typelit*/
  1255  }
  1256  func (n Map__String__Msg3) Representation() datamodel.Node {
  1257  	return (*_Map__String__Msg3__Repr)(n)
  1258  }
  1259  
  1260  type _Map__String__Msg3__Repr _Map__String__Msg3
  1261  
  1262  var _ datamodel.Node = &_Map__String__Msg3__Repr{}
  1263  
  1264  func (_Map__String__Msg3__Repr) Kind() datamodel.Kind {
  1265  	return datamodel.Kind_Map
  1266  }
  1267  func (nr *_Map__String__Msg3__Repr) LookupByString(k string) (datamodel.Node, error) {
  1268  	v, err := (Map__String__Msg3)(nr).LookupByString(k)
  1269  	if err != nil || v == datamodel.Null {
  1270  		return v, err
  1271  	}
  1272  	return v.(Msg3).Representation(), nil
  1273  }
  1274  func (nr *_Map__String__Msg3__Repr) LookupByNode(k datamodel.Node) (datamodel.Node, error) {
  1275  	v, err := (Map__String__Msg3)(nr).LookupByNode(k)
  1276  	if err != nil || v == datamodel.Null {
  1277  		return v, err
  1278  	}
  1279  	return v.(Msg3).Representation(), nil
  1280  }
  1281  func (_Map__String__Msg3__Repr) LookupByIndex(idx int64) (datamodel.Node, error) {
  1282  	return mixins.Map{TypeName: "gendemo.Map__String__Msg3.Repr"}.LookupByIndex(0)
  1283  }
  1284  func (n _Map__String__Msg3__Repr) LookupBySegment(seg datamodel.PathSegment) (datamodel.Node, error) {
  1285  	return n.LookupByString(seg.String())
  1286  }
  1287  func (nr *_Map__String__Msg3__Repr) MapIterator() datamodel.MapIterator {
  1288  	return &_Map__String__Msg3__ReprMapItr{(Map__String__Msg3)(nr), 0}
  1289  }
  1290  
  1291  type _Map__String__Msg3__ReprMapItr _Map__String__Msg3__MapItr
  1292  
  1293  func (itr *_Map__String__Msg3__ReprMapItr) Next() (k datamodel.Node, v datamodel.Node, err error) {
  1294  	k, v, err = (*_Map__String__Msg3__MapItr)(itr).Next()
  1295  	if err != nil || v == datamodel.Null {
  1296  		return
  1297  	}
  1298  	return k, v.(Msg3).Representation(), nil
  1299  }
  1300  func (itr *_Map__String__Msg3__ReprMapItr) Done() bool {
  1301  	return (*_Map__String__Msg3__MapItr)(itr).Done()
  1302  }
  1303  
  1304  func (_Map__String__Msg3__Repr) ListIterator() datamodel.ListIterator {
  1305  	return nil
  1306  }
  1307  func (rn *_Map__String__Msg3__Repr) Length() int64 {
  1308  	return int64(len(rn.t))
  1309  }
  1310  func (_Map__String__Msg3__Repr) IsAbsent() bool {
  1311  	return false
  1312  }
  1313  func (_Map__String__Msg3__Repr) IsNull() bool {
  1314  	return false
  1315  }
  1316  func (_Map__String__Msg3__Repr) AsBool() (bool, error) {
  1317  	return mixins.Map{TypeName: "gendemo.Map__String__Msg3.Repr"}.AsBool()
  1318  }
  1319  func (_Map__String__Msg3__Repr) AsInt() (int64, error) {
  1320  	return mixins.Map{TypeName: "gendemo.Map__String__Msg3.Repr"}.AsInt()
  1321  }
  1322  func (_Map__String__Msg3__Repr) AsFloat() (float64, error) {
  1323  	return mixins.Map{TypeName: "gendemo.Map__String__Msg3.Repr"}.AsFloat()
  1324  }
  1325  func (_Map__String__Msg3__Repr) AsString() (string, error) {
  1326  	return mixins.Map{TypeName: "gendemo.Map__String__Msg3.Repr"}.AsString()
  1327  }
  1328  func (_Map__String__Msg3__Repr) AsBytes() ([]byte, error) {
  1329  	return mixins.Map{TypeName: "gendemo.Map__String__Msg3.Repr"}.AsBytes()
  1330  }
  1331  func (_Map__String__Msg3__Repr) AsLink() (datamodel.Link, error) {
  1332  	return mixins.Map{TypeName: "gendemo.Map__String__Msg3.Repr"}.AsLink()
  1333  }
  1334  func (_Map__String__Msg3__Repr) Prototype() datamodel.NodePrototype {
  1335  	return _Map__String__Msg3__ReprPrototype{}
  1336  }
  1337  
  1338  type _Map__String__Msg3__ReprPrototype struct{}
  1339  
  1340  func (_Map__String__Msg3__ReprPrototype) NewBuilder() datamodel.NodeBuilder {
  1341  	var nb _Map__String__Msg3__ReprBuilder
  1342  	nb.Reset()
  1343  	return &nb
  1344  }
  1345  
  1346  type _Map__String__Msg3__ReprBuilder struct {
  1347  	_Map__String__Msg3__ReprAssembler
  1348  }
  1349  
  1350  func (nb *_Map__String__Msg3__ReprBuilder) Build() datamodel.Node {
  1351  	if *nb.m != schema.Maybe_Value {
  1352  		panic("invalid state: cannot call Build on an assembler that's not finished")
  1353  	}
  1354  	return nb.w
  1355  }
  1356  func (nb *_Map__String__Msg3__ReprBuilder) Reset() {
  1357  	var w _Map__String__Msg3
  1358  	var m schema.Maybe
  1359  	*nb = _Map__String__Msg3__ReprBuilder{_Map__String__Msg3__ReprAssembler{w: &w, m: &m}}
  1360  }
  1361  
  1362  type _Map__String__Msg3__ReprAssembler struct {
  1363  	w     *_Map__String__Msg3
  1364  	m     *schema.Maybe
  1365  	state maState
  1366  
  1367  	cm schema.Maybe
  1368  	ka _String__ReprAssembler
  1369  	va _Msg3__ReprAssembler
  1370  }
  1371  
  1372  func (na *_Map__String__Msg3__ReprAssembler) reset() {
  1373  	na.state = maState_initial
  1374  	na.ka.reset()
  1375  	na.va.reset()
  1376  }
  1377  func (na *_Map__String__Msg3__ReprAssembler) BeginMap(sizeHint int64) (datamodel.MapAssembler, error) {
  1378  	switch *na.m {
  1379  	case schema.Maybe_Value, schema.Maybe_Null:
  1380  		panic("invalid state: cannot assign into assembler that's already finished")
  1381  	case midvalue:
  1382  		panic("invalid state: it makes no sense to 'begin' twice on the same assembler!")
  1383  	}
  1384  	*na.m = midvalue
  1385  	if sizeHint < 0 {
  1386  		sizeHint = 0
  1387  	}
  1388  	na.w.m = make(map[_String]*_Msg3, sizeHint)
  1389  	na.w.t = make([]_Map__String__Msg3__entry, 0, sizeHint)
  1390  	return na, nil
  1391  }
  1392  func (_Map__String__Msg3__ReprAssembler) BeginList(sizeHint int64) (datamodel.ListAssembler, error) {
  1393  	return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr"}.BeginList(0)
  1394  }
  1395  func (na *_Map__String__Msg3__ReprAssembler) AssignNull() error {
  1396  	switch *na.m {
  1397  	case allowNull:
  1398  		*na.m = schema.Maybe_Null
  1399  		return nil
  1400  	case schema.Maybe_Absent:
  1401  		return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr.Repr"}.AssignNull()
  1402  	case schema.Maybe_Value, schema.Maybe_Null:
  1403  		panic("invalid state: cannot assign into assembler that's already finished")
  1404  	case midvalue:
  1405  		panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!")
  1406  	}
  1407  	panic("unreachable")
  1408  }
  1409  func (_Map__String__Msg3__ReprAssembler) AssignBool(bool) error {
  1410  	return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr"}.AssignBool(false)
  1411  }
  1412  func (_Map__String__Msg3__ReprAssembler) AssignInt(int64) error {
  1413  	return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr"}.AssignInt(0)
  1414  }
  1415  func (_Map__String__Msg3__ReprAssembler) AssignFloat(float64) error {
  1416  	return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr"}.AssignFloat(0)
  1417  }
  1418  func (_Map__String__Msg3__ReprAssembler) AssignString(string) error {
  1419  	return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr"}.AssignString("")
  1420  }
  1421  func (_Map__String__Msg3__ReprAssembler) AssignBytes([]byte) error {
  1422  	return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr"}.AssignBytes(nil)
  1423  }
  1424  func (_Map__String__Msg3__ReprAssembler) AssignLink(datamodel.Link) error {
  1425  	return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr"}.AssignLink(nil)
  1426  }
  1427  func (na *_Map__String__Msg3__ReprAssembler) AssignNode(v datamodel.Node) error {
  1428  	if v.IsNull() {
  1429  		return na.AssignNull()
  1430  	}
  1431  	if v2, ok := v.(*_Map__String__Msg3); ok {
  1432  		switch *na.m {
  1433  		case schema.Maybe_Value, schema.Maybe_Null:
  1434  			panic("invalid state: cannot assign into assembler that's already finished")
  1435  		case midvalue:
  1436  			panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!")
  1437  		}
  1438  		*na.w = *v2
  1439  		*na.m = schema.Maybe_Value
  1440  		return nil
  1441  	}
  1442  	if v.Kind() != datamodel.Kind_Map {
  1443  		return datamodel.ErrWrongKind{TypeName: "gendemo.Map__String__Msg3.Repr", MethodName: "AssignNode", AppropriateKind: datamodel.KindSet_JustMap, ActualKind: v.Kind()}
  1444  	}
  1445  	itr := v.MapIterator()
  1446  	for !itr.Done() {
  1447  		k, v, err := itr.Next()
  1448  		if err != nil {
  1449  			return err
  1450  		}
  1451  		if err := na.AssembleKey().AssignNode(k); err != nil {
  1452  			return err
  1453  		}
  1454  		if err := na.AssembleValue().AssignNode(v); err != nil {
  1455  			return err
  1456  		}
  1457  	}
  1458  	return na.Finish()
  1459  }
  1460  func (_Map__String__Msg3__ReprAssembler) Prototype() datamodel.NodePrototype {
  1461  	return _Map__String__Msg3__ReprPrototype{}
  1462  }
  1463  func (ma *_Map__String__Msg3__ReprAssembler) keyFinishTidy() bool {
  1464  	switch ma.cm {
  1465  	case schema.Maybe_Value:
  1466  		ma.ka.w = nil
  1467  		tz := &ma.w.t[len(ma.w.t)-1]
  1468  		ma.cm = schema.Maybe_Absent
  1469  		ma.state = maState_expectValue
  1470  		ma.w.m[tz.k] = &tz.v
  1471  		ma.va.w = &tz.v
  1472  		ma.va.m = &ma.cm
  1473  		ma.ka.reset()
  1474  		return true
  1475  	default:
  1476  		return false
  1477  	}
  1478  }
  1479  func (ma *_Map__String__Msg3__ReprAssembler) valueFinishTidy() bool {
  1480  	switch ma.cm {
  1481  	case schema.Maybe_Value:
  1482  		ma.va.w = nil
  1483  		ma.cm = schema.Maybe_Absent
  1484  		ma.state = maState_initial
  1485  		ma.va.reset()
  1486  		return true
  1487  	default:
  1488  		return false
  1489  	}
  1490  }
  1491  func (ma *_Map__String__Msg3__ReprAssembler) AssembleEntry(k string) (datamodel.NodeAssembler, error) {
  1492  	switch ma.state {
  1493  	case maState_initial:
  1494  		// carry on
  1495  	case maState_midKey:
  1496  		panic("invalid state: AssembleEntry cannot be called when in the middle of assembling another key")
  1497  	case maState_expectValue:
  1498  		panic("invalid state: AssembleEntry cannot be called when expecting start of value assembly")
  1499  	case maState_midValue:
  1500  		if !ma.valueFinishTidy() {
  1501  			panic("invalid state: AssembleEntry cannot be called when in the middle of assembling a value")
  1502  		} // if tidy success: carry on
  1503  	case maState_finished:
  1504  		panic("invalid state: AssembleEntry cannot be called on an assembler that's already finished")
  1505  	}
  1506  
  1507  	var k2 _String
  1508  	if err := (_String__ReprPrototype{}).fromString(&k2, k); err != nil {
  1509  		return nil, err // TODO wrap in some kind of ErrInvalidKey
  1510  	}
  1511  	if _, exists := ma.w.m[k2]; exists {
  1512  		return nil, datamodel.ErrRepeatedMapKey{Key: &k2}
  1513  	}
  1514  	ma.w.t = append(ma.w.t, _Map__String__Msg3__entry{k: k2})
  1515  	tz := &ma.w.t[len(ma.w.t)-1]
  1516  	ma.state = maState_midValue
  1517  
  1518  	ma.w.m[k2] = &tz.v
  1519  	ma.va.w = &tz.v
  1520  	ma.va.m = &ma.cm
  1521  	return &ma.va, nil
  1522  }
  1523  func (ma *_Map__String__Msg3__ReprAssembler) AssembleKey() datamodel.NodeAssembler {
  1524  	switch ma.state {
  1525  	case maState_initial:
  1526  		// carry on
  1527  	case maState_midKey:
  1528  		panic("invalid state: AssembleKey cannot be called when in the middle of assembling another key")
  1529  	case maState_expectValue:
  1530  		panic("invalid state: AssembleKey cannot be called when expecting start of value assembly")
  1531  	case maState_midValue:
  1532  		if !ma.valueFinishTidy() {
  1533  			panic("invalid state: AssembleKey cannot be called when in the middle of assembling a value")
  1534  		} // if tidy success: carry on
  1535  	case maState_finished:
  1536  		panic("invalid state: AssembleKey cannot be called on an assembler that's already finished")
  1537  	}
  1538  	ma.w.t = append(ma.w.t, _Map__String__Msg3__entry{})
  1539  	ma.state = maState_midKey
  1540  	ma.ka.m = &ma.cm
  1541  	ma.ka.w = &ma.w.t[len(ma.w.t)-1].k
  1542  	return &ma.ka
  1543  }
  1544  func (ma *_Map__String__Msg3__ReprAssembler) AssembleValue() datamodel.NodeAssembler {
  1545  	switch ma.state {
  1546  	case maState_initial:
  1547  		panic("invalid state: AssembleValue cannot be called when no key is primed")
  1548  	case maState_midKey:
  1549  		if !ma.keyFinishTidy() {
  1550  			panic("invalid state: AssembleValue cannot be called when in the middle of assembling a key")
  1551  		} // if tidy success: carry on
  1552  	case maState_expectValue:
  1553  		// carry on
  1554  	case maState_midValue:
  1555  		panic("invalid state: AssembleValue cannot be called when in the middle of assembling another value")
  1556  	case maState_finished:
  1557  		panic("invalid state: AssembleValue cannot be called on an assembler that's already finished")
  1558  	}
  1559  	ma.state = maState_midValue
  1560  	return &ma.va
  1561  }
  1562  func (ma *_Map__String__Msg3__ReprAssembler) Finish() error {
  1563  	switch ma.state {
  1564  	case maState_initial:
  1565  		// carry on
  1566  	case maState_midKey:
  1567  		panic("invalid state: Finish cannot be called when in the middle of assembling a key")
  1568  	case maState_expectValue:
  1569  		panic("invalid state: Finish cannot be called when expecting start of value assembly")
  1570  	case maState_midValue:
  1571  		if !ma.valueFinishTidy() {
  1572  			panic("invalid state: Finish cannot be called when in the middle of assembling a value")
  1573  		} // if tidy success: carry on
  1574  	case maState_finished:
  1575  		panic("invalid state: Finish cannot be called on an assembler that's already finished")
  1576  	}
  1577  	ma.state = maState_finished
  1578  	*ma.m = schema.Maybe_Value
  1579  	return nil
  1580  }
  1581  func (ma *_Map__String__Msg3__ReprAssembler) KeyPrototype() datamodel.NodePrototype {
  1582  	return _String__ReprPrototype{}
  1583  }
  1584  func (ma *_Map__String__Msg3__ReprAssembler) ValuePrototype(_ string) datamodel.NodePrototype {
  1585  	return _Msg3__ReprPrototype{}
  1586  }
  1587  
  1588  func (n _Msg3) FieldWhee() Int {
  1589  	return &n.whee
  1590  }
  1591  func (n _Msg3) FieldWoot() Int {
  1592  	return &n.woot
  1593  }
  1594  func (n _Msg3) FieldWaga() Int {
  1595  	return &n.waga
  1596  }
  1597  
  1598  type _Msg3__Maybe struct {
  1599  	m schema.Maybe
  1600  	v Msg3
  1601  }
  1602  type MaybeMsg3 = *_Msg3__Maybe
  1603  
  1604  func (m MaybeMsg3) IsNull() bool {
  1605  	return m.m == schema.Maybe_Null
  1606  }
  1607  func (m MaybeMsg3) IsAbsent() bool {
  1608  	return m.m == schema.Maybe_Absent
  1609  }
  1610  func (m MaybeMsg3) Exists() bool {
  1611  	return m.m == schema.Maybe_Value
  1612  }
  1613  func (m MaybeMsg3) AsNode() datamodel.Node {
  1614  	switch m.m {
  1615  	case schema.Maybe_Absent:
  1616  		return datamodel.Absent
  1617  	case schema.Maybe_Null:
  1618  		return datamodel.Null
  1619  	case schema.Maybe_Value:
  1620  		return m.v
  1621  	default:
  1622  		panic("unreachable")
  1623  	}
  1624  }
  1625  func (m MaybeMsg3) Must() Msg3 {
  1626  	if !m.Exists() {
  1627  		panic("unbox of a maybe rejected")
  1628  	}
  1629  	return m.v
  1630  }
  1631  
  1632  var (
  1633  	fieldName__Msg3_Whee = _String{"whee"}
  1634  	fieldName__Msg3_Woot = _String{"woot"}
  1635  	fieldName__Msg3_Waga = _String{"waga"}
  1636  )
  1637  var _ datamodel.Node = (Msg3)(&_Msg3{})
  1638  var _ schema.TypedNode = (Msg3)(&_Msg3{})
  1639  
  1640  func (Msg3) Kind() datamodel.Kind {
  1641  	return datamodel.Kind_Map
  1642  }
  1643  func (n Msg3) LookupByString(key string) (datamodel.Node, error) {
  1644  	switch key {
  1645  	case "whee":
  1646  		return &n.whee, nil
  1647  	case "woot":
  1648  		return &n.woot, nil
  1649  	case "waga":
  1650  		return &n.waga, nil
  1651  	default:
  1652  		return nil, schema.ErrNoSuchField{Type: nil /*TODO*/, Field: datamodel.PathSegmentOfString(key)}
  1653  	}
  1654  }
  1655  func (n Msg3) LookupByNode(key datamodel.Node) (datamodel.Node, error) {
  1656  	ks, err := key.AsString()
  1657  	if err != nil {
  1658  		return nil, err
  1659  	}
  1660  	return n.LookupByString(ks)
  1661  }
  1662  func (Msg3) LookupByIndex(idx int64) (datamodel.Node, error) {
  1663  	return mixins.Map{TypeName: "gendemo.Msg3"}.LookupByIndex(0)
  1664  }
  1665  func (n Msg3) LookupBySegment(seg datamodel.PathSegment) (datamodel.Node, error) {
  1666  	return n.LookupByString(seg.String())
  1667  }
  1668  func (n Msg3) MapIterator() datamodel.MapIterator {
  1669  	return &_Msg3__MapItr{n, 0}
  1670  }
  1671  
  1672  type _Msg3__MapItr struct {
  1673  	n   Msg3
  1674  	idx int
  1675  }
  1676  
  1677  func (itr *_Msg3__MapItr) Next() (k datamodel.Node, v datamodel.Node, _ error) {
  1678  	if itr.idx >= 3 {
  1679  		return nil, nil, datamodel.ErrIteratorOverread{}
  1680  	}
  1681  	switch itr.idx {
  1682  	case 0:
  1683  		k = &fieldName__Msg3_Whee
  1684  		v = &itr.n.whee
  1685  	case 1:
  1686  		k = &fieldName__Msg3_Woot
  1687  		v = &itr.n.woot
  1688  	case 2:
  1689  		k = &fieldName__Msg3_Waga
  1690  		v = &itr.n.waga
  1691  	default:
  1692  		panic("unreachable")
  1693  	}
  1694  	itr.idx++
  1695  	return
  1696  }
  1697  func (itr *_Msg3__MapItr) Done() bool {
  1698  	return itr.idx >= 3
  1699  }
  1700  
  1701  func (Msg3) ListIterator() datamodel.ListIterator {
  1702  	return nil
  1703  }
  1704  func (Msg3) Length() int64 {
  1705  	return 3
  1706  }
  1707  func (Msg3) IsAbsent() bool {
  1708  	return false
  1709  }
  1710  func (Msg3) IsNull() bool {
  1711  	return false
  1712  }
  1713  func (Msg3) AsBool() (bool, error) {
  1714  	return mixins.Map{TypeName: "gendemo.Msg3"}.AsBool()
  1715  }
  1716  func (Msg3) AsInt() (int64, error) {
  1717  	return mixins.Map{TypeName: "gendemo.Msg3"}.AsInt()
  1718  }
  1719  func (Msg3) AsFloat() (float64, error) {
  1720  	return mixins.Map{TypeName: "gendemo.Msg3"}.AsFloat()
  1721  }
  1722  func (Msg3) AsString() (string, error) {
  1723  	return mixins.Map{TypeName: "gendemo.Msg3"}.AsString()
  1724  }
  1725  func (Msg3) AsBytes() ([]byte, error) {
  1726  	return mixins.Map{TypeName: "gendemo.Msg3"}.AsBytes()
  1727  }
  1728  func (Msg3) AsLink() (datamodel.Link, error) {
  1729  	return mixins.Map{TypeName: "gendemo.Msg3"}.AsLink()
  1730  }
  1731  func (Msg3) Prototype() datamodel.NodePrototype {
  1732  	return _Msg3__Prototype{}
  1733  }
  1734  
  1735  type _Msg3__Prototype struct{}
  1736  
  1737  func (_Msg3__Prototype) NewBuilder() datamodel.NodeBuilder {
  1738  	var nb _Msg3__Builder
  1739  	nb.Reset()
  1740  	return &nb
  1741  }
  1742  
  1743  type _Msg3__Builder struct {
  1744  	_Msg3__Assembler
  1745  }
  1746  
  1747  func (nb *_Msg3__Builder) Build() datamodel.Node {
  1748  	if *nb.m != schema.Maybe_Value {
  1749  		panic("invalid state: cannot call Build on an assembler that's not finished")
  1750  	}
  1751  	return nb.w
  1752  }
  1753  func (nb *_Msg3__Builder) Reset() {
  1754  	var w _Msg3
  1755  	var m schema.Maybe
  1756  	*nb = _Msg3__Builder{_Msg3__Assembler{w: &w, m: &m}}
  1757  }
  1758  
  1759  type _Msg3__Assembler struct {
  1760  	w     *_Msg3
  1761  	m     *schema.Maybe
  1762  	state maState
  1763  	s     int
  1764  	f     int
  1765  
  1766  	cm      schema.Maybe
  1767  	ca_whee _Int__Assembler
  1768  	ca_woot _Int__Assembler
  1769  	ca_waga _Int__Assembler
  1770  }
  1771  
  1772  func (na *_Msg3__Assembler) reset() {
  1773  	na.state = maState_initial
  1774  	na.s = 0
  1775  	na.ca_whee.reset()
  1776  	na.ca_woot.reset()
  1777  	na.ca_waga.reset()
  1778  }
  1779  
  1780  var (
  1781  	fieldBit__Msg3_Whee        = 1 << 0
  1782  	fieldBit__Msg3_Woot        = 1 << 1
  1783  	fieldBit__Msg3_Waga        = 1 << 2
  1784  	fieldBits__Msg3_sufficient = 0 + 1<<0 + 1<<1 + 1<<2
  1785  )
  1786  
  1787  func (na *_Msg3__Assembler) BeginMap(int64) (datamodel.MapAssembler, error) {
  1788  	switch *na.m {
  1789  	case schema.Maybe_Value, schema.Maybe_Null:
  1790  		panic("invalid state: cannot assign into assembler that's already finished")
  1791  	case midvalue:
  1792  		panic("invalid state: it makes no sense to 'begin' twice on the same assembler!")
  1793  	}
  1794  	*na.m = midvalue
  1795  	if na.w == nil {
  1796  		na.w = &_Msg3{}
  1797  	}
  1798  	return na, nil
  1799  }
  1800  func (_Msg3__Assembler) BeginList(sizeHint int64) (datamodel.ListAssembler, error) {
  1801  	return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.BeginList(0)
  1802  }
  1803  func (na *_Msg3__Assembler) AssignNull() error {
  1804  	switch *na.m {
  1805  	case allowNull:
  1806  		*na.m = schema.Maybe_Null
  1807  		return nil
  1808  	case schema.Maybe_Absent:
  1809  		return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.AssignNull()
  1810  	case schema.Maybe_Value, schema.Maybe_Null:
  1811  		panic("invalid state: cannot assign into assembler that's already finished")
  1812  	case midvalue:
  1813  		panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!")
  1814  	}
  1815  	panic("unreachable")
  1816  }
  1817  func (_Msg3__Assembler) AssignBool(bool) error {
  1818  	return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.AssignBool(false)
  1819  }
  1820  func (_Msg3__Assembler) AssignInt(int64) error {
  1821  	return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.AssignInt(0)
  1822  }
  1823  func (_Msg3__Assembler) AssignFloat(float64) error {
  1824  	return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.AssignFloat(0)
  1825  }
  1826  func (_Msg3__Assembler) AssignString(string) error {
  1827  	return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.AssignString("")
  1828  }
  1829  func (_Msg3__Assembler) AssignBytes([]byte) error {
  1830  	return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.AssignBytes(nil)
  1831  }
  1832  func (_Msg3__Assembler) AssignLink(datamodel.Link) error {
  1833  	return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.AssignLink(nil)
  1834  }
  1835  func (na *_Msg3__Assembler) AssignNode(v datamodel.Node) error {
  1836  	if v.IsNull() {
  1837  		return na.AssignNull()
  1838  	}
  1839  	if v2, ok := v.(*_Msg3); ok {
  1840  		switch *na.m {
  1841  		case schema.Maybe_Value, schema.Maybe_Null:
  1842  			panic("invalid state: cannot assign into assembler that's already finished")
  1843  		case midvalue:
  1844  			panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!")
  1845  		}
  1846  		if na.w == nil {
  1847  			na.w = v2
  1848  			*na.m = schema.Maybe_Value
  1849  			return nil
  1850  		}
  1851  		*na.w = *v2
  1852  		*na.m = schema.Maybe_Value
  1853  		return nil
  1854  	}
  1855  	if v.Kind() != datamodel.Kind_Map {
  1856  		return datamodel.ErrWrongKind{TypeName: "gendemo.Msg3", MethodName: "AssignNode", AppropriateKind: datamodel.KindSet_JustMap, ActualKind: v.Kind()}
  1857  	}
  1858  	itr := v.MapIterator()
  1859  	for !itr.Done() {
  1860  		k, v, err := itr.Next()
  1861  		if err != nil {
  1862  			return err
  1863  		}
  1864  		if err := na.AssembleKey().AssignNode(k); err != nil {
  1865  			return err
  1866  		}
  1867  		if err := na.AssembleValue().AssignNode(v); err != nil {
  1868  			return err
  1869  		}
  1870  	}
  1871  	return na.Finish()
  1872  }
  1873  func (_Msg3__Assembler) Prototype() datamodel.NodePrototype {
  1874  	return _Msg3__Prototype{}
  1875  }
  1876  func (ma *_Msg3__Assembler) valueFinishTidy() bool {
  1877  	switch ma.f {
  1878  	case 0:
  1879  		switch ma.cm {
  1880  		case schema.Maybe_Value:
  1881  			ma.ca_whee.w = nil
  1882  			ma.cm = schema.Maybe_Absent
  1883  			ma.state = maState_initial
  1884  			return true
  1885  		default:
  1886  			return false
  1887  		}
  1888  	case 1:
  1889  		switch ma.cm {
  1890  		case schema.Maybe_Value:
  1891  			ma.ca_woot.w = nil
  1892  			ma.cm = schema.Maybe_Absent
  1893  			ma.state = maState_initial
  1894  			return true
  1895  		default:
  1896  			return false
  1897  		}
  1898  	case 2:
  1899  		switch ma.cm {
  1900  		case schema.Maybe_Value:
  1901  			ma.ca_waga.w = nil
  1902  			ma.cm = schema.Maybe_Absent
  1903  			ma.state = maState_initial
  1904  			return true
  1905  		default:
  1906  			return false
  1907  		}
  1908  	default:
  1909  		panic("unreachable")
  1910  	}
  1911  }
  1912  func (ma *_Msg3__Assembler) AssembleEntry(k string) (datamodel.NodeAssembler, error) {
  1913  	switch ma.state {
  1914  	case maState_initial:
  1915  		// carry on
  1916  	case maState_midKey:
  1917  		panic("invalid state: AssembleEntry cannot be called when in the middle of assembling another key")
  1918  	case maState_expectValue:
  1919  		panic("invalid state: AssembleEntry cannot be called when expecting start of value assembly")
  1920  	case maState_midValue:
  1921  		if !ma.valueFinishTidy() {
  1922  			panic("invalid state: AssembleEntry cannot be called when in the middle of assembling a value")
  1923  		} // if tidy success: carry on
  1924  	case maState_finished:
  1925  		panic("invalid state: AssembleEntry cannot be called on an assembler that's already finished")
  1926  	}
  1927  	switch k {
  1928  	case "whee":
  1929  		if ma.s&fieldBit__Msg3_Whee != 0 {
  1930  			return nil, datamodel.ErrRepeatedMapKey{Key: &fieldName__Msg3_Whee}
  1931  		}
  1932  		ma.s += fieldBit__Msg3_Whee
  1933  		ma.state = maState_midValue
  1934  		ma.f = 0
  1935  		ma.ca_whee.w = &ma.w.whee
  1936  		ma.ca_whee.m = &ma.cm
  1937  		return &ma.ca_whee, nil
  1938  	case "woot":
  1939  		if ma.s&fieldBit__Msg3_Woot != 0 {
  1940  			return nil, datamodel.ErrRepeatedMapKey{Key: &fieldName__Msg3_Woot}
  1941  		}
  1942  		ma.s += fieldBit__Msg3_Woot
  1943  		ma.state = maState_midValue
  1944  		ma.f = 1
  1945  		ma.ca_woot.w = &ma.w.woot
  1946  		ma.ca_woot.m = &ma.cm
  1947  		return &ma.ca_woot, nil
  1948  	case "waga":
  1949  		if ma.s&fieldBit__Msg3_Waga != 0 {
  1950  			return nil, datamodel.ErrRepeatedMapKey{Key: &fieldName__Msg3_Waga}
  1951  		}
  1952  		ma.s += fieldBit__Msg3_Waga
  1953  		ma.state = maState_midValue
  1954  		ma.f = 2
  1955  		ma.ca_waga.w = &ma.w.waga
  1956  		ma.ca_waga.m = &ma.cm
  1957  		return &ma.ca_waga, nil
  1958  	}
  1959  	return nil, schema.ErrInvalidKey{TypeName: "gendemo.Msg3", Key: &_String{k}}
  1960  }
  1961  func (ma *_Msg3__Assembler) AssembleKey() datamodel.NodeAssembler {
  1962  	switch ma.state {
  1963  	case maState_initial:
  1964  		// carry on
  1965  	case maState_midKey:
  1966  		panic("invalid state: AssembleKey cannot be called when in the middle of assembling another key")
  1967  	case maState_expectValue:
  1968  		panic("invalid state: AssembleKey cannot be called when expecting start of value assembly")
  1969  	case maState_midValue:
  1970  		if !ma.valueFinishTidy() {
  1971  			panic("invalid state: AssembleKey cannot be called when in the middle of assembling a value")
  1972  		} // if tidy success: carry on
  1973  	case maState_finished:
  1974  		panic("invalid state: AssembleKey cannot be called on an assembler that's already finished")
  1975  	}
  1976  	ma.state = maState_midKey
  1977  	return (*_Msg3__KeyAssembler)(ma)
  1978  }
  1979  func (ma *_Msg3__Assembler) AssembleValue() datamodel.NodeAssembler {
  1980  	switch ma.state {
  1981  	case maState_initial:
  1982  		panic("invalid state: AssembleValue cannot be called when no key is primed")
  1983  	case maState_midKey:
  1984  		panic("invalid state: AssembleValue cannot be called when in the middle of assembling a key")
  1985  	case maState_expectValue:
  1986  		// carry on
  1987  	case maState_midValue:
  1988  		panic("invalid state: AssembleValue cannot be called when in the middle of assembling another value")
  1989  	case maState_finished:
  1990  		panic("invalid state: AssembleValue cannot be called on an assembler that's already finished")
  1991  	}
  1992  	ma.state = maState_midValue
  1993  	switch ma.f {
  1994  	case 0:
  1995  		ma.ca_whee.w = &ma.w.whee
  1996  		ma.ca_whee.m = &ma.cm
  1997  		return &ma.ca_whee
  1998  	case 1:
  1999  		ma.ca_woot.w = &ma.w.woot
  2000  		ma.ca_woot.m = &ma.cm
  2001  		return &ma.ca_woot
  2002  	case 2:
  2003  		ma.ca_waga.w = &ma.w.waga
  2004  		ma.ca_waga.m = &ma.cm
  2005  		return &ma.ca_waga
  2006  	default:
  2007  		panic("unreachable")
  2008  	}
  2009  }
  2010  func (ma *_Msg3__Assembler) Finish() error {
  2011  	switch ma.state {
  2012  	case maState_initial:
  2013  		// carry on
  2014  	case maState_midKey:
  2015  		panic("invalid state: Finish cannot be called when in the middle of assembling a key")
  2016  	case maState_expectValue:
  2017  		panic("invalid state: Finish cannot be called when expecting start of value assembly")
  2018  	case maState_midValue:
  2019  		if !ma.valueFinishTidy() {
  2020  			panic("invalid state: Finish cannot be called when in the middle of assembling a value")
  2021  		} // if tidy success: carry on
  2022  	case maState_finished:
  2023  		panic("invalid state: Finish cannot be called on an assembler that's already finished")
  2024  	}
  2025  	if ma.s&fieldBits__Msg3_sufficient != fieldBits__Msg3_sufficient {
  2026  		err := schema.ErrMissingRequiredField{Missing: make([]string, 0)}
  2027  		if ma.s&fieldBit__Msg3_Whee == 0 {
  2028  			err.Missing = append(err.Missing, "whee")
  2029  		}
  2030  		if ma.s&fieldBit__Msg3_Woot == 0 {
  2031  			err.Missing = append(err.Missing, "woot")
  2032  		}
  2033  		if ma.s&fieldBit__Msg3_Waga == 0 {
  2034  			err.Missing = append(err.Missing, "waga")
  2035  		}
  2036  		return err
  2037  	}
  2038  	ma.state = maState_finished
  2039  	*ma.m = schema.Maybe_Value
  2040  	return nil
  2041  }
  2042  func (ma *_Msg3__Assembler) KeyPrototype() datamodel.NodePrototype {
  2043  	return _String__Prototype{}
  2044  }
  2045  func (ma *_Msg3__Assembler) ValuePrototype(k string) datamodel.NodePrototype {
  2046  	panic("todo structbuilder mapassembler valueprototype")
  2047  }
  2048  
  2049  type _Msg3__KeyAssembler _Msg3__Assembler
  2050  
  2051  func (_Msg3__KeyAssembler) BeginMap(sizeHint int64) (datamodel.MapAssembler, error) {
  2052  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.BeginMap(0)
  2053  }
  2054  func (_Msg3__KeyAssembler) BeginList(sizeHint int64) (datamodel.ListAssembler, error) {
  2055  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.BeginList(0)
  2056  }
  2057  func (na *_Msg3__KeyAssembler) AssignNull() error {
  2058  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.AssignNull()
  2059  }
  2060  func (_Msg3__KeyAssembler) AssignBool(bool) error {
  2061  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.AssignBool(false)
  2062  }
  2063  func (_Msg3__KeyAssembler) AssignInt(int64) error {
  2064  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.AssignInt(0)
  2065  }
  2066  func (_Msg3__KeyAssembler) AssignFloat(float64) error {
  2067  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.AssignFloat(0)
  2068  }
  2069  func (ka *_Msg3__KeyAssembler) AssignString(k string) error {
  2070  	if ka.state != maState_midKey {
  2071  		panic("misuse: KeyAssembler held beyond its valid lifetime")
  2072  	}
  2073  	switch k {
  2074  	case "whee":
  2075  		if ka.s&fieldBit__Msg3_Whee != 0 {
  2076  			return datamodel.ErrRepeatedMapKey{Key: &fieldName__Msg3_Whee}
  2077  		}
  2078  		ka.s += fieldBit__Msg3_Whee
  2079  		ka.state = maState_expectValue
  2080  		ka.f = 0
  2081  		return nil
  2082  	case "woot":
  2083  		if ka.s&fieldBit__Msg3_Woot != 0 {
  2084  			return datamodel.ErrRepeatedMapKey{Key: &fieldName__Msg3_Woot}
  2085  		}
  2086  		ka.s += fieldBit__Msg3_Woot
  2087  		ka.state = maState_expectValue
  2088  		ka.f = 1
  2089  		return nil
  2090  	case "waga":
  2091  		if ka.s&fieldBit__Msg3_Waga != 0 {
  2092  			return datamodel.ErrRepeatedMapKey{Key: &fieldName__Msg3_Waga}
  2093  		}
  2094  		ka.s += fieldBit__Msg3_Waga
  2095  		ka.state = maState_expectValue
  2096  		ka.f = 2
  2097  		return nil
  2098  	default:
  2099  		return schema.ErrInvalidKey{TypeName: "gendemo.Msg3", Key: &_String{k}}
  2100  	}
  2101  }
  2102  func (_Msg3__KeyAssembler) AssignBytes([]byte) error {
  2103  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.AssignBytes(nil)
  2104  }
  2105  func (_Msg3__KeyAssembler) AssignLink(datamodel.Link) error {
  2106  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.AssignLink(nil)
  2107  }
  2108  func (ka *_Msg3__KeyAssembler) AssignNode(v datamodel.Node) error {
  2109  	if v2, err := v.AsString(); err != nil {
  2110  		return err
  2111  	} else {
  2112  		return ka.AssignString(v2)
  2113  	}
  2114  }
  2115  func (_Msg3__KeyAssembler) Prototype() datamodel.NodePrototype {
  2116  	return _String__Prototype{}
  2117  }
  2118  func (Msg3) Type() schema.Type {
  2119  	return nil /*TODO:typelit*/
  2120  }
  2121  func (n Msg3) Representation() datamodel.Node {
  2122  	return (*_Msg3__Repr)(n)
  2123  }
  2124  
  2125  type _Msg3__Repr _Msg3
  2126  
  2127  var (
  2128  	fieldName__Msg3_Whee_serial = _String{"whee"}
  2129  	fieldName__Msg3_Woot_serial = _String{"woot"}
  2130  	fieldName__Msg3_Waga_serial = _String{"waga"}
  2131  )
  2132  var _ datamodel.Node = &_Msg3__Repr{}
  2133  
  2134  func (_Msg3__Repr) Kind() datamodel.Kind {
  2135  	return datamodel.Kind_Map
  2136  }
  2137  func (n *_Msg3__Repr) LookupByString(key string) (datamodel.Node, error) {
  2138  	switch key {
  2139  	case "whee":
  2140  		return n.whee.Representation(), nil
  2141  	case "woot":
  2142  		return n.woot.Representation(), nil
  2143  	case "waga":
  2144  		return n.waga.Representation(), nil
  2145  	default:
  2146  		return nil, schema.ErrNoSuchField{Type: nil /*TODO*/, Field: datamodel.PathSegmentOfString(key)}
  2147  	}
  2148  }
  2149  func (n *_Msg3__Repr) LookupByNode(key datamodel.Node) (datamodel.Node, error) {
  2150  	ks, err := key.AsString()
  2151  	if err != nil {
  2152  		return nil, err
  2153  	}
  2154  	return n.LookupByString(ks)
  2155  }
  2156  func (_Msg3__Repr) LookupByIndex(idx int64) (datamodel.Node, error) {
  2157  	return mixins.Map{TypeName: "gendemo.Msg3.Repr"}.LookupByIndex(0)
  2158  }
  2159  func (n _Msg3__Repr) LookupBySegment(seg datamodel.PathSegment) (datamodel.Node, error) {
  2160  	return n.LookupByString(seg.String())
  2161  }
  2162  func (n *_Msg3__Repr) MapIterator() datamodel.MapIterator {
  2163  	return &_Msg3__ReprMapItr{n, 0}
  2164  }
  2165  
  2166  type _Msg3__ReprMapItr struct {
  2167  	n   *_Msg3__Repr
  2168  	idx int
  2169  }
  2170  
  2171  func (itr *_Msg3__ReprMapItr) Next() (k datamodel.Node, v datamodel.Node, _ error) {
  2172  	if itr.idx >= 3 {
  2173  		return nil, nil, datamodel.ErrIteratorOverread{}
  2174  	}
  2175  	switch itr.idx {
  2176  	case 0:
  2177  		k = &fieldName__Msg3_Whee_serial
  2178  		v = itr.n.whee.Representation()
  2179  	case 1:
  2180  		k = &fieldName__Msg3_Woot_serial
  2181  		v = itr.n.woot.Representation()
  2182  	case 2:
  2183  		k = &fieldName__Msg3_Waga_serial
  2184  		v = itr.n.waga.Representation()
  2185  	default:
  2186  		panic("unreachable")
  2187  	}
  2188  	itr.idx++
  2189  	return
  2190  }
  2191  func (itr *_Msg3__ReprMapItr) Done() bool {
  2192  	return itr.idx >= 3
  2193  }
  2194  func (_Msg3__Repr) ListIterator() datamodel.ListIterator {
  2195  	return nil
  2196  }
  2197  func (rn *_Msg3__Repr) Length() int64 {
  2198  	l := 3
  2199  	return int64(l)
  2200  }
  2201  func (_Msg3__Repr) IsAbsent() bool {
  2202  	return false
  2203  }
  2204  func (_Msg3__Repr) IsNull() bool {
  2205  	return false
  2206  }
  2207  func (_Msg3__Repr) AsBool() (bool, error) {
  2208  	return mixins.Map{TypeName: "gendemo.Msg3.Repr"}.AsBool()
  2209  }
  2210  func (_Msg3__Repr) AsInt() (int64, error) {
  2211  	return mixins.Map{TypeName: "gendemo.Msg3.Repr"}.AsInt()
  2212  }
  2213  func (_Msg3__Repr) AsFloat() (float64, error) {
  2214  	return mixins.Map{TypeName: "gendemo.Msg3.Repr"}.AsFloat()
  2215  }
  2216  func (_Msg3__Repr) AsString() (string, error) {
  2217  	return mixins.Map{TypeName: "gendemo.Msg3.Repr"}.AsString()
  2218  }
  2219  func (_Msg3__Repr) AsBytes() ([]byte, error) {
  2220  	return mixins.Map{TypeName: "gendemo.Msg3.Repr"}.AsBytes()
  2221  }
  2222  func (_Msg3__Repr) AsLink() (datamodel.Link, error) {
  2223  	return mixins.Map{TypeName: "gendemo.Msg3.Repr"}.AsLink()
  2224  }
  2225  func (_Msg3__Repr) Prototype() datamodel.NodePrototype {
  2226  	return _Msg3__ReprPrototype{}
  2227  }
  2228  
  2229  type _Msg3__ReprPrototype struct{}
  2230  
  2231  func (_Msg3__ReprPrototype) NewBuilder() datamodel.NodeBuilder {
  2232  	var nb _Msg3__ReprBuilder
  2233  	nb.Reset()
  2234  	return &nb
  2235  }
  2236  
  2237  type _Msg3__ReprBuilder struct {
  2238  	_Msg3__ReprAssembler
  2239  }
  2240  
  2241  func (nb *_Msg3__ReprBuilder) Build() datamodel.Node {
  2242  	if *nb.m != schema.Maybe_Value {
  2243  		panic("invalid state: cannot call Build on an assembler that's not finished")
  2244  	}
  2245  	return nb.w
  2246  }
  2247  func (nb *_Msg3__ReprBuilder) Reset() {
  2248  	var w _Msg3
  2249  	var m schema.Maybe
  2250  	*nb = _Msg3__ReprBuilder{_Msg3__ReprAssembler{w: &w, m: &m}}
  2251  }
  2252  
  2253  type _Msg3__ReprAssembler struct {
  2254  	w     *_Msg3
  2255  	m     *schema.Maybe
  2256  	state maState
  2257  	s     int
  2258  	f     int
  2259  
  2260  	cm      schema.Maybe
  2261  	ca_whee _Int__ReprAssembler
  2262  	ca_woot _Int__ReprAssembler
  2263  	ca_waga _Int__ReprAssembler
  2264  }
  2265  
  2266  func (na *_Msg3__ReprAssembler) reset() {
  2267  	na.state = maState_initial
  2268  	na.s = 0
  2269  	na.ca_whee.reset()
  2270  	na.ca_woot.reset()
  2271  	na.ca_waga.reset()
  2272  }
  2273  func (na *_Msg3__ReprAssembler) BeginMap(int64) (datamodel.MapAssembler, error) {
  2274  	switch *na.m {
  2275  	case schema.Maybe_Value, schema.Maybe_Null:
  2276  		panic("invalid state: cannot assign into assembler that's already finished")
  2277  	case midvalue:
  2278  		panic("invalid state: it makes no sense to 'begin' twice on the same assembler!")
  2279  	}
  2280  	*na.m = midvalue
  2281  	if na.w == nil {
  2282  		na.w = &_Msg3{}
  2283  	}
  2284  	return na, nil
  2285  }
  2286  func (_Msg3__ReprAssembler) BeginList(sizeHint int64) (datamodel.ListAssembler, error) {
  2287  	return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr"}.BeginList(0)
  2288  }
  2289  func (na *_Msg3__ReprAssembler) AssignNull() error {
  2290  	switch *na.m {
  2291  	case allowNull:
  2292  		*na.m = schema.Maybe_Null
  2293  		return nil
  2294  	case schema.Maybe_Absent:
  2295  		return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr.Repr"}.AssignNull()
  2296  	case schema.Maybe_Value, schema.Maybe_Null:
  2297  		panic("invalid state: cannot assign into assembler that's already finished")
  2298  	case midvalue:
  2299  		panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!")
  2300  	}
  2301  	panic("unreachable")
  2302  }
  2303  func (_Msg3__ReprAssembler) AssignBool(bool) error {
  2304  	return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr"}.AssignBool(false)
  2305  }
  2306  func (_Msg3__ReprAssembler) AssignInt(int64) error {
  2307  	return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr"}.AssignInt(0)
  2308  }
  2309  func (_Msg3__ReprAssembler) AssignFloat(float64) error {
  2310  	return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr"}.AssignFloat(0)
  2311  }
  2312  func (_Msg3__ReprAssembler) AssignString(string) error {
  2313  	return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr"}.AssignString("")
  2314  }
  2315  func (_Msg3__ReprAssembler) AssignBytes([]byte) error {
  2316  	return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr"}.AssignBytes(nil)
  2317  }
  2318  func (_Msg3__ReprAssembler) AssignLink(datamodel.Link) error {
  2319  	return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr"}.AssignLink(nil)
  2320  }
  2321  func (na *_Msg3__ReprAssembler) AssignNode(v datamodel.Node) error {
  2322  	if v.IsNull() {
  2323  		return na.AssignNull()
  2324  	}
  2325  	if v2, ok := v.(*_Msg3); ok {
  2326  		switch *na.m {
  2327  		case schema.Maybe_Value, schema.Maybe_Null:
  2328  			panic("invalid state: cannot assign into assembler that's already finished")
  2329  		case midvalue:
  2330  			panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!")
  2331  		}
  2332  		if na.w == nil {
  2333  			na.w = v2
  2334  			*na.m = schema.Maybe_Value
  2335  			return nil
  2336  		}
  2337  		*na.w = *v2
  2338  		*na.m = schema.Maybe_Value
  2339  		return nil
  2340  	}
  2341  	if v.Kind() != datamodel.Kind_Map {
  2342  		return datamodel.ErrWrongKind{TypeName: "gendemo.Msg3.Repr", MethodName: "AssignNode", AppropriateKind: datamodel.KindSet_JustMap, ActualKind: v.Kind()}
  2343  	}
  2344  	itr := v.MapIterator()
  2345  	for !itr.Done() {
  2346  		k, v, err := itr.Next()
  2347  		if err != nil {
  2348  			return err
  2349  		}
  2350  		if err := na.AssembleKey().AssignNode(k); err != nil {
  2351  			return err
  2352  		}
  2353  		if err := na.AssembleValue().AssignNode(v); err != nil {
  2354  			return err
  2355  		}
  2356  	}
  2357  	return na.Finish()
  2358  }
  2359  func (_Msg3__ReprAssembler) Prototype() datamodel.NodePrototype {
  2360  	return _Msg3__ReprPrototype{}
  2361  }
  2362  func (ma *_Msg3__ReprAssembler) valueFinishTidy() bool {
  2363  	switch ma.f {
  2364  	case 0:
  2365  		switch ma.cm {
  2366  		case schema.Maybe_Value:
  2367  			ma.cm = schema.Maybe_Absent
  2368  			ma.state = maState_initial
  2369  			return true
  2370  		default:
  2371  			return false
  2372  		}
  2373  	case 1:
  2374  		switch ma.cm {
  2375  		case schema.Maybe_Value:
  2376  			ma.cm = schema.Maybe_Absent
  2377  			ma.state = maState_initial
  2378  			return true
  2379  		default:
  2380  			return false
  2381  		}
  2382  	case 2:
  2383  		switch ma.cm {
  2384  		case schema.Maybe_Value:
  2385  			ma.cm = schema.Maybe_Absent
  2386  			ma.state = maState_initial
  2387  			return true
  2388  		default:
  2389  			return false
  2390  		}
  2391  	default:
  2392  		panic("unreachable")
  2393  	}
  2394  }
  2395  func (ma *_Msg3__ReprAssembler) AssembleEntry(k string) (datamodel.NodeAssembler, error) {
  2396  	switch ma.state {
  2397  	case maState_initial:
  2398  		// carry on
  2399  	case maState_midKey:
  2400  		panic("invalid state: AssembleEntry cannot be called when in the middle of assembling another key")
  2401  	case maState_expectValue:
  2402  		panic("invalid state: AssembleEntry cannot be called when expecting start of value assembly")
  2403  	case maState_midValue:
  2404  		if !ma.valueFinishTidy() {
  2405  			panic("invalid state: AssembleEntry cannot be called when in the middle of assembling a value")
  2406  		} // if tidy success: carry on
  2407  	case maState_finished:
  2408  		panic("invalid state: AssembleEntry cannot be called on an assembler that's already finished")
  2409  	}
  2410  	switch k {
  2411  	case "whee":
  2412  		if ma.s&fieldBit__Msg3_Whee != 0 {
  2413  			return nil, datamodel.ErrRepeatedMapKey{Key: &fieldName__Msg3_Whee_serial}
  2414  		}
  2415  		ma.s += fieldBit__Msg3_Whee
  2416  		ma.state = maState_midValue
  2417  		ma.f = 0
  2418  		ma.ca_whee.w = &ma.w.whee
  2419  		ma.ca_whee.m = &ma.cm
  2420  		return &ma.ca_whee, nil
  2421  	case "woot":
  2422  		if ma.s&fieldBit__Msg3_Woot != 0 {
  2423  			return nil, datamodel.ErrRepeatedMapKey{Key: &fieldName__Msg3_Woot_serial}
  2424  		}
  2425  		ma.s += fieldBit__Msg3_Woot
  2426  		ma.state = maState_midValue
  2427  		ma.f = 1
  2428  		ma.ca_woot.w = &ma.w.woot
  2429  		ma.ca_woot.m = &ma.cm
  2430  		return &ma.ca_woot, nil
  2431  	case "waga":
  2432  		if ma.s&fieldBit__Msg3_Waga != 0 {
  2433  			return nil, datamodel.ErrRepeatedMapKey{Key: &fieldName__Msg3_Waga_serial}
  2434  		}
  2435  		ma.s += fieldBit__Msg3_Waga
  2436  		ma.state = maState_midValue
  2437  		ma.f = 2
  2438  		ma.ca_waga.w = &ma.w.waga
  2439  		ma.ca_waga.m = &ma.cm
  2440  		return &ma.ca_waga, nil
  2441  	default:
  2442  	}
  2443  	return nil, schema.ErrInvalidKey{TypeName: "gendemo.Msg3.Repr", Key: &_String{k}}
  2444  }
  2445  func (ma *_Msg3__ReprAssembler) AssembleKey() datamodel.NodeAssembler {
  2446  	switch ma.state {
  2447  	case maState_initial:
  2448  		// carry on
  2449  	case maState_midKey:
  2450  		panic("invalid state: AssembleKey cannot be called when in the middle of assembling another key")
  2451  	case maState_expectValue:
  2452  		panic("invalid state: AssembleKey cannot be called when expecting start of value assembly")
  2453  	case maState_midValue:
  2454  		if !ma.valueFinishTidy() {
  2455  			panic("invalid state: AssembleKey cannot be called when in the middle of assembling a value")
  2456  		} // if tidy success: carry on
  2457  	case maState_finished:
  2458  		panic("invalid state: AssembleKey cannot be called on an assembler that's already finished")
  2459  	}
  2460  	ma.state = maState_midKey
  2461  	return (*_Msg3__ReprKeyAssembler)(ma)
  2462  }
  2463  func (ma *_Msg3__ReprAssembler) AssembleValue() datamodel.NodeAssembler {
  2464  	switch ma.state {
  2465  	case maState_initial:
  2466  		panic("invalid state: AssembleValue cannot be called when no key is primed")
  2467  	case maState_midKey:
  2468  		panic("invalid state: AssembleValue cannot be called when in the middle of assembling a key")
  2469  	case maState_expectValue:
  2470  		// carry on
  2471  	case maState_midValue:
  2472  		panic("invalid state: AssembleValue cannot be called when in the middle of assembling another value")
  2473  	case maState_finished:
  2474  		panic("invalid state: AssembleValue cannot be called on an assembler that's already finished")
  2475  	}
  2476  	ma.state = maState_midValue
  2477  	switch ma.f {
  2478  	case 0:
  2479  		ma.ca_whee.w = &ma.w.whee
  2480  		ma.ca_whee.m = &ma.cm
  2481  		return &ma.ca_whee
  2482  	case 1:
  2483  		ma.ca_woot.w = &ma.w.woot
  2484  		ma.ca_woot.m = &ma.cm
  2485  		return &ma.ca_woot
  2486  	case 2:
  2487  		ma.ca_waga.w = &ma.w.waga
  2488  		ma.ca_waga.m = &ma.cm
  2489  		return &ma.ca_waga
  2490  	default:
  2491  		panic("unreachable")
  2492  	}
  2493  }
  2494  func (ma *_Msg3__ReprAssembler) Finish() error {
  2495  	switch ma.state {
  2496  	case maState_initial:
  2497  		// carry on
  2498  	case maState_midKey:
  2499  		panic("invalid state: Finish cannot be called when in the middle of assembling a key")
  2500  	case maState_expectValue:
  2501  		panic("invalid state: Finish cannot be called when expecting start of value assembly")
  2502  	case maState_midValue:
  2503  		if !ma.valueFinishTidy() {
  2504  			panic("invalid state: Finish cannot be called when in the middle of assembling a value")
  2505  		} // if tidy success: carry on
  2506  	case maState_finished:
  2507  		panic("invalid state: Finish cannot be called on an assembler that's already finished")
  2508  	}
  2509  	if ma.s&fieldBits__Msg3_sufficient != fieldBits__Msg3_sufficient {
  2510  		err := schema.ErrMissingRequiredField{Missing: make([]string, 0)}
  2511  		if ma.s&fieldBit__Msg3_Whee == 0 {
  2512  			err.Missing = append(err.Missing, "whee")
  2513  		}
  2514  		if ma.s&fieldBit__Msg3_Woot == 0 {
  2515  			err.Missing = append(err.Missing, "woot")
  2516  		}
  2517  		if ma.s&fieldBit__Msg3_Waga == 0 {
  2518  			err.Missing = append(err.Missing, "waga")
  2519  		}
  2520  		return err
  2521  	}
  2522  	ma.state = maState_finished
  2523  	*ma.m = schema.Maybe_Value
  2524  	return nil
  2525  }
  2526  func (ma *_Msg3__ReprAssembler) KeyPrototype() datamodel.NodePrototype {
  2527  	return _String__Prototype{}
  2528  }
  2529  func (ma *_Msg3__ReprAssembler) ValuePrototype(k string) datamodel.NodePrototype {
  2530  	panic("todo structbuilder mapassembler repr valueprototype")
  2531  }
  2532  
  2533  type _Msg3__ReprKeyAssembler _Msg3__ReprAssembler
  2534  
  2535  func (_Msg3__ReprKeyAssembler) BeginMap(sizeHint int64) (datamodel.MapAssembler, error) {
  2536  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.BeginMap(0)
  2537  }
  2538  func (_Msg3__ReprKeyAssembler) BeginList(sizeHint int64) (datamodel.ListAssembler, error) {
  2539  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.BeginList(0)
  2540  }
  2541  func (na *_Msg3__ReprKeyAssembler) AssignNull() error {
  2542  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.AssignNull()
  2543  }
  2544  func (_Msg3__ReprKeyAssembler) AssignBool(bool) error {
  2545  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.AssignBool(false)
  2546  }
  2547  func (_Msg3__ReprKeyAssembler) AssignInt(int64) error {
  2548  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.AssignInt(0)
  2549  }
  2550  func (_Msg3__ReprKeyAssembler) AssignFloat(float64) error {
  2551  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.AssignFloat(0)
  2552  }
  2553  func (ka *_Msg3__ReprKeyAssembler) AssignString(k string) error {
  2554  	if ka.state != maState_midKey {
  2555  		panic("misuse: KeyAssembler held beyond its valid lifetime")
  2556  	}
  2557  	switch k {
  2558  	case "whee":
  2559  		if ka.s&fieldBit__Msg3_Whee != 0 {
  2560  			return datamodel.ErrRepeatedMapKey{Key: &fieldName__Msg3_Whee_serial}
  2561  		}
  2562  		ka.s += fieldBit__Msg3_Whee
  2563  		ka.state = maState_expectValue
  2564  		ka.f = 0
  2565  		return nil
  2566  	case "woot":
  2567  		if ka.s&fieldBit__Msg3_Woot != 0 {
  2568  			return datamodel.ErrRepeatedMapKey{Key: &fieldName__Msg3_Woot_serial}
  2569  		}
  2570  		ka.s += fieldBit__Msg3_Woot
  2571  		ka.state = maState_expectValue
  2572  		ka.f = 1
  2573  		return nil
  2574  	case "waga":
  2575  		if ka.s&fieldBit__Msg3_Waga != 0 {
  2576  			return datamodel.ErrRepeatedMapKey{Key: &fieldName__Msg3_Waga_serial}
  2577  		}
  2578  		ka.s += fieldBit__Msg3_Waga
  2579  		ka.state = maState_expectValue
  2580  		ka.f = 2
  2581  		return nil
  2582  	}
  2583  	return schema.ErrInvalidKey{TypeName: "gendemo.Msg3.Repr", Key: &_String{k}}
  2584  }
  2585  func (_Msg3__ReprKeyAssembler) AssignBytes([]byte) error {
  2586  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.AssignBytes(nil)
  2587  }
  2588  func (_Msg3__ReprKeyAssembler) AssignLink(datamodel.Link) error {
  2589  	return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.AssignLink(nil)
  2590  }
  2591  func (ka *_Msg3__ReprKeyAssembler) AssignNode(v datamodel.Node) error {
  2592  	if v2, err := v.AsString(); err != nil {
  2593  		return err
  2594  	} else {
  2595  		return ka.AssignString(v2)
  2596  	}
  2597  }
  2598  func (_Msg3__ReprKeyAssembler) Prototype() datamodel.NodePrototype {
  2599  	return _String__Prototype{}
  2600  }
  2601  
  2602  func (n String) String() string {
  2603  	return n.x
  2604  }
  2605  func (_String__Prototype) fromString(w *_String, v string) error {
  2606  	*w = _String{v}
  2607  	return nil
  2608  }
  2609  func (_String__Prototype) FromString(v string) (String, error) {
  2610  	n := _String{v}
  2611  	return &n, nil
  2612  }
  2613  
  2614  type _String__Maybe struct {
  2615  	m schema.Maybe
  2616  	v _String
  2617  }
  2618  type MaybeString = *_String__Maybe
  2619  
  2620  func (m MaybeString) IsNull() bool {
  2621  	return m.m == schema.Maybe_Null
  2622  }
  2623  func (m MaybeString) IsAbsent() bool {
  2624  	return m.m == schema.Maybe_Absent
  2625  }
  2626  func (m MaybeString) Exists() bool {
  2627  	return m.m == schema.Maybe_Value
  2628  }
  2629  func (m MaybeString) AsNode() datamodel.Node {
  2630  	switch m.m {
  2631  	case schema.Maybe_Absent:
  2632  		return datamodel.Absent
  2633  	case schema.Maybe_Null:
  2634  		return datamodel.Null
  2635  	case schema.Maybe_Value:
  2636  		return &m.v
  2637  	default:
  2638  		panic("unreachable")
  2639  	}
  2640  }
  2641  func (m MaybeString) Must() String {
  2642  	if !m.Exists() {
  2643  		panic("unbox of a maybe rejected")
  2644  	}
  2645  	return &m.v
  2646  }
  2647  
  2648  var _ datamodel.Node = (String)(&_String{})
  2649  var _ schema.TypedNode = (String)(&_String{})
  2650  
  2651  func (String) Kind() datamodel.Kind {
  2652  	return datamodel.Kind_String
  2653  }
  2654  func (String) LookupByString(string) (datamodel.Node, error) {
  2655  	return mixins.String{TypeName: "gendemo.String"}.LookupByString("")
  2656  }
  2657  func (String) LookupByNode(datamodel.Node) (datamodel.Node, error) {
  2658  	return mixins.String{TypeName: "gendemo.String"}.LookupByNode(nil)
  2659  }
  2660  func (String) LookupByIndex(idx int64) (datamodel.Node, error) {
  2661  	return mixins.String{TypeName: "gendemo.String"}.LookupByIndex(0)
  2662  }
  2663  func (String) LookupBySegment(seg datamodel.PathSegment) (datamodel.Node, error) {
  2664  	return mixins.String{TypeName: "gendemo.String"}.LookupBySegment(seg)
  2665  }
  2666  func (String) MapIterator() datamodel.MapIterator {
  2667  	return nil
  2668  }
  2669  func (String) ListIterator() datamodel.ListIterator {
  2670  	return nil
  2671  }
  2672  func (String) Length() int64 {
  2673  	return -1
  2674  }
  2675  func (String) IsAbsent() bool {
  2676  	return false
  2677  }
  2678  func (String) IsNull() bool {
  2679  	return false
  2680  }
  2681  func (String) AsBool() (bool, error) {
  2682  	return mixins.String{TypeName: "gendemo.String"}.AsBool()
  2683  }
  2684  func (String) AsInt() (int64, error) {
  2685  	return mixins.String{TypeName: "gendemo.String"}.AsInt()
  2686  }
  2687  func (String) AsFloat() (float64, error) {
  2688  	return mixins.String{TypeName: "gendemo.String"}.AsFloat()
  2689  }
  2690  func (n String) AsString() (string, error) {
  2691  	return n.x, nil
  2692  }
  2693  func (String) AsBytes() ([]byte, error) {
  2694  	return mixins.String{TypeName: "gendemo.String"}.AsBytes()
  2695  }
  2696  func (String) AsLink() (datamodel.Link, error) {
  2697  	return mixins.String{TypeName: "gendemo.String"}.AsLink()
  2698  }
  2699  func (String) Prototype() datamodel.NodePrototype {
  2700  	return _String__Prototype{}
  2701  }
  2702  
  2703  type _String__Prototype struct{}
  2704  
  2705  func (_String__Prototype) NewBuilder() datamodel.NodeBuilder {
  2706  	var nb _String__Builder
  2707  	nb.Reset()
  2708  	return &nb
  2709  }
  2710  
  2711  type _String__Builder struct {
  2712  	_String__Assembler
  2713  }
  2714  
  2715  func (nb *_String__Builder) Build() datamodel.Node {
  2716  	if *nb.m != schema.Maybe_Value {
  2717  		panic("invalid state: cannot call Build on an assembler that's not finished")
  2718  	}
  2719  	return nb.w
  2720  }
  2721  func (nb *_String__Builder) Reset() {
  2722  	var w _String
  2723  	var m schema.Maybe
  2724  	*nb = _String__Builder{_String__Assembler{w: &w, m: &m}}
  2725  }
  2726  
  2727  type _String__Assembler struct {
  2728  	w *_String
  2729  	m *schema.Maybe
  2730  }
  2731  
  2732  func (na *_String__Assembler) reset() {}
  2733  func (_String__Assembler) BeginMap(sizeHint int64) (datamodel.MapAssembler, error) {
  2734  	return mixins.StringAssembler{TypeName: "gendemo.String"}.BeginMap(0)
  2735  }
  2736  func (_String__Assembler) BeginList(sizeHint int64) (datamodel.ListAssembler, error) {
  2737  	return mixins.StringAssembler{TypeName: "gendemo.String"}.BeginList(0)
  2738  }
  2739  func (na *_String__Assembler) AssignNull() error {
  2740  	switch *na.m {
  2741  	case allowNull:
  2742  		*na.m = schema.Maybe_Null
  2743  		return nil
  2744  	case schema.Maybe_Absent:
  2745  		return mixins.StringAssembler{TypeName: "gendemo.String"}.AssignNull()
  2746  	case schema.Maybe_Value, schema.Maybe_Null:
  2747  		panic("invalid state: cannot assign into assembler that's already finished")
  2748  	}
  2749  	panic("unreachable")
  2750  }
  2751  func (_String__Assembler) AssignBool(bool) error {
  2752  	return mixins.StringAssembler{TypeName: "gendemo.String"}.AssignBool(false)
  2753  }
  2754  func (_String__Assembler) AssignInt(int64) error {
  2755  	return mixins.StringAssembler{TypeName: "gendemo.String"}.AssignInt(0)
  2756  }
  2757  func (_String__Assembler) AssignFloat(float64) error {
  2758  	return mixins.StringAssembler{TypeName: "gendemo.String"}.AssignFloat(0)
  2759  }
  2760  func (na *_String__Assembler) AssignString(v string) error {
  2761  	switch *na.m {
  2762  	case schema.Maybe_Value, schema.Maybe_Null:
  2763  		panic("invalid state: cannot assign into assembler that's already finished")
  2764  	}
  2765  	na.w.x = v
  2766  	*na.m = schema.Maybe_Value
  2767  	return nil
  2768  }
  2769  func (_String__Assembler) AssignBytes([]byte) error {
  2770  	return mixins.StringAssembler{TypeName: "gendemo.String"}.AssignBytes(nil)
  2771  }
  2772  func (_String__Assembler) AssignLink(datamodel.Link) error {
  2773  	return mixins.StringAssembler{TypeName: "gendemo.String"}.AssignLink(nil)
  2774  }
  2775  func (na *_String__Assembler) AssignNode(v datamodel.Node) error {
  2776  	if v.IsNull() {
  2777  		return na.AssignNull()
  2778  	}
  2779  	if v2, ok := v.(*_String); ok {
  2780  		switch *na.m {
  2781  		case schema.Maybe_Value, schema.Maybe_Null:
  2782  			panic("invalid state: cannot assign into assembler that's already finished")
  2783  		}
  2784  		*na.w = *v2
  2785  		*na.m = schema.Maybe_Value
  2786  		return nil
  2787  	}
  2788  	if v2, err := v.AsString(); err != nil {
  2789  		return err
  2790  	} else {
  2791  		return na.AssignString(v2)
  2792  	}
  2793  }
  2794  func (_String__Assembler) Prototype() datamodel.NodePrototype {
  2795  	return _String__Prototype{}
  2796  }
  2797  func (String) Type() schema.Type {
  2798  	return nil /*TODO:typelit*/
  2799  }
  2800  func (n String) Representation() datamodel.Node {
  2801  	return (*_String__Repr)(n)
  2802  }
  2803  
  2804  type _String__Repr = _String
  2805  
  2806  var _ datamodel.Node = &_String__Repr{}
  2807  
  2808  type _String__ReprPrototype = _String__Prototype
  2809  type _String__ReprAssembler = _String__Assembler
  2810  
  2811  func (n _UnionKinded) AsInterface() _UnionKinded__iface {
  2812  	switch n.tag {
  2813  	case 1:
  2814  		return &n.x1
  2815  	case 2:
  2816  		return &n.x2
  2817  	case 3:
  2818  		return &n.x3
  2819  	default:
  2820  		panic("invalid union state; how did you create this object?")
  2821  	}
  2822  }
  2823  
  2824  type _UnionKinded__Maybe struct {
  2825  	m schema.Maybe
  2826  	v UnionKinded
  2827  }
  2828  type MaybeUnionKinded = *_UnionKinded__Maybe
  2829  
  2830  func (m MaybeUnionKinded) IsNull() bool {
  2831  	return m.m == schema.Maybe_Null
  2832  }
  2833  func (m MaybeUnionKinded) IsAbsent() bool {
  2834  	return m.m == schema.Maybe_Absent
  2835  }
  2836  func (m MaybeUnionKinded) Exists() bool {
  2837  	return m.m == schema.Maybe_Value
  2838  }
  2839  func (m MaybeUnionKinded) AsNode() datamodel.Node {
  2840  	switch m.m {
  2841  	case schema.Maybe_Absent:
  2842  		return datamodel.Absent
  2843  	case schema.Maybe_Null:
  2844  		return datamodel.Null
  2845  	case schema.Maybe_Value:
  2846  		return m.v
  2847  	default:
  2848  		panic("unreachable")
  2849  	}
  2850  }
  2851  func (m MaybeUnionKinded) Must() UnionKinded {
  2852  	if !m.Exists() {
  2853  		panic("unbox of a maybe rejected")
  2854  	}
  2855  	return m.v
  2856  }
  2857  
  2858  var (
  2859  	memberName__UnionKinded_Foo = _String{"Foo"}
  2860  	memberName__UnionKinded_Bar = _String{"Bar"}
  2861  	memberName__UnionKinded_Baz = _String{"Baz"}
  2862  )
  2863  var _ datamodel.Node = (UnionKinded)(&_UnionKinded{})
  2864  var _ schema.TypedNode = (UnionKinded)(&_UnionKinded{})
  2865  
  2866  func (UnionKinded) Kind() datamodel.Kind {
  2867  	return datamodel.Kind_Map
  2868  }
  2869  func (n UnionKinded) LookupByString(key string) (datamodel.Node, error) {
  2870  	switch key {
  2871  	case "Foo":
  2872  		if n.tag != 1 {
  2873  			return nil, datamodel.ErrNotExists{Segment: datamodel.PathSegmentOfString(key)}
  2874  		}
  2875  		return &n.x1, nil
  2876  	case "Bar":
  2877  		if n.tag != 2 {
  2878  			return nil, datamodel.ErrNotExists{Segment: datamodel.PathSegmentOfString(key)}
  2879  		}
  2880  		return &n.x2, nil
  2881  	case "Baz":
  2882  		if n.tag != 3 {
  2883  			return nil, datamodel.ErrNotExists{Segment: datamodel.PathSegmentOfString(key)}
  2884  		}
  2885  		return &n.x3, nil
  2886  	default:
  2887  		return nil, schema.ErrNoSuchField{Type: nil /*TODO*/, Field: datamodel.PathSegmentOfString(key)}
  2888  	}
  2889  }
  2890  func (n UnionKinded) LookupByNode(key datamodel.Node) (datamodel.Node, error) {
  2891  	ks, err := key.AsString()
  2892  	if err != nil {
  2893  		return nil, err
  2894  	}
  2895  	return n.LookupByString(ks)
  2896  }
  2897  func (UnionKinded) LookupByIndex(idx int64) (datamodel.Node, error) {
  2898  	return mixins.Map{TypeName: "gendemo.UnionKinded"}.LookupByIndex(0)
  2899  }
  2900  func (n UnionKinded) LookupBySegment(seg datamodel.PathSegment) (datamodel.Node, error) {
  2901  	return n.LookupByString(seg.String())
  2902  }
  2903  func (n UnionKinded) MapIterator() datamodel.MapIterator {
  2904  	return &_UnionKinded__MapItr{n, false}
  2905  }
  2906  
  2907  type _UnionKinded__MapItr struct {
  2908  	n    UnionKinded
  2909  	done bool
  2910  }
  2911  
  2912  func (itr *_UnionKinded__MapItr) Next() (k datamodel.Node, v datamodel.Node, _ error) {
  2913  	if itr.done {
  2914  		return nil, nil, datamodel.ErrIteratorOverread{}
  2915  	}
  2916  	switch itr.n.tag {
  2917  	case 1:
  2918  		k, v = &memberName__UnionKinded_Foo, &itr.n.x1
  2919  	case 2:
  2920  		k, v = &memberName__UnionKinded_Bar, &itr.n.x2
  2921  	case 3:
  2922  		k, v = &memberName__UnionKinded_Baz, &itr.n.x3
  2923  	default:
  2924  		panic("unreachable")
  2925  	}
  2926  	itr.done = true
  2927  	return
  2928  }
  2929  func (itr *_UnionKinded__MapItr) Done() bool {
  2930  	return itr.done
  2931  }
  2932  
  2933  func (UnionKinded) ListIterator() datamodel.ListIterator {
  2934  	return nil
  2935  }
  2936  func (UnionKinded) Length() int64 {
  2937  	return 1
  2938  }
  2939  func (UnionKinded) IsAbsent() bool {
  2940  	return false
  2941  }
  2942  func (UnionKinded) IsNull() bool {
  2943  	return false
  2944  }
  2945  func (UnionKinded) AsBool() (bool, error) {
  2946  	return mixins.Map{TypeName: "gendemo.UnionKinded"}.AsBool()
  2947  }
  2948  func (UnionKinded) AsInt() (int64, error) {
  2949  	return mixins.Map{TypeName: "gendemo.UnionKinded"}.AsInt()
  2950  }
  2951  func (UnionKinded) AsFloat() (float64, error) {
  2952  	return mixins.Map{TypeName: "gendemo.UnionKinded"}.AsFloat()
  2953  }
  2954  func (UnionKinded) AsString() (string, error) {
  2955  	return mixins.Map{TypeName: "gendemo.UnionKinded"}.AsString()
  2956  }
  2957  func (UnionKinded) AsBytes() ([]byte, error) {
  2958  	return mixins.Map{TypeName: "gendemo.UnionKinded"}.AsBytes()
  2959  }
  2960  func (UnionKinded) AsLink() (datamodel.Link, error) {
  2961  	return mixins.Map{TypeName: "gendemo.UnionKinded"}.AsLink()
  2962  }
  2963  func (UnionKinded) Prototype() datamodel.NodePrototype {
  2964  	return _UnionKinded__Prototype{}
  2965  }
  2966  
  2967  type _UnionKinded__Prototype struct{}
  2968  
  2969  func (_UnionKinded__Prototype) NewBuilder() datamodel.NodeBuilder {
  2970  	var nb _UnionKinded__Builder
  2971  	nb.Reset()
  2972  	return &nb
  2973  }
  2974  
  2975  type _UnionKinded__Builder struct {
  2976  	_UnionKinded__Assembler
  2977  }
  2978  
  2979  func (nb *_UnionKinded__Builder) Build() datamodel.Node {
  2980  	if *nb.m != schema.Maybe_Value {
  2981  		panic("invalid state: cannot call Build on an assembler that's not finished")
  2982  	}
  2983  	return nb.w
  2984  }
  2985  func (nb *_UnionKinded__Builder) Reset() {
  2986  	var w _UnionKinded
  2987  	var m schema.Maybe
  2988  	*nb = _UnionKinded__Builder{_UnionKinded__Assembler{w: &w, m: &m}}
  2989  }
  2990  
  2991  type _UnionKinded__Assembler struct {
  2992  	w     *_UnionKinded
  2993  	m     *schema.Maybe
  2994  	state maState
  2995  
  2996  	cm  schema.Maybe
  2997  	ca1 _Foo__Assembler
  2998  
  2999  	ca2 _Bar__Assembler
  3000  
  3001  	ca3 _Baz__Assembler
  3002  	ca  uint
  3003  }
  3004  
  3005  func (na *_UnionKinded__Assembler) reset() {
  3006  	na.state = maState_initial
  3007  	switch na.ca {
  3008  	case 0:
  3009  		return
  3010  	case 1:
  3011  		na.ca1.reset()
  3012  
  3013  	case 2:
  3014  		na.ca2.reset()
  3015  
  3016  	case 3:
  3017  		na.ca3.reset()
  3018  	default:
  3019  		panic("unreachable")
  3020  	}
  3021  	na.ca = 0
  3022  	na.cm = schema.Maybe_Absent
  3023  }
  3024  func (na *_UnionKinded__Assembler) BeginMap(int64) (datamodel.MapAssembler, error) {
  3025  	switch *na.m {
  3026  	case schema.Maybe_Value, schema.Maybe_Null:
  3027  		panic("invalid state: cannot assign into assembler that's already finished")
  3028  	case midvalue:
  3029  		panic("invalid state: it makes no sense to 'begin' twice on the same assembler!")
  3030  	}
  3031  	*na.m = midvalue
  3032  	if na.w == nil {
  3033  		na.w = &_UnionKinded{}
  3034  	}
  3035  	return na, nil
  3036  }
  3037  func (_UnionKinded__Assembler) BeginList(sizeHint int64) (datamodel.ListAssembler, error) {
  3038  	return mixins.MapAssembler{TypeName: "gendemo.UnionKinded"}.BeginList(0)
  3039  }
  3040  func (na *_UnionKinded__Assembler) AssignNull() error {
  3041  	switch *na.m {
  3042  	case allowNull:
  3043  		*na.m = schema.Maybe_Null
  3044  		return nil
  3045  	case schema.Maybe_Absent:
  3046  		return mixins.MapAssembler{TypeName: "gendemo.UnionKinded"}.AssignNull()
  3047  	case schema.Maybe_Value, schema.Maybe_Null:
  3048  		panic("invalid state: cannot assign into assembler that's already finished")
  3049  	case midvalue:
  3050  		panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!")
  3051  	}
  3052  	panic("unreachable")
  3053  }
  3054  func (_UnionKinded__Assembler) AssignBool(bool) error {
  3055  	return mixins.MapAssembler{TypeName: "gendemo.UnionKinded"}.AssignBool(false)
  3056  }
  3057  func (_UnionKinded__Assembler) AssignInt(int64) error {
  3058  	return mixins.MapAssembler{TypeName: "gendemo.UnionKinded"}.AssignInt(0)
  3059  }
  3060  func (_UnionKinded__Assembler) AssignFloat(float64) error {
  3061  	return mixins.MapAssembler{TypeName: "gendemo.UnionKinded"}.AssignFloat(0)
  3062  }
  3063  func (_UnionKinded__Assembler) AssignString(string) error {
  3064  	return mixins.MapAssembler{TypeName: "gendemo.UnionKinded"}.AssignString("")
  3065  }
  3066  func (_UnionKinded__Assembler) AssignBytes([]byte) error {
  3067  	return mixins.MapAssembler{TypeName: "gendemo.UnionKinded"}.AssignBytes(nil)
  3068  }
  3069  func (_UnionKinded__Assembler) AssignLink(datamodel.Link) error {
  3070  	return mixins.MapAssembler{TypeName: "gendemo.UnionKinded"}.AssignLink(nil)
  3071  }
  3072  func (na *_UnionKinded__Assembler) AssignNode(v datamodel.Node) error {
  3073  	if v.IsNull() {
  3074  		return na.AssignNull()
  3075  	}
  3076  	if v2, ok := v.(*_UnionKinded); ok {
  3077  		switch *na.m {
  3078  		case schema.Maybe_Value, schema.Maybe_Null:
  3079  			panic("invalid state: cannot assign into assembler that's already finished")
  3080  		case midvalue:
  3081  			panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!")
  3082  		}
  3083  		if na.w == nil {
  3084  			na.w = v2
  3085  			*na.m = schema.Maybe_Value
  3086  			return nil
  3087  		}
  3088  		*na.w = *v2
  3089  		*na.m = schema.Maybe_Value
  3090  		return nil
  3091  	}
  3092  	if v.Kind() != datamodel.Kind_Map {
  3093  		return datamodel.ErrWrongKind{TypeName: "gendemo.UnionKinded", MethodName: "AssignNode", AppropriateKind: datamodel.KindSet_JustMap, ActualKind: v.Kind()}
  3094  	}
  3095  	itr := v.MapIterator()
  3096  	for !itr.Done() {
  3097  		k, v, err := itr.Next()
  3098  		if err != nil {
  3099  			return err
  3100  		}
  3101  		if err := na.AssembleKey().AssignNode(k); err != nil {
  3102  			return err
  3103  		}
  3104  		if err := na.AssembleValue().AssignNode(v); err != nil {
  3105  			return err
  3106  		}
  3107  	}
  3108  	return na.Finish()
  3109  }
  3110  func (_UnionKinded__Assembler) Prototype() datamodel.NodePrototype {
  3111  	return _UnionKinded__Prototype{}
  3112  }
  3113  func (ma *_UnionKinded__Assembler) valueFinishTidy() bool {
  3114  	switch ma.cm {
  3115  	case schema.Maybe_Value:
  3116  		ma.state = maState_initial
  3117  		return true
  3118  	default:
  3119  		return false
  3120  	}
  3121  }
  3122  func (ma *_UnionKinded__Assembler) AssembleEntry(k string) (datamodel.NodeAssembler, error) {
  3123  	switch ma.state {
  3124  	case maState_initial:
  3125  		// carry on
  3126  	case maState_midKey:
  3127  		panic("invalid state: AssembleEntry cannot be called when in the middle of assembling another key")
  3128  	case maState_expectValue:
  3129  		panic("invalid state: AssembleEntry cannot be called when expecting start of value assembly")
  3130  	case maState_midValue:
  3131  		if !ma.valueFinishTidy() {
  3132  			panic("invalid state: AssembleEntry cannot be called when in the middle of assembling a value")
  3133  		} // if tidy success: carry on for the moment, but we'll still be erroring shortly.
  3134  	case maState_finished:
  3135  		panic("invalid state: AssembleEntry cannot be called on an assembler that's already finished")
  3136  	}
  3137  	if ma.ca != 0 {
  3138  		return nil, schema.ErrNotUnionStructure{TypeName: "gendemo.UnionKinded", Detail: "cannot add another entry -- a union can only contain one thing!"}
  3139  	}
  3140  	switch k {
  3141  	case "Foo":
  3142  		ma.state = maState_midValue
  3143  		ma.ca = 1
  3144  		ma.w.tag = 1
  3145  		ma.ca1.w = &ma.w.x1
  3146  		ma.ca1.m = &ma.cm
  3147  		return &ma.ca1, nil
  3148  	case "Bar":
  3149  		ma.state = maState_midValue
  3150  		ma.ca = 2
  3151  		ma.w.tag = 2
  3152  		ma.ca2.w = &ma.w.x2
  3153  		ma.ca2.m = &ma.cm
  3154  		return &ma.ca2, nil
  3155  	case "Baz":
  3156  		ma.state = maState_midValue
  3157  		ma.ca = 3
  3158  		ma.w.tag = 3
  3159  		ma.ca3.w = &ma.w.x3
  3160  		ma.ca3.m = &ma.cm
  3161  		return &ma.ca3, nil
  3162  	}
  3163  	return nil, schema.ErrInvalidKey{TypeName: "gendemo.UnionKinded", Key: &_String{k}}
  3164  }
  3165  func (ma *_UnionKinded__Assembler) AssembleKey() datamodel.NodeAssembler {
  3166  	switch ma.state {
  3167  	case maState_initial:
  3168  		// carry on
  3169  	case maState_midKey:
  3170  		panic("invalid state: AssembleKey cannot be called when in the middle of assembling another key")
  3171  	case maState_expectValue:
  3172  		panic("invalid state: AssembleKey cannot be called when expecting start of value assembly")
  3173  	case maState_midValue:
  3174  		if !ma.valueFinishTidy() {
  3175  			panic("invalid state: AssembleKey cannot be called when in the middle of assembling a value")
  3176  		} // if tidy success: carry on for the moment, but we'll still be erroring shortly... or rather, the keyassembler will be.
  3177  	case maState_finished:
  3178  		panic("invalid state: AssembleKey cannot be called on an assembler that's already finished")
  3179  	}
  3180  	ma.state = maState_midKey
  3181  	return (*_UnionKinded__KeyAssembler)(ma)
  3182  }
  3183  func (ma *_UnionKinded__Assembler) AssembleValue() datamodel.NodeAssembler {
  3184  	switch ma.state {
  3185  	case maState_initial:
  3186  		panic("invalid state: AssembleValue cannot be called when no key is primed")
  3187  	case maState_midKey:
  3188  		panic("invalid state: AssembleValue cannot be called when in the middle of assembling a key")
  3189  	case maState_expectValue:
  3190  		// carry on
  3191  	case maState_midValue:
  3192  		panic("invalid state: AssembleValue cannot be called when in the middle of assembling another value")
  3193  	case maState_finished:
  3194  		panic("invalid state: AssembleValue cannot be called on an assembler that's already finished")
  3195  	}
  3196  	ma.state = maState_midValue
  3197  	switch ma.ca {
  3198  	case 1:
  3199  		ma.ca1.w = &ma.w.x1
  3200  		ma.ca1.m = &ma.cm
  3201  		return &ma.ca1
  3202  	case 2:
  3203  		ma.ca2.w = &ma.w.x2
  3204  		ma.ca2.m = &ma.cm
  3205  		return &ma.ca2
  3206  	case 3:
  3207  		ma.ca3.w = &ma.w.x3
  3208  		ma.ca3.m = &ma.cm
  3209  		return &ma.ca3
  3210  	default:
  3211  		panic("unreachable")
  3212  	}
  3213  }
  3214  func (ma *_UnionKinded__Assembler) Finish() error {
  3215  	switch ma.state {
  3216  	case maState_initial:
  3217  		// carry on
  3218  	case maState_midKey:
  3219  		panic("invalid state: Finish cannot be called when in the middle of assembling a key")
  3220  	case maState_expectValue:
  3221  		panic("invalid state: Finish cannot be called when expecting start of value assembly")
  3222  	case maState_midValue:
  3223  		if !ma.valueFinishTidy() {
  3224  			panic("invalid state: Finish cannot be called when in the middle of assembling a value")
  3225  		} // if tidy success: carry on
  3226  	case maState_finished:
  3227  		panic("invalid state: Finish cannot be called on an assembler that's already finished")
  3228  	}
  3229  	if ma.ca == 0 {
  3230  		return schema.ErrNotUnionStructure{TypeName: "gendemo.UnionKinded", Detail: "a union must have exactly one entry (not none)!"}
  3231  	}
  3232  	ma.state = maState_finished
  3233  	*ma.m = schema.Maybe_Value
  3234  	return nil
  3235  }
  3236  func (ma *_UnionKinded__Assembler) KeyPrototype() datamodel.NodePrototype {
  3237  	return _String__Prototype{}
  3238  }
  3239  func (ma *_UnionKinded__Assembler) ValuePrototype(k string) datamodel.NodePrototype {
  3240  	switch k {
  3241  	case "Foo":
  3242  		return _Foo__Prototype{}
  3243  	case "Bar":
  3244  		return _Bar__Prototype{}
  3245  	case "Baz":
  3246  		return _Baz__Prototype{}
  3247  	default:
  3248  		return nil
  3249  	}
  3250  }
  3251  
  3252  type _UnionKinded__KeyAssembler _UnionKinded__Assembler
  3253  
  3254  func (_UnionKinded__KeyAssembler) BeginMap(sizeHint int64) (datamodel.MapAssembler, error) {
  3255  	return mixins.StringAssembler{TypeName: "gendemo.UnionKinded.KeyAssembler"}.BeginMap(0)
  3256  }
  3257  func (_UnionKinded__KeyAssembler) BeginList(sizeHint int64) (datamodel.ListAssembler, error) {
  3258  	return mixins.StringAssembler{TypeName: "gendemo.UnionKinded.KeyAssembler"}.BeginList(0)
  3259  }
  3260  func (na *_UnionKinded__KeyAssembler) AssignNull() error {
  3261  	return mixins.StringAssembler{TypeName: "gendemo.UnionKinded.KeyAssembler"}.AssignNull()
  3262  }
  3263  func (_UnionKinded__KeyAssembler) AssignBool(bool) error {
  3264  	return mixins.StringAssembler{TypeName: "gendemo.UnionKinded.KeyAssembler"}.AssignBool(false)
  3265  }
  3266  func (_UnionKinded__KeyAssembler) AssignInt(int64) error {
  3267  	return mixins.StringAssembler{TypeName: "gendemo.UnionKinded.KeyAssembler"}.AssignInt(0)
  3268  }
  3269  func (_UnionKinded__KeyAssembler) AssignFloat(float64) error {
  3270  	return mixins.StringAssembler{TypeName: "gendemo.UnionKinded.KeyAssembler"}.AssignFloat(0)
  3271  }
  3272  func (ka *_UnionKinded__KeyAssembler) AssignString(k string) error {
  3273  	if ka.state != maState_midKey {
  3274  		panic("misuse: KeyAssembler held beyond its valid lifetime")
  3275  	}
  3276  	if ka.ca != 0 {
  3277  		return schema.ErrNotUnionStructure{TypeName: "gendemo.UnionKinded", Detail: "cannot add another entry -- a union can only contain one thing!"}
  3278  	}
  3279  	switch k {
  3280  	case "Foo":
  3281  		ka.ca = 1
  3282  		ka.w.tag = 1
  3283  		ka.state = maState_expectValue
  3284  		return nil
  3285  	case "Bar":
  3286  		ka.ca = 2
  3287  		ka.w.tag = 2
  3288  		ka.state = maState_expectValue
  3289  		return nil
  3290  	case "Baz":
  3291  		ka.ca = 3
  3292  		ka.w.tag = 3
  3293  		ka.state = maState_expectValue
  3294  		return nil
  3295  	}
  3296  	return schema.ErrInvalidKey{TypeName: "gendemo.UnionKinded", Key: &_String{k}} // TODO: error quality: ErrInvalidUnionDiscriminant ?
  3297  }
  3298  func (_UnionKinded__KeyAssembler) AssignBytes([]byte) error {
  3299  	return mixins.StringAssembler{TypeName: "gendemo.UnionKinded.KeyAssembler"}.AssignBytes(nil)
  3300  }
  3301  func (_UnionKinded__KeyAssembler) AssignLink(datamodel.Link) error {
  3302  	return mixins.StringAssembler{TypeName: "gendemo.UnionKinded.KeyAssembler"}.AssignLink(nil)
  3303  }
  3304  func (ka *_UnionKinded__KeyAssembler) AssignNode(v datamodel.Node) error {
  3305  	if v2, err := v.AsString(); err != nil {
  3306  		return err
  3307  	} else {
  3308  		return ka.AssignString(v2)
  3309  	}
  3310  }
  3311  func (_UnionKinded__KeyAssembler) Prototype() datamodel.NodePrototype {
  3312  	return _String__Prototype{}
  3313  }
  3314  func (UnionKinded) Type() schema.Type {
  3315  	return nil /*TODO:typelit*/
  3316  }
  3317  func (n UnionKinded) Representation() datamodel.Node {
  3318  	return (*_UnionKinded__Repr)(n)
  3319  }
  3320  
  3321  type _UnionKinded__Repr _UnionKinded
  3322  
  3323  var _ datamodel.Node = &_UnionKinded__Repr{}
  3324  
  3325  func (n *_UnionKinded__Repr) Kind() datamodel.Kind {
  3326  	switch n.tag {
  3327  	case 1:
  3328  		return datamodel.Kind_Int
  3329  	case 2:
  3330  		return datamodel.Kind_Bool
  3331  	case 3:
  3332  		return datamodel.Kind_String
  3333  	default:
  3334  		panic("unreachable")
  3335  	}
  3336  }
  3337  func (n *_UnionKinded__Repr) LookupByString(key string) (datamodel.Node, error) {
  3338  	return nil, datamodel.ErrWrongKind{TypeName: "gendemo.UnionKinded.Repr", MethodName: "LookupByString", AppropriateKind: datamodel.KindSet_JustMap, ActualKind: n.Kind()}
  3339  }
  3340  func (n *_UnionKinded__Repr) LookupByNode(key datamodel.Node) (datamodel.Node, error) {
  3341  	return nil, datamodel.ErrWrongKind{TypeName: "gendemo.UnionKinded.Repr", MethodName: "LookupByNode", AppropriateKind: datamodel.KindSet_Recursive, ActualKind: n.Kind()}
  3342  }
  3343  func (n *_UnionKinded__Repr) LookupByIndex(idx int64) (datamodel.Node, error) {
  3344  	return nil, datamodel.ErrWrongKind{TypeName: "gendemo.UnionKinded.Repr", MethodName: "LookupByIndex", AppropriateKind: datamodel.KindSet_JustList, ActualKind: n.Kind()}
  3345  }
  3346  func (n *_UnionKinded__Repr) LookupBySegment(seg datamodel.PathSegment) (datamodel.Node, error) {
  3347  	return nil, datamodel.ErrWrongKind{TypeName: "gendemo.UnionKinded.Repr", MethodName: "LookupBySegment", AppropriateKind: datamodel.KindSet_Recursive, ActualKind: n.Kind()}
  3348  }
  3349  func (n *_UnionKinded__Repr) MapIterator() datamodel.MapIterator {
  3350  	return nil
  3351  }
  3352  func (n *_UnionKinded__Repr) ListIterator() datamodel.ListIterator {
  3353  	return nil
  3354  }
  3355  func (n *_UnionKinded__Repr) Length() int64 {
  3356  	return -1
  3357  }
  3358  func (n *_UnionKinded__Repr) IsAbsent() bool {
  3359  	return false
  3360  }
  3361  func (n *_UnionKinded__Repr) IsNull() bool {
  3362  	return false
  3363  }
  3364  func (n *_UnionKinded__Repr) AsBool() (bool, error) {
  3365  	switch n.tag {
  3366  	case 2:
  3367  		return n.x2.Representation().AsBool()
  3368  	default:
  3369  		return false, datamodel.ErrWrongKind{TypeName: "gendemo.UnionKinded.Repr", MethodName: "AsBool", AppropriateKind: datamodel.KindSet_JustBool, ActualKind: n.Kind()}
  3370  	}
  3371  }
  3372  func (n *_UnionKinded__Repr) AsInt() (int64, error) {
  3373  	switch n.tag {
  3374  	case 1:
  3375  		return n.x1.Representation().AsInt()
  3376  	default:
  3377  		return 0, datamodel.ErrWrongKind{TypeName: "gendemo.UnionKinded.Repr", MethodName: "AsInt", AppropriateKind: datamodel.KindSet_JustInt, ActualKind: n.Kind()}
  3378  	}
  3379  }
  3380  func (n *_UnionKinded__Repr) AsFloat() (float64, error) {
  3381  	return 0, datamodel.ErrWrongKind{TypeName: "gendemo.UnionKinded.Repr", MethodName: "AsFloat", AppropriateKind: datamodel.KindSet_JustFloat, ActualKind: n.Kind()}
  3382  }
  3383  func (n *_UnionKinded__Repr) AsString() (string, error) {
  3384  	switch n.tag {
  3385  	case 3:
  3386  		return n.x3.Representation().AsString()
  3387  	default:
  3388  		return "", datamodel.ErrWrongKind{TypeName: "gendemo.UnionKinded.Repr", MethodName: "AsString", AppropriateKind: datamodel.KindSet_JustString, ActualKind: n.Kind()}
  3389  	}
  3390  }
  3391  func (n *_UnionKinded__Repr) AsBytes() ([]byte, error) {
  3392  	return nil, datamodel.ErrWrongKind{TypeName: "gendemo.UnionKinded.Repr", MethodName: "AsBytes", AppropriateKind: datamodel.KindSet_JustBytes, ActualKind: n.Kind()}
  3393  }
  3394  func (n *_UnionKinded__Repr) AsLink() (datamodel.Link, error) {
  3395  	return nil, datamodel.ErrWrongKind{TypeName: "gendemo.UnionKinded.Repr", MethodName: "AsLink", AppropriateKind: datamodel.KindSet_JustLink, ActualKind: n.Kind()}
  3396  }
  3397  func (_UnionKinded__Repr) Prototype() datamodel.NodePrototype {
  3398  	return _UnionKinded__ReprPrototype{}
  3399  }
  3400  
  3401  type _UnionKinded__ReprPrototype struct{}
  3402  
  3403  func (_UnionKinded__ReprPrototype) NewBuilder() datamodel.NodeBuilder {
  3404  	var nb _UnionKinded__ReprBuilder
  3405  	nb.Reset()
  3406  	return &nb
  3407  }
  3408  
  3409  type _UnionKinded__ReprBuilder struct {
  3410  	_UnionKinded__ReprAssembler
  3411  }
  3412  
  3413  func (nb *_UnionKinded__ReprBuilder) Build() datamodel.Node {
  3414  	if *nb.m != schema.Maybe_Value {
  3415  		panic("invalid state: cannot call Build on an assembler that's not finished")
  3416  	}
  3417  	return nb.w
  3418  }
  3419  func (nb *_UnionKinded__ReprBuilder) Reset() {
  3420  	var w _UnionKinded
  3421  	var m schema.Maybe
  3422  	*nb = _UnionKinded__ReprBuilder{_UnionKinded__ReprAssembler{w: &w, m: &m}}
  3423  }
  3424  
  3425  type _UnionKinded__ReprAssembler struct {
  3426  	w   *_UnionKinded
  3427  	m   *schema.Maybe
  3428  	ca1 _Foo__ReprAssembler
  3429  	ca2 _Bar__ReprAssembler
  3430  	ca3 _Baz__ReprAssembler
  3431  	ca  uint
  3432  }
  3433  
  3434  func (na *_UnionKinded__ReprAssembler) reset() {
  3435  	switch na.ca {
  3436  	case 0:
  3437  		return
  3438  	case 1:
  3439  		na.ca1.reset()
  3440  	case 2:
  3441  		na.ca2.reset()
  3442  	case 3:
  3443  		na.ca3.reset()
  3444  	default:
  3445  		panic("unreachable")
  3446  	}
  3447  	na.ca = 0
  3448  }
  3449  func (na *_UnionKinded__ReprAssembler) BeginMap(sizeHint int64) (datamodel.MapAssembler, error) {
  3450  	switch *na.m {
  3451  	case schema.Maybe_Value, schema.Maybe_Null:
  3452  		panic("invalid state: cannot assign into assembler that's already finished")
  3453  	case midvalue:
  3454  		panic("invalid state: cannot assign into assembler that's already working on a larger structure!")
  3455  	}
  3456  	return nil, schema.ErrNotUnionStructure{TypeName: "gendemo.UnionKinded.Repr", Detail: "BeginMap called but is not valid for any of the kinds that are valid members of this union"}
  3457  }
  3458  func (na *_UnionKinded__ReprAssembler) BeginList(sizeHint int64) (datamodel.ListAssembler, error) {
  3459  	switch *na.m {
  3460  	case schema.Maybe_Value, schema.Maybe_Null:
  3461  		panic("invalid state: cannot assign into assembler that's already finished")
  3462  	case midvalue:
  3463  		panic("invalid state: cannot assign into assembler that's already working on a larger structure!")
  3464  	}
  3465  	return nil, schema.ErrNotUnionStructure{TypeName: "gendemo.UnionKinded.Repr", Detail: "BeginList called but is not valid for any of the kinds that are valid members of this union"}
  3466  }
  3467  func (na *_UnionKinded__ReprAssembler) AssignNull() error {
  3468  	switch *na.m {
  3469  	case schema.Maybe_Value, schema.Maybe_Null:
  3470  		panic("invalid state: cannot assign into assembler that's already finished")
  3471  	case midvalue:
  3472  		panic("invalid state: cannot assign into assembler that's already working on a larger structure!")
  3473  	}
  3474  	return schema.ErrNotUnionStructure{TypeName: "gendemo.UnionKinded.Repr", Detail: "AssignNull called but is not valid for any of the kinds that are valid members of this union"}
  3475  }
  3476  func (na *_UnionKinded__ReprAssembler) AssignBool(v bool) error {
  3477  	switch *na.m {
  3478  	case schema.Maybe_Value, schema.Maybe_Null:
  3479  		panic("invalid state: cannot assign into assembler that's already finished")
  3480  	case midvalue:
  3481  		panic("invalid state: cannot assign into assembler that's already working on a larger structure!")
  3482  	}
  3483  	if na.w == nil {
  3484  		na.w = &_UnionKinded{}
  3485  	}
  3486  	na.ca = 2
  3487  	na.w.tag = 2
  3488  	na.ca2.w = &na.w.x2
  3489  	na.ca2.m = na.m
  3490  	return na.ca2.AssignBool(v)
  3491  }
  3492  func (na *_UnionKinded__ReprAssembler) AssignInt(v int64) error {
  3493  	switch *na.m {
  3494  	case schema.Maybe_Value, schema.Maybe_Null:
  3495  		panic("invalid state: cannot assign into assembler that's already finished")
  3496  	case midvalue:
  3497  		panic("invalid state: cannot assign into assembler that's already working on a larger structure!")
  3498  	}
  3499  	if na.w == nil {
  3500  		na.w = &_UnionKinded{}
  3501  	}
  3502  	na.ca = 1
  3503  	na.w.tag = 1
  3504  	na.ca1.w = &na.w.x1
  3505  	na.ca1.m = na.m
  3506  	return na.ca1.AssignInt(v)
  3507  }
  3508  func (na *_UnionKinded__ReprAssembler) AssignFloat(v float64) error {
  3509  	switch *na.m {
  3510  	case schema.Maybe_Value, schema.Maybe_Null:
  3511  		panic("invalid state: cannot assign into assembler that's already finished")
  3512  	case midvalue:
  3513  		panic("invalid state: cannot assign into assembler that's already working on a larger structure!")
  3514  	}
  3515  	return schema.ErrNotUnionStructure{TypeName: "gendemo.UnionKinded.Repr", Detail: "AssignFloat called but is not valid for any of the kinds that are valid members of this union"}
  3516  }
  3517  func (na *_UnionKinded__ReprAssembler) AssignString(v string) error {
  3518  	switch *na.m {
  3519  	case schema.Maybe_Value, schema.Maybe_Null:
  3520  		panic("invalid state: cannot assign into assembler that's already finished")
  3521  	case midvalue:
  3522  		panic("invalid state: cannot assign into assembler that's already working on a larger structure!")
  3523  	}
  3524  	if na.w == nil {
  3525  		na.w = &_UnionKinded{}
  3526  	}
  3527  	na.ca = 3
  3528  	na.w.tag = 3
  3529  	na.ca3.w = &na.w.x3
  3530  	na.ca3.m = na.m
  3531  	return na.ca3.AssignString(v)
  3532  }
  3533  func (na *_UnionKinded__ReprAssembler) AssignBytes(v []byte) error {
  3534  	switch *na.m {
  3535  	case schema.Maybe_Value, schema.Maybe_Null:
  3536  		panic("invalid state: cannot assign into assembler that's already finished")
  3537  	case midvalue:
  3538  		panic("invalid state: cannot assign into assembler that's already working on a larger structure!")
  3539  	}
  3540  	return schema.ErrNotUnionStructure{TypeName: "gendemo.UnionKinded.Repr", Detail: "AssignBytes called but is not valid for any of the kinds that are valid members of this union"}
  3541  }
  3542  func (na *_UnionKinded__ReprAssembler) AssignLink(v datamodel.Link) error {
  3543  	switch *na.m {
  3544  	case schema.Maybe_Value, schema.Maybe_Null:
  3545  		panic("invalid state: cannot assign into assembler that's already finished")
  3546  	case midvalue:
  3547  		panic("invalid state: cannot assign into assembler that's already working on a larger structure!")
  3548  	}
  3549  	return schema.ErrNotUnionStructure{TypeName: "gendemo.UnionKinded.Repr", Detail: "AssignLink called but is not valid for any of the kinds that are valid members of this union"}
  3550  }
  3551  func (na *_UnionKinded__ReprAssembler) AssignNode(v datamodel.Node) error {
  3552  	if v.IsNull() {
  3553  		return na.AssignNull()
  3554  	}
  3555  	if v2, ok := v.(*_UnionKinded); ok {
  3556  		switch *na.m {
  3557  		case schema.Maybe_Value, schema.Maybe_Null:
  3558  			panic("invalid state: cannot assign into assembler that's already finished")
  3559  		case midvalue:
  3560  			panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!")
  3561  		}
  3562  		if na.w == nil {
  3563  			na.w = v2
  3564  			*na.m = schema.Maybe_Value
  3565  			return nil
  3566  		}
  3567  		*na.w = *v2
  3568  		*na.m = schema.Maybe_Value
  3569  		return nil
  3570  	}
  3571  	switch v.Kind() {
  3572  	case datamodel.Kind_Bool:
  3573  		v2, _ := v.AsBool()
  3574  		return na.AssignBool(v2)
  3575  	case datamodel.Kind_Int:
  3576  		v2, _ := v.AsInt()
  3577  		return na.AssignInt(v2)
  3578  	case datamodel.Kind_Float:
  3579  		v2, _ := v.AsFloat()
  3580  		return na.AssignFloat(v2)
  3581  	case datamodel.Kind_String:
  3582  		v2, _ := v.AsString()
  3583  		return na.AssignString(v2)
  3584  	case datamodel.Kind_Bytes:
  3585  		v2, _ := v.AsBytes()
  3586  		return na.AssignBytes(v2)
  3587  	case datamodel.Kind_Map:
  3588  		na, err := na.BeginMap(v.Length())
  3589  		if err != nil {
  3590  			return err
  3591  		}
  3592  		itr := v.MapIterator()
  3593  		for !itr.Done() {
  3594  			k, v, err := itr.Next()
  3595  			if err != nil {
  3596  				return err
  3597  			}
  3598  			if err := na.AssembleKey().AssignNode(k); err != nil {
  3599  				return err
  3600  			}
  3601  			if err := na.AssembleValue().AssignNode(v); err != nil {
  3602  				return err
  3603  			}
  3604  		}
  3605  		return na.Finish()
  3606  	case datamodel.Kind_List:
  3607  		na, err := na.BeginList(v.Length())
  3608  		if err != nil {
  3609  			return err
  3610  		}
  3611  		itr := v.ListIterator()
  3612  		for !itr.Done() {
  3613  			_, v, err := itr.Next()
  3614  			if err != nil {
  3615  				return err
  3616  			}
  3617  			if err := na.AssembleValue().AssignNode(v); err != nil {
  3618  				return err
  3619  			}
  3620  		}
  3621  		return na.Finish()
  3622  	case datamodel.Kind_Link:
  3623  		v2, _ := v.AsLink()
  3624  		return na.AssignLink(v2)
  3625  	default:
  3626  		panic("unreachable")
  3627  	}
  3628  }
  3629  func (na *_UnionKinded__ReprAssembler) Prototype() datamodel.NodePrototype {
  3630  	return _UnionKinded__ReprPrototype{}
  3631  }