package gendemo // Code generated by go-ld-prime gengo. DO NOT EDIT. import ( ld "gitlab.dms3.io/ld/go-ld-prime" "gitlab.dms3.io/ld/go-ld-prime/node/mixins" "gitlab.dms3.io/ld/go-ld-prime/schema" ) func (n Int) Int() int64 { return n.x } func (_Int__Prototype) FromInt(v int64) (Int, error) { n := _Int{v} return &n, nil } type _Int__Maybe struct { m schema.Maybe v _Int } type MaybeInt = *_Int__Maybe func (m MaybeInt) IsNull() bool { return m.m == schema.Maybe_Null } func (m MaybeInt) IsAbsent() bool { return m.m == schema.Maybe_Absent } func (m MaybeInt) Exists() bool { return m.m == schema.Maybe_Value } func (m MaybeInt) AsNode() ld.Node { switch m.m { case schema.Maybe_Absent: return ld.Absent case schema.Maybe_Null: return ld.Null case schema.Maybe_Value: return &m.v default: panic("unreachable") } } func (m MaybeInt) Must() Int { if !m.Exists() { panic("unbox of a maybe rejected") } return &m.v } var _ ld.Node = (Int)(&_Int{}) var _ schema.TypedNode = (Int)(&_Int{}) func (Int) Kind() ld.Kind { return ld.Kind_Int } func (Int) LookupByString(string) (ld.Node, error) { return mixins.Int{TypeName: "gendemo.Int"}.LookupByString("") } func (Int) LookupByNode(ld.Node) (ld.Node, error) { return mixins.Int{TypeName: "gendemo.Int"}.LookupByNode(nil) } func (Int) LookupByIndex(idx int64) (ld.Node, error) { return mixins.Int{TypeName: "gendemo.Int"}.LookupByIndex(0) } func (Int) LookupBySegment(seg ld.PathSegment) (ld.Node, error) { return mixins.Int{TypeName: "gendemo.Int"}.LookupBySegment(seg) } func (Int) MapIterator() ld.MapIterator { return nil } func (Int) ListIterator() ld.ListIterator { return nil } func (Int) Length() int64 { return -1 } func (Int) IsAbsent() bool { return false } func (Int) IsNull() bool { return false } func (Int) AsBool() (bool, error) { return mixins.Int{TypeName: "gendemo.Int"}.AsBool() } func (n Int) AsInt() (int64, error) { return n.x, nil } func (Int) AsFloat() (float64, error) { return mixins.Int{TypeName: "gendemo.Int"}.AsFloat() } func (Int) AsString() (string, error) { return mixins.Int{TypeName: "gendemo.Int"}.AsString() } func (Int) AsBytes() ([]byte, error) { return mixins.Int{TypeName: "gendemo.Int"}.AsBytes() } func (Int) AsLink() (ld.Link, error) { return mixins.Int{TypeName: "gendemo.Int"}.AsLink() } func (Int) Prototype() ld.NodePrototype { return _Int__Prototype{} } type _Int__Prototype struct{} func (_Int__Prototype) NewBuilder() ld.NodeBuilder { var nb _Int__Builder nb.Reset() return &nb } type _Int__Builder struct { _Int__Assembler } func (nb *_Int__Builder) Build() ld.Node { if *nb.m != schema.Maybe_Value { panic("invalid state: cannot call Build on an assembler that's not finished") } return nb.w } func (nb *_Int__Builder) Reset() { var w _Int var m schema.Maybe *nb = _Int__Builder{_Int__Assembler{w: &w, m: &m}} } type _Int__Assembler struct { w *_Int m *schema.Maybe } func (na *_Int__Assembler) reset() {} func (_Int__Assembler) BeginMap(sizeHint int64) (ld.MapAssembler, error) { return mixins.IntAssembler{TypeName: "gendemo.Int"}.BeginMap(0) } func (_Int__Assembler) BeginList(sizeHint int64) (ld.ListAssembler, error) { return mixins.IntAssembler{TypeName: "gendemo.Int"}.BeginList(0) } func (na *_Int__Assembler) AssignNull() error { switch *na.m { case allowNull: *na.m = schema.Maybe_Null return nil case schema.Maybe_Absent: return mixins.IntAssembler{TypeName: "gendemo.Int"}.AssignNull() case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") } panic("unreachable") } func (_Int__Assembler) AssignBool(bool) error { return mixins.IntAssembler{TypeName: "gendemo.Int"}.AssignBool(false) } func (na *_Int__Assembler) AssignInt(v int64) error { switch *na.m { case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") } na.w.x = v *na.m = schema.Maybe_Value return nil } func (_Int__Assembler) AssignFloat(float64) error { return mixins.IntAssembler{TypeName: "gendemo.Int"}.AssignFloat(0) } func (_Int__Assembler) AssignString(string) error { return mixins.IntAssembler{TypeName: "gendemo.Int"}.AssignString("") } func (_Int__Assembler) AssignBytes([]byte) error { return mixins.IntAssembler{TypeName: "gendemo.Int"}.AssignBytes(nil) } func (_Int__Assembler) AssignLink(ld.Link) error { return mixins.IntAssembler{TypeName: "gendemo.Int"}.AssignLink(nil) } func (na *_Int__Assembler) AssignNode(v ld.Node) error { if v.IsNull() { return na.AssignNull() } if v2, ok := v.(*_Int); ok { switch *na.m { case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") } *na.w = *v2 *na.m = schema.Maybe_Value return nil } if v2, err := v.AsInt(); err != nil { return err } else { return na.AssignInt(v2) } } func (_Int__Assembler) Prototype() ld.NodePrototype { return _Int__Prototype{} } func (Int) Type() schema.Type { return nil /*TODO:typelit*/ } func (n Int) Representation() ld.Node { return (*_Int__Repr)(n) } type _Int__Repr = _Int var _ ld.Node = &_Int__Repr{} type _Int__ReprPrototype = _Int__Prototype type _Int__ReprAssembler = _Int__Assembler func (n *_Map__String__Msg3) Lookup(k String) Msg3 { v, exists := n.m[*k] if !exists { return nil } return v } func (n *_Map__String__Msg3) LookupMaybe(k String) MaybeMsg3 { v, exists := n.m[*k] if !exists { return &_Map__String__Msg3__valueAbsent } return &_Msg3__Maybe{ m: schema.Maybe_Value, v: v, } } var _Map__String__Msg3__valueAbsent = _Msg3__Maybe{m: schema.Maybe_Absent} func (n Map__String__Msg3) Iterator() *Map__String__Msg3__Itr { return &Map__String__Msg3__Itr{n, 0} } type Map__String__Msg3__Itr struct { n Map__String__Msg3 idx int } func (itr *Map__String__Msg3__Itr) Next() (k String, v Msg3) { if itr.idx >= len(itr.n.t) { return nil, nil } x := &itr.n.t[itr.idx] k = &x.k v = &x.v itr.idx++ return } func (itr *Map__String__Msg3__Itr) Done() bool { return itr.idx >= len(itr.n.t) } type _Map__String__Msg3__Maybe struct { m schema.Maybe v _Map__String__Msg3 } type MaybeMap__String__Msg3 = *_Map__String__Msg3__Maybe func (m MaybeMap__String__Msg3) IsNull() bool { return m.m == schema.Maybe_Null } func (m MaybeMap__String__Msg3) IsAbsent() bool { return m.m == schema.Maybe_Absent } func (m MaybeMap__String__Msg3) Exists() bool { return m.m == schema.Maybe_Value } func (m MaybeMap__String__Msg3) AsNode() ld.Node { switch m.m { case schema.Maybe_Absent: return ld.Absent case schema.Maybe_Null: return ld.Null case schema.Maybe_Value: return &m.v default: panic("unreachable") } } func (m MaybeMap__String__Msg3) Must() Map__String__Msg3 { if !m.Exists() { panic("unbox of a maybe rejected") } return &m.v } var _ ld.Node = (Map__String__Msg3)(&_Map__String__Msg3{}) var _ schema.TypedNode = (Map__String__Msg3)(&_Map__String__Msg3{}) func (Map__String__Msg3) Kind() ld.Kind { return ld.Kind_Map } func (n Map__String__Msg3) LookupByString(k string) (ld.Node, error) { var k2 _String if err := (_String__Prototype{}).fromString(&k2, k); err != nil { return nil, err // TODO wrap in some kind of ErrInvalidKey } v, exists := n.m[k2] if !exists { return nil, ld.ErrNotExists{Segment: ld.PathSegmentOfString(k)} } return v, nil } func (n Map__String__Msg3) LookupByNode(k ld.Node) (ld.Node, error) { k2, ok := k.(String) if !ok { panic("todo invalid key type error") // 'ld.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 } v, exists := n.m[*k2] if !exists { return nil, ld.ErrNotExists{Segment: ld.PathSegmentOfString(k2.String())} } return v, nil } func (Map__String__Msg3) LookupByIndex(idx int64) (ld.Node, error) { return mixins.Map{TypeName: "gendemo.Map__String__Msg3"}.LookupByIndex(0) } func (n Map__String__Msg3) LookupBySegment(seg ld.PathSegment) (ld.Node, error) { return n.LookupByString(seg.String()) } func (n Map__String__Msg3) MapIterator() ld.MapIterator { return &_Map__String__Msg3__MapItr{n, 0} } type _Map__String__Msg3__MapItr struct { n Map__String__Msg3 idx int } func (itr *_Map__String__Msg3__MapItr) Next() (k ld.Node, v ld.Node, _ error) { if itr.idx >= len(itr.n.t) { return nil, nil, ld.ErrIteratorOverread{} } x := &itr.n.t[itr.idx] k = &x.k v = &x.v itr.idx++ return } func (itr *_Map__String__Msg3__MapItr) Done() bool { return itr.idx >= len(itr.n.t) } func (Map__String__Msg3) ListIterator() ld.ListIterator { return nil } func (n Map__String__Msg3) Length() int64 { return int64(len(n.t)) } func (Map__String__Msg3) IsAbsent() bool { return false } func (Map__String__Msg3) IsNull() bool { return false } func (Map__String__Msg3) AsBool() (bool, error) { return mixins.Map{TypeName: "gendemo.Map__String__Msg3"}.AsBool() } func (Map__String__Msg3) AsInt() (int64, error) { return mixins.Map{TypeName: "gendemo.Map__String__Msg3"}.AsInt() } func (Map__String__Msg3) AsFloat() (float64, error) { return mixins.Map{TypeName: "gendemo.Map__String__Msg3"}.AsFloat() } func (Map__String__Msg3) AsString() (string, error) { return mixins.Map{TypeName: "gendemo.Map__String__Msg3"}.AsString() } func (Map__String__Msg3) AsBytes() ([]byte, error) { return mixins.Map{TypeName: "gendemo.Map__String__Msg3"}.AsBytes() } func (Map__String__Msg3) AsLink() (ld.Link, error) { return mixins.Map{TypeName: "gendemo.Map__String__Msg3"}.AsLink() } func (Map__String__Msg3) Prototype() ld.NodePrototype { return _Map__String__Msg3__Prototype{} } type _Map__String__Msg3__Prototype struct{} func (_Map__String__Msg3__Prototype) NewBuilder() ld.NodeBuilder { var nb _Map__String__Msg3__Builder nb.Reset() return &nb } type _Map__String__Msg3__Builder struct { _Map__String__Msg3__Assembler } func (nb *_Map__String__Msg3__Builder) Build() ld.Node { if *nb.m != schema.Maybe_Value { panic("invalid state: cannot call Build on an assembler that's not finished") } return nb.w } func (nb *_Map__String__Msg3__Builder) Reset() { var w _Map__String__Msg3 var m schema.Maybe *nb = _Map__String__Msg3__Builder{_Map__String__Msg3__Assembler{w: &w, m: &m}} } type _Map__String__Msg3__Assembler struct { w *_Map__String__Msg3 m *schema.Maybe state maState cm schema.Maybe ka _String__Assembler va _Msg3__Assembler } func (na *_Map__String__Msg3__Assembler) reset() { na.state = maState_initial na.ka.reset() na.va.reset() } func (na *_Map__String__Msg3__Assembler) BeginMap(sizeHint int64) (ld.MapAssembler, error) { switch *na.m { case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") case midvalue: panic("invalid state: it makes no sense to 'begin' twice on the same assembler!") } *na.m = midvalue if sizeHint < 0 { sizeHint = 0 } na.w.m = make(map[_String]*_Msg3, sizeHint) na.w.t = make([]_Map__String__Msg3__entry, 0, sizeHint) return na, nil } func (_Map__String__Msg3__Assembler) BeginList(sizeHint int64) (ld.ListAssembler, error) { return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.BeginList(0) } func (na *_Map__String__Msg3__Assembler) AssignNull() error { switch *na.m { case allowNull: *na.m = schema.Maybe_Null return nil case schema.Maybe_Absent: return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.AssignNull() case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") case midvalue: panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!") } panic("unreachable") } func (_Map__String__Msg3__Assembler) AssignBool(bool) error { return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.AssignBool(false) } func (_Map__String__Msg3__Assembler) AssignInt(int64) error { return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.AssignInt(0) } func (_Map__String__Msg3__Assembler) AssignFloat(float64) error { return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.AssignFloat(0) } func (_Map__String__Msg3__Assembler) AssignString(string) error { return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.AssignString("") } func (_Map__String__Msg3__Assembler) AssignBytes([]byte) error { return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.AssignBytes(nil) } func (_Map__String__Msg3__Assembler) AssignLink(ld.Link) error { return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3"}.AssignLink(nil) } func (na *_Map__String__Msg3__Assembler) AssignNode(v ld.Node) error { if v.IsNull() { return na.AssignNull() } if v2, ok := v.(*_Map__String__Msg3); ok { switch *na.m { case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") case midvalue: panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!") } *na.w = *v2 *na.m = schema.Maybe_Value return nil } if v.Kind() != ld.Kind_Map { return ld.ErrWrongKind{TypeName: "gendemo.Map__String__Msg3", MethodName: "AssignNode", AppropriateKind: ld.KindSet_JustMap, ActualKind: v.Kind()} } itr := v.MapIterator() for !itr.Done() { k, v, err := itr.Next() if err != nil { return err } if err := na.AssembleKey().AssignNode(k); err != nil { return err } if err := na.AssembleValue().AssignNode(v); err != nil { return err } } return na.Finish() } func (_Map__String__Msg3__Assembler) Prototype() ld.NodePrototype { return _Map__String__Msg3__Prototype{} } func (ma *_Map__String__Msg3__Assembler) keyFinishTidy() bool { switch ma.cm { case schema.Maybe_Value: ma.ka.w = nil tz := &ma.w.t[len(ma.w.t)-1] ma.cm = schema.Maybe_Absent ma.state = maState_expectValue ma.w.m[tz.k] = &tz.v ma.va.w = &tz.v ma.va.m = &ma.cm ma.ka.reset() return true default: return false } } func (ma *_Map__String__Msg3__Assembler) valueFinishTidy() bool { switch ma.cm { case schema.Maybe_Value: ma.va.w = nil ma.cm = schema.Maybe_Absent ma.state = maState_initial ma.va.reset() return true default: return false } } func (ma *_Map__String__Msg3__Assembler) AssembleEntry(k string) (ld.NodeAssembler, error) { switch ma.state { case maState_initial: // carry on case maState_midKey: panic("invalid state: AssembleEntry cannot be called when in the middle of assembling another key") case maState_expectValue: panic("invalid state: AssembleEntry cannot be called when expecting start of value assembly") case maState_midValue: if !ma.valueFinishTidy() { panic("invalid state: AssembleEntry cannot be called when in the middle of assembling a value") } // if tidy success: carry on case maState_finished: panic("invalid state: AssembleEntry cannot be called on an assembler that's already finished") } var k2 _String if err := (_String__Prototype{}).fromString(&k2, k); err != nil { return nil, err // TODO wrap in some kind of ErrInvalidKey } if _, exists := ma.w.m[k2]; exists { return nil, ld.ErrRepeatedMapKey{Key: &k2} } ma.w.t = append(ma.w.t, _Map__String__Msg3__entry{k: k2}) tz := &ma.w.t[len(ma.w.t)-1] ma.state = maState_midValue ma.w.m[k2] = &tz.v ma.va.w = &tz.v ma.va.m = &ma.cm return &ma.va, nil } func (ma *_Map__String__Msg3__Assembler) AssembleKey() ld.NodeAssembler { switch ma.state { case maState_initial: // carry on case maState_midKey: panic("invalid state: AssembleKey cannot be called when in the middle of assembling another key") case maState_expectValue: panic("invalid state: AssembleKey cannot be called when expecting start of value assembly") case maState_midValue: if !ma.valueFinishTidy() { panic("invalid state: AssembleKey cannot be called when in the middle of assembling a value") } // if tidy success: carry on case maState_finished: panic("invalid state: AssembleKey cannot be called on an assembler that's already finished") } ma.w.t = append(ma.w.t, _Map__String__Msg3__entry{}) ma.state = maState_midKey ma.ka.m = &ma.cm ma.ka.w = &ma.w.t[len(ma.w.t)-1].k return &ma.ka } func (ma *_Map__String__Msg3__Assembler) AssembleValue() ld.NodeAssembler { switch ma.state { case maState_initial: panic("invalid state: AssembleValue cannot be called when no key is primed") case maState_midKey: if !ma.keyFinishTidy() { panic("invalid state: AssembleValue cannot be called when in the middle of assembling a key") } // if tidy success: carry on case maState_expectValue: // carry on case maState_midValue: panic("invalid state: AssembleValue cannot be called when in the middle of assembling another value") case maState_finished: panic("invalid state: AssembleValue cannot be called on an assembler that's already finished") } ma.state = maState_midValue return &ma.va } func (ma *_Map__String__Msg3__Assembler) Finish() error { switch ma.state { case maState_initial: // carry on case maState_midKey: panic("invalid state: Finish cannot be called when in the middle of assembling a key") case maState_expectValue: panic("invalid state: Finish cannot be called when expecting start of value assembly") case maState_midValue: if !ma.valueFinishTidy() { panic("invalid state: Finish cannot be called when in the middle of assembling a value") } // if tidy success: carry on case maState_finished: panic("invalid state: Finish cannot be called on an assembler that's already finished") } ma.state = maState_finished *ma.m = schema.Maybe_Value return nil } func (ma *_Map__String__Msg3__Assembler) KeyPrototype() ld.NodePrototype { return _String__Prototype{} } func (ma *_Map__String__Msg3__Assembler) ValuePrototype(_ string) ld.NodePrototype { return _Msg3__Prototype{} } func (Map__String__Msg3) Type() schema.Type { return nil /*TODO:typelit*/ } func (n Map__String__Msg3) Representation() ld.Node { return (*_Map__String__Msg3__Repr)(n) } type _Map__String__Msg3__Repr _Map__String__Msg3 var _ ld.Node = &_Map__String__Msg3__Repr{} func (_Map__String__Msg3__Repr) Kind() ld.Kind { return ld.Kind_Map } func (nr *_Map__String__Msg3__Repr) LookupByString(k string) (ld.Node, error) { v, err := (Map__String__Msg3)(nr).LookupByString(k) if err != nil || v == ld.Null { return v, err } return v.(Msg3).Representation(), nil } func (nr *_Map__String__Msg3__Repr) LookupByNode(k ld.Node) (ld.Node, error) { v, err := (Map__String__Msg3)(nr).LookupByNode(k) if err != nil || v == ld.Null { return v, err } return v.(Msg3).Representation(), nil } func (_Map__String__Msg3__Repr) LookupByIndex(idx int64) (ld.Node, error) { return mixins.Map{TypeName: "gendemo.Map__String__Msg3.Repr"}.LookupByIndex(0) } func (n _Map__String__Msg3__Repr) LookupBySegment(seg ld.PathSegment) (ld.Node, error) { return n.LookupByString(seg.String()) } func (nr *_Map__String__Msg3__Repr) MapIterator() ld.MapIterator { return &_Map__String__Msg3__ReprMapItr{(Map__String__Msg3)(nr), 0} } type _Map__String__Msg3__ReprMapItr _Map__String__Msg3__MapItr func (itr *_Map__String__Msg3__ReprMapItr) Next() (k ld.Node, v ld.Node, err error) { k, v, err = (*_Map__String__Msg3__MapItr)(itr).Next() if err != nil || v == ld.Null { return } return k, v.(Msg3).Representation(), nil } func (itr *_Map__String__Msg3__ReprMapItr) Done() bool { return (*_Map__String__Msg3__MapItr)(itr).Done() } func (_Map__String__Msg3__Repr) ListIterator() ld.ListIterator { return nil } func (rn *_Map__String__Msg3__Repr) Length() int64 { return int64(len(rn.t)) } func (_Map__String__Msg3__Repr) IsAbsent() bool { return false } func (_Map__String__Msg3__Repr) IsNull() bool { return false } func (_Map__String__Msg3__Repr) AsBool() (bool, error) { return mixins.Map{TypeName: "gendemo.Map__String__Msg3.Repr"}.AsBool() } func (_Map__String__Msg3__Repr) AsInt() (int64, error) { return mixins.Map{TypeName: "gendemo.Map__String__Msg3.Repr"}.AsInt() } func (_Map__String__Msg3__Repr) AsFloat() (float64, error) { return mixins.Map{TypeName: "gendemo.Map__String__Msg3.Repr"}.AsFloat() } func (_Map__String__Msg3__Repr) AsString() (string, error) { return mixins.Map{TypeName: "gendemo.Map__String__Msg3.Repr"}.AsString() } func (_Map__String__Msg3__Repr) AsBytes() ([]byte, error) { return mixins.Map{TypeName: "gendemo.Map__String__Msg3.Repr"}.AsBytes() } func (_Map__String__Msg3__Repr) AsLink() (ld.Link, error) { return mixins.Map{TypeName: "gendemo.Map__String__Msg3.Repr"}.AsLink() } func (_Map__String__Msg3__Repr) Prototype() ld.NodePrototype { return _Map__String__Msg3__ReprPrototype{} } type _Map__String__Msg3__ReprPrototype struct{} func (_Map__String__Msg3__ReprPrototype) NewBuilder() ld.NodeBuilder { var nb _Map__String__Msg3__ReprBuilder nb.Reset() return &nb } type _Map__String__Msg3__ReprBuilder struct { _Map__String__Msg3__ReprAssembler } func (nb *_Map__String__Msg3__ReprBuilder) Build() ld.Node { if *nb.m != schema.Maybe_Value { panic("invalid state: cannot call Build on an assembler that's not finished") } return nb.w } func (nb *_Map__String__Msg3__ReprBuilder) Reset() { var w _Map__String__Msg3 var m schema.Maybe *nb = _Map__String__Msg3__ReprBuilder{_Map__String__Msg3__ReprAssembler{w: &w, m: &m}} } type _Map__String__Msg3__ReprAssembler struct { w *_Map__String__Msg3 m *schema.Maybe state maState cm schema.Maybe ka _String__ReprAssembler va _Msg3__ReprAssembler } func (na *_Map__String__Msg3__ReprAssembler) reset() { na.state = maState_initial na.ka.reset() na.va.reset() } func (na *_Map__String__Msg3__ReprAssembler) BeginMap(sizeHint int64) (ld.MapAssembler, error) { switch *na.m { case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") case midvalue: panic("invalid state: it makes no sense to 'begin' twice on the same assembler!") } *na.m = midvalue if sizeHint < 0 { sizeHint = 0 } na.w.m = make(map[_String]*_Msg3, sizeHint) na.w.t = make([]_Map__String__Msg3__entry, 0, sizeHint) return na, nil } func (_Map__String__Msg3__ReprAssembler) BeginList(sizeHint int64) (ld.ListAssembler, error) { return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr"}.BeginList(0) } func (na *_Map__String__Msg3__ReprAssembler) AssignNull() error { switch *na.m { case allowNull: *na.m = schema.Maybe_Null return nil case schema.Maybe_Absent: return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr.Repr"}.AssignNull() case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") case midvalue: panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!") } panic("unreachable") } func (_Map__String__Msg3__ReprAssembler) AssignBool(bool) error { return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr"}.AssignBool(false) } func (_Map__String__Msg3__ReprAssembler) AssignInt(int64) error { return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr"}.AssignInt(0) } func (_Map__String__Msg3__ReprAssembler) AssignFloat(float64) error { return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr"}.AssignFloat(0) } func (_Map__String__Msg3__ReprAssembler) AssignString(string) error { return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr"}.AssignString("") } func (_Map__String__Msg3__ReprAssembler) AssignBytes([]byte) error { return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr"}.AssignBytes(nil) } func (_Map__String__Msg3__ReprAssembler) AssignLink(ld.Link) error { return mixins.MapAssembler{TypeName: "gendemo.Map__String__Msg3.Repr"}.AssignLink(nil) } func (na *_Map__String__Msg3__ReprAssembler) AssignNode(v ld.Node) error { if v.IsNull() { return na.AssignNull() } if v2, ok := v.(*_Map__String__Msg3); ok { switch *na.m { case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") case midvalue: panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!") } *na.w = *v2 *na.m = schema.Maybe_Value return nil } if v.Kind() != ld.Kind_Map { return ld.ErrWrongKind{TypeName: "gendemo.Map__String__Msg3.Repr", MethodName: "AssignNode", AppropriateKind: ld.KindSet_JustMap, ActualKind: v.Kind()} } itr := v.MapIterator() for !itr.Done() { k, v, err := itr.Next() if err != nil { return err } if err := na.AssembleKey().AssignNode(k); err != nil { return err } if err := na.AssembleValue().AssignNode(v); err != nil { return err } } return na.Finish() } func (_Map__String__Msg3__ReprAssembler) Prototype() ld.NodePrototype { return _Map__String__Msg3__ReprPrototype{} } func (ma *_Map__String__Msg3__ReprAssembler) keyFinishTidy() bool { switch ma.cm { case schema.Maybe_Value: ma.ka.w = nil tz := &ma.w.t[len(ma.w.t)-1] ma.cm = schema.Maybe_Absent ma.state = maState_expectValue ma.w.m[tz.k] = &tz.v ma.va.w = &tz.v ma.va.m = &ma.cm ma.ka.reset() return true default: return false } } func (ma *_Map__String__Msg3__ReprAssembler) valueFinishTidy() bool { switch ma.cm { case schema.Maybe_Value: ma.va.w = nil ma.cm = schema.Maybe_Absent ma.state = maState_initial ma.va.reset() return true default: return false } } func (ma *_Map__String__Msg3__ReprAssembler) AssembleEntry(k string) (ld.NodeAssembler, error) { switch ma.state { case maState_initial: // carry on case maState_midKey: panic("invalid state: AssembleEntry cannot be called when in the middle of assembling another key") case maState_expectValue: panic("invalid state: AssembleEntry cannot be called when expecting start of value assembly") case maState_midValue: if !ma.valueFinishTidy() { panic("invalid state: AssembleEntry cannot be called when in the middle of assembling a value") } // if tidy success: carry on case maState_finished: panic("invalid state: AssembleEntry cannot be called on an assembler that's already finished") } var k2 _String if err := (_String__ReprPrototype{}).fromString(&k2, k); err != nil { return nil, err // TODO wrap in some kind of ErrInvalidKey } if _, exists := ma.w.m[k2]; exists { return nil, ld.ErrRepeatedMapKey{Key: &k2} } ma.w.t = append(ma.w.t, _Map__String__Msg3__entry{k: k2}) tz := &ma.w.t[len(ma.w.t)-1] ma.state = maState_midValue ma.w.m[k2] = &tz.v ma.va.w = &tz.v ma.va.m = &ma.cm return &ma.va, nil } func (ma *_Map__String__Msg3__ReprAssembler) AssembleKey() ld.NodeAssembler { switch ma.state { case maState_initial: // carry on case maState_midKey: panic("invalid state: AssembleKey cannot be called when in the middle of assembling another key") case maState_expectValue: panic("invalid state: AssembleKey cannot be called when expecting start of value assembly") case maState_midValue: if !ma.valueFinishTidy() { panic("invalid state: AssembleKey cannot be called when in the middle of assembling a value") } // if tidy success: carry on case maState_finished: panic("invalid state: AssembleKey cannot be called on an assembler that's already finished") } ma.w.t = append(ma.w.t, _Map__String__Msg3__entry{}) ma.state = maState_midKey ma.ka.m = &ma.cm ma.ka.w = &ma.w.t[len(ma.w.t)-1].k return &ma.ka } func (ma *_Map__String__Msg3__ReprAssembler) AssembleValue() ld.NodeAssembler { switch ma.state { case maState_initial: panic("invalid state: AssembleValue cannot be called when no key is primed") case maState_midKey: if !ma.keyFinishTidy() { panic("invalid state: AssembleValue cannot be called when in the middle of assembling a key") } // if tidy success: carry on case maState_expectValue: // carry on case maState_midValue: panic("invalid state: AssembleValue cannot be called when in the middle of assembling another value") case maState_finished: panic("invalid state: AssembleValue cannot be called on an assembler that's already finished") } ma.state = maState_midValue return &ma.va } func (ma *_Map__String__Msg3__ReprAssembler) Finish() error { switch ma.state { case maState_initial: // carry on case maState_midKey: panic("invalid state: Finish cannot be called when in the middle of assembling a key") case maState_expectValue: panic("invalid state: Finish cannot be called when expecting start of value assembly") case maState_midValue: if !ma.valueFinishTidy() { panic("invalid state: Finish cannot be called when in the middle of assembling a value") } // if tidy success: carry on case maState_finished: panic("invalid state: Finish cannot be called on an assembler that's already finished") } ma.state = maState_finished *ma.m = schema.Maybe_Value return nil } func (ma *_Map__String__Msg3__ReprAssembler) KeyPrototype() ld.NodePrototype { return _String__ReprPrototype{} } func (ma *_Map__String__Msg3__ReprAssembler) ValuePrototype(_ string) ld.NodePrototype { return _Msg3__ReprPrototype{} } func (n _Msg3) FieldWhee() Int { return &n.whee } func (n _Msg3) FieldWoot() Int { return &n.woot } func (n _Msg3) FieldWaga() Int { return &n.waga } type _Msg3__Maybe struct { m schema.Maybe v Msg3 } type MaybeMsg3 = *_Msg3__Maybe func (m MaybeMsg3) IsNull() bool { return m.m == schema.Maybe_Null } func (m MaybeMsg3) IsAbsent() bool { return m.m == schema.Maybe_Absent } func (m MaybeMsg3) Exists() bool { return m.m == schema.Maybe_Value } func (m MaybeMsg3) AsNode() ld.Node { switch m.m { case schema.Maybe_Absent: return ld.Absent case schema.Maybe_Null: return ld.Null case schema.Maybe_Value: return m.v default: panic("unreachable") } } func (m MaybeMsg3) Must() Msg3 { if !m.Exists() { panic("unbox of a maybe rejected") } return m.v } var ( fieldName__Msg3_Whee = _String{"whee"} fieldName__Msg3_Woot = _String{"woot"} fieldName__Msg3_Waga = _String{"waga"} ) var _ ld.Node = (Msg3)(&_Msg3{}) var _ schema.TypedNode = (Msg3)(&_Msg3{}) func (Msg3) Kind() ld.Kind { return ld.Kind_Map } func (n Msg3) LookupByString(key string) (ld.Node, error) { switch key { case "whee": return &n.whee, nil case "woot": return &n.woot, nil case "waga": return &n.waga, nil default: return nil, schema.ErrNoSuchField{Type: nil /*TODO*/, Field: ld.PathSegmentOfString(key)} } } func (n Msg3) LookupByNode(key ld.Node) (ld.Node, error) { ks, err := key.AsString() if err != nil { return nil, err } return n.LookupByString(ks) } func (Msg3) LookupByIndex(idx int64) (ld.Node, error) { return mixins.Map{TypeName: "gendemo.Msg3"}.LookupByIndex(0) } func (n Msg3) LookupBySegment(seg ld.PathSegment) (ld.Node, error) { return n.LookupByString(seg.String()) } func (n Msg3) MapIterator() ld.MapIterator { return &_Msg3__MapItr{n, 0} } type _Msg3__MapItr struct { n Msg3 idx int } func (itr *_Msg3__MapItr) Next() (k ld.Node, v ld.Node, _ error) { if itr.idx >= 3 { return nil, nil, ld.ErrIteratorOverread{} } switch itr.idx { case 0: k = &fieldName__Msg3_Whee v = &itr.n.whee case 1: k = &fieldName__Msg3_Woot v = &itr.n.woot case 2: k = &fieldName__Msg3_Waga v = &itr.n.waga default: panic("unreachable") } itr.idx++ return } func (itr *_Msg3__MapItr) Done() bool { return itr.idx >= 3 } func (Msg3) ListIterator() ld.ListIterator { return nil } func (Msg3) Length() int64 { return 3 } func (Msg3) IsAbsent() bool { return false } func (Msg3) IsNull() bool { return false } func (Msg3) AsBool() (bool, error) { return mixins.Map{TypeName: "gendemo.Msg3"}.AsBool() } func (Msg3) AsInt() (int64, error) { return mixins.Map{TypeName: "gendemo.Msg3"}.AsInt() } func (Msg3) AsFloat() (float64, error) { return mixins.Map{TypeName: "gendemo.Msg3"}.AsFloat() } func (Msg3) AsString() (string, error) { return mixins.Map{TypeName: "gendemo.Msg3"}.AsString() } func (Msg3) AsBytes() ([]byte, error) { return mixins.Map{TypeName: "gendemo.Msg3"}.AsBytes() } func (Msg3) AsLink() (ld.Link, error) { return mixins.Map{TypeName: "gendemo.Msg3"}.AsLink() } func (Msg3) Prototype() ld.NodePrototype { return _Msg3__Prototype{} } type _Msg3__Prototype struct{} func (_Msg3__Prototype) NewBuilder() ld.NodeBuilder { var nb _Msg3__Builder nb.Reset() return &nb } type _Msg3__Builder struct { _Msg3__Assembler } func (nb *_Msg3__Builder) Build() ld.Node { if *nb.m != schema.Maybe_Value { panic("invalid state: cannot call Build on an assembler that's not finished") } return nb.w } func (nb *_Msg3__Builder) Reset() { var w _Msg3 var m schema.Maybe *nb = _Msg3__Builder{_Msg3__Assembler{w: &w, m: &m}} } type _Msg3__Assembler struct { w *_Msg3 m *schema.Maybe state maState s int f int cm schema.Maybe ca_whee _Int__Assembler ca_woot _Int__Assembler ca_waga _Int__Assembler } func (na *_Msg3__Assembler) reset() { na.state = maState_initial na.s = 0 na.ca_whee.reset() na.ca_woot.reset() na.ca_waga.reset() } var ( fieldBit__Msg3_Whee = 1 << 0 fieldBit__Msg3_Woot = 1 << 1 fieldBit__Msg3_Waga = 1 << 2 fieldBits__Msg3_sufficient = 0 + 1<<0 + 1<<1 + 1<<2 ) func (na *_Msg3__Assembler) BeginMap(int64) (ld.MapAssembler, error) { switch *na.m { case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") case midvalue: panic("invalid state: it makes no sense to 'begin' twice on the same assembler!") } *na.m = midvalue if na.w == nil { na.w = &_Msg3{} } return na, nil } func (_Msg3__Assembler) BeginList(sizeHint int64) (ld.ListAssembler, error) { return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.BeginList(0) } func (na *_Msg3__Assembler) AssignNull() error { switch *na.m { case allowNull: *na.m = schema.Maybe_Null return nil case schema.Maybe_Absent: return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.AssignNull() case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") case midvalue: panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!") } panic("unreachable") } func (_Msg3__Assembler) AssignBool(bool) error { return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.AssignBool(false) } func (_Msg3__Assembler) AssignInt(int64) error { return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.AssignInt(0) } func (_Msg3__Assembler) AssignFloat(float64) error { return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.AssignFloat(0) } func (_Msg3__Assembler) AssignString(string) error { return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.AssignString("") } func (_Msg3__Assembler) AssignBytes([]byte) error { return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.AssignBytes(nil) } func (_Msg3__Assembler) AssignLink(ld.Link) error { return mixins.MapAssembler{TypeName: "gendemo.Msg3"}.AssignLink(nil) } func (na *_Msg3__Assembler) AssignNode(v ld.Node) error { if v.IsNull() { return na.AssignNull() } if v2, ok := v.(*_Msg3); ok { switch *na.m { case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") case midvalue: panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!") } if na.w == nil { na.w = v2 *na.m = schema.Maybe_Value return nil } *na.w = *v2 *na.m = schema.Maybe_Value return nil } if v.Kind() != ld.Kind_Map { return ld.ErrWrongKind{TypeName: "gendemo.Msg3", MethodName: "AssignNode", AppropriateKind: ld.KindSet_JustMap, ActualKind: v.Kind()} } itr := v.MapIterator() for !itr.Done() { k, v, err := itr.Next() if err != nil { return err } if err := na.AssembleKey().AssignNode(k); err != nil { return err } if err := na.AssembleValue().AssignNode(v); err != nil { return err } } return na.Finish() } func (_Msg3__Assembler) Prototype() ld.NodePrototype { return _Msg3__Prototype{} } func (ma *_Msg3__Assembler) valueFinishTidy() bool { switch ma.f { case 0: switch ma.cm { case schema.Maybe_Value: ma.ca_whee.w = nil ma.cm = schema.Maybe_Absent ma.state = maState_initial return true default: return false } case 1: switch ma.cm { case schema.Maybe_Value: ma.ca_woot.w = nil ma.cm = schema.Maybe_Absent ma.state = maState_initial return true default: return false } case 2: switch ma.cm { case schema.Maybe_Value: ma.ca_waga.w = nil ma.cm = schema.Maybe_Absent ma.state = maState_initial return true default: return false } default: panic("unreachable") } } func (ma *_Msg3__Assembler) AssembleEntry(k string) (ld.NodeAssembler, error) { switch ma.state { case maState_initial: // carry on case maState_midKey: panic("invalid state: AssembleEntry cannot be called when in the middle of assembling another key") case maState_expectValue: panic("invalid state: AssembleEntry cannot be called when expecting start of value assembly") case maState_midValue: if !ma.valueFinishTidy() { panic("invalid state: AssembleEntry cannot be called when in the middle of assembling a value") } // if tidy success: carry on case maState_finished: panic("invalid state: AssembleEntry cannot be called on an assembler that's already finished") } switch k { case "whee": if ma.s&fieldBit__Msg3_Whee != 0 { return nil, ld.ErrRepeatedMapKey{Key: &fieldName__Msg3_Whee} } ma.s += fieldBit__Msg3_Whee ma.state = maState_midValue ma.f = 0 ma.ca_whee.w = &ma.w.whee ma.ca_whee.m = &ma.cm return &ma.ca_whee, nil case "woot": if ma.s&fieldBit__Msg3_Woot != 0 { return nil, ld.ErrRepeatedMapKey{Key: &fieldName__Msg3_Woot} } ma.s += fieldBit__Msg3_Woot ma.state = maState_midValue ma.f = 1 ma.ca_woot.w = &ma.w.woot ma.ca_woot.m = &ma.cm return &ma.ca_woot, nil case "waga": if ma.s&fieldBit__Msg3_Waga != 0 { return nil, ld.ErrRepeatedMapKey{Key: &fieldName__Msg3_Waga} } ma.s += fieldBit__Msg3_Waga ma.state = maState_midValue ma.f = 2 ma.ca_waga.w = &ma.w.waga ma.ca_waga.m = &ma.cm return &ma.ca_waga, nil } return nil, ld.ErrInvalidKey{TypeName: "gendemo.Msg3", Key: &_String{k}} } func (ma *_Msg3__Assembler) AssembleKey() ld.NodeAssembler { switch ma.state { case maState_initial: // carry on case maState_midKey: panic("invalid state: AssembleKey cannot be called when in the middle of assembling another key") case maState_expectValue: panic("invalid state: AssembleKey cannot be called when expecting start of value assembly") case maState_midValue: if !ma.valueFinishTidy() { panic("invalid state: AssembleKey cannot be called when in the middle of assembling a value") } // if tidy success: carry on case maState_finished: panic("invalid state: AssembleKey cannot be called on an assembler that's already finished") } ma.state = maState_midKey return (*_Msg3__KeyAssembler)(ma) } func (ma *_Msg3__Assembler) AssembleValue() ld.NodeAssembler { switch ma.state { case maState_initial: panic("invalid state: AssembleValue cannot be called when no key is primed") case maState_midKey: panic("invalid state: AssembleValue cannot be called when in the middle of assembling a key") case maState_expectValue: // carry on case maState_midValue: panic("invalid state: AssembleValue cannot be called when in the middle of assembling another value") case maState_finished: panic("invalid state: AssembleValue cannot be called on an assembler that's already finished") } ma.state = maState_midValue switch ma.f { case 0: ma.ca_whee.w = &ma.w.whee ma.ca_whee.m = &ma.cm return &ma.ca_whee case 1: ma.ca_woot.w = &ma.w.woot ma.ca_woot.m = &ma.cm return &ma.ca_woot case 2: ma.ca_waga.w = &ma.w.waga ma.ca_waga.m = &ma.cm return &ma.ca_waga default: panic("unreachable") } } func (ma *_Msg3__Assembler) Finish() error { switch ma.state { case maState_initial: // carry on case maState_midKey: panic("invalid state: Finish cannot be called when in the middle of assembling a key") case maState_expectValue: panic("invalid state: Finish cannot be called when expecting start of value assembly") case maState_midValue: if !ma.valueFinishTidy() { panic("invalid state: Finish cannot be called when in the middle of assembling a value") } // if tidy success: carry on case maState_finished: panic("invalid state: Finish cannot be called on an assembler that's already finished") } if ma.s&fieldBits__Msg3_sufficient != fieldBits__Msg3_sufficient { err := ld.ErrMissingRequiredField{Missing: make([]string, 0)} if ma.s&fieldBit__Msg3_Whee == 0 { err.Missing = append(err.Missing, "whee") } if ma.s&fieldBit__Msg3_Woot == 0 { err.Missing = append(err.Missing, "woot") } if ma.s&fieldBit__Msg3_Waga == 0 { err.Missing = append(err.Missing, "waga") } return err } ma.state = maState_finished *ma.m = schema.Maybe_Value return nil } func (ma *_Msg3__Assembler) KeyPrototype() ld.NodePrototype { return _String__Prototype{} } func (ma *_Msg3__Assembler) ValuePrototype(k string) ld.NodePrototype { panic("todo structbuilder mapassembler valueprototype") } type _Msg3__KeyAssembler _Msg3__Assembler func (_Msg3__KeyAssembler) BeginMap(sizeHint int64) (ld.MapAssembler, error) { return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.BeginMap(0) } func (_Msg3__KeyAssembler) BeginList(sizeHint int64) (ld.ListAssembler, error) { return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.BeginList(0) } func (na *_Msg3__KeyAssembler) AssignNull() error { return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.AssignNull() } func (_Msg3__KeyAssembler) AssignBool(bool) error { return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.AssignBool(false) } func (_Msg3__KeyAssembler) AssignInt(int64) error { return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.AssignInt(0) } func (_Msg3__KeyAssembler) AssignFloat(float64) error { return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.AssignFloat(0) } func (ka *_Msg3__KeyAssembler) AssignString(k string) error { if ka.state != maState_midKey { panic("misuse: KeyAssembler held beyond its valid lifetime") } switch k { case "whee": if ka.s&fieldBit__Msg3_Whee != 0 { return ld.ErrRepeatedMapKey{Key: &fieldName__Msg3_Whee} } ka.s += fieldBit__Msg3_Whee ka.state = maState_expectValue ka.f = 0 case "woot": if ka.s&fieldBit__Msg3_Woot != 0 { return ld.ErrRepeatedMapKey{Key: &fieldName__Msg3_Woot} } ka.s += fieldBit__Msg3_Woot ka.state = maState_expectValue ka.f = 1 case "waga": if ka.s&fieldBit__Msg3_Waga != 0 { return ld.ErrRepeatedMapKey{Key: &fieldName__Msg3_Waga} } ka.s += fieldBit__Msg3_Waga ka.state = maState_expectValue ka.f = 2 default: return ld.ErrInvalidKey{TypeName: "gendemo.Msg3", Key: &_String{k}} } return nil } func (_Msg3__KeyAssembler) AssignBytes([]byte) error { return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.AssignBytes(nil) } func (_Msg3__KeyAssembler) AssignLink(ld.Link) error { return mixins.StringAssembler{TypeName: "gendemo.Msg3.KeyAssembler"}.AssignLink(nil) } func (ka *_Msg3__KeyAssembler) AssignNode(v ld.Node) error { if v2, err := v.AsString(); err != nil { return err } else { return ka.AssignString(v2) } } func (_Msg3__KeyAssembler) Prototype() ld.NodePrototype { return _String__Prototype{} } func (Msg3) Type() schema.Type { return nil /*TODO:typelit*/ } func (n Msg3) Representation() ld.Node { return (*_Msg3__Repr)(n) } type _Msg3__Repr _Msg3 var ( fieldName__Msg3_Whee_serial = _String{"whee"} fieldName__Msg3_Woot_serial = _String{"woot"} fieldName__Msg3_Waga_serial = _String{"waga"} ) var _ ld.Node = &_Msg3__Repr{} func (_Msg3__Repr) Kind() ld.Kind { return ld.Kind_Map } func (n *_Msg3__Repr) LookupByString(key string) (ld.Node, error) { switch key { case "whee": return n.whee.Representation(), nil case "woot": return n.woot.Representation(), nil case "waga": return n.waga.Representation(), nil default: return nil, schema.ErrNoSuchField{Type: nil /*TODO*/, Field: ld.PathSegmentOfString(key)} } } func (n *_Msg3__Repr) LookupByNode(key ld.Node) (ld.Node, error) { ks, err := key.AsString() if err != nil { return nil, err } return n.LookupByString(ks) } func (_Msg3__Repr) LookupByIndex(idx int64) (ld.Node, error) { return mixins.Map{TypeName: "gendemo.Msg3.Repr"}.LookupByIndex(0) } func (n _Msg3__Repr) LookupBySegment(seg ld.PathSegment) (ld.Node, error) { return n.LookupByString(seg.String()) } func (n *_Msg3__Repr) MapIterator() ld.MapIterator { return &_Msg3__ReprMapItr{n, 0} } type _Msg3__ReprMapItr struct { n *_Msg3__Repr idx int } func (itr *_Msg3__ReprMapItr) Next() (k ld.Node, v ld.Node, _ error) { if itr.idx >= 3 { return nil, nil, ld.ErrIteratorOverread{} } switch itr.idx { case 0: k = &fieldName__Msg3_Whee_serial v = itr.n.whee.Representation() case 1: k = &fieldName__Msg3_Woot_serial v = itr.n.woot.Representation() case 2: k = &fieldName__Msg3_Waga_serial v = itr.n.waga.Representation() default: panic("unreachable") } itr.idx++ return } func (itr *_Msg3__ReprMapItr) Done() bool { return itr.idx >= 3 } func (_Msg3__Repr) ListIterator() ld.ListIterator { return nil } func (rn *_Msg3__Repr) Length() int64 { l := 3 return int64(l) } func (_Msg3__Repr) IsAbsent() bool { return false } func (_Msg3__Repr) IsNull() bool { return false } func (_Msg3__Repr) AsBool() (bool, error) { return mixins.Map{TypeName: "gendemo.Msg3.Repr"}.AsBool() } func (_Msg3__Repr) AsInt() (int64, error) { return mixins.Map{TypeName: "gendemo.Msg3.Repr"}.AsInt() } func (_Msg3__Repr) AsFloat() (float64, error) { return mixins.Map{TypeName: "gendemo.Msg3.Repr"}.AsFloat() } func (_Msg3__Repr) AsString() (string, error) { return mixins.Map{TypeName: "gendemo.Msg3.Repr"}.AsString() } func (_Msg3__Repr) AsBytes() ([]byte, error) { return mixins.Map{TypeName: "gendemo.Msg3.Repr"}.AsBytes() } func (_Msg3__Repr) AsLink() (ld.Link, error) { return mixins.Map{TypeName: "gendemo.Msg3.Repr"}.AsLink() } func (_Msg3__Repr) Prototype() ld.NodePrototype { return _Msg3__ReprPrototype{} } type _Msg3__ReprPrototype struct{} func (_Msg3__ReprPrototype) NewBuilder() ld.NodeBuilder { var nb _Msg3__ReprBuilder nb.Reset() return &nb } type _Msg3__ReprBuilder struct { _Msg3__ReprAssembler } func (nb *_Msg3__ReprBuilder) Build() ld.Node { if *nb.m != schema.Maybe_Value { panic("invalid state: cannot call Build on an assembler that's not finished") } return nb.w } func (nb *_Msg3__ReprBuilder) Reset() { var w _Msg3 var m schema.Maybe *nb = _Msg3__ReprBuilder{_Msg3__ReprAssembler{w: &w, m: &m}} } type _Msg3__ReprAssembler struct { w *_Msg3 m *schema.Maybe state maState s int f int cm schema.Maybe ca_whee _Int__ReprAssembler ca_woot _Int__ReprAssembler ca_waga _Int__ReprAssembler } func (na *_Msg3__ReprAssembler) reset() { na.state = maState_initial na.s = 0 na.ca_whee.reset() na.ca_woot.reset() na.ca_waga.reset() } func (na *_Msg3__ReprAssembler) BeginMap(int64) (ld.MapAssembler, error) { switch *na.m { case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") case midvalue: panic("invalid state: it makes no sense to 'begin' twice on the same assembler!") } *na.m = midvalue if na.w == nil { na.w = &_Msg3{} } return na, nil } func (_Msg3__ReprAssembler) BeginList(sizeHint int64) (ld.ListAssembler, error) { return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr"}.BeginList(0) } func (na *_Msg3__ReprAssembler) AssignNull() error { switch *na.m { case allowNull: *na.m = schema.Maybe_Null return nil case schema.Maybe_Absent: return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr.Repr"}.AssignNull() case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") case midvalue: panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!") } panic("unreachable") } func (_Msg3__ReprAssembler) AssignBool(bool) error { return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr"}.AssignBool(false) } func (_Msg3__ReprAssembler) AssignInt(int64) error { return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr"}.AssignInt(0) } func (_Msg3__ReprAssembler) AssignFloat(float64) error { return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr"}.AssignFloat(0) } func (_Msg3__ReprAssembler) AssignString(string) error { return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr"}.AssignString("") } func (_Msg3__ReprAssembler) AssignBytes([]byte) error { return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr"}.AssignBytes(nil) } func (_Msg3__ReprAssembler) AssignLink(ld.Link) error { return mixins.MapAssembler{TypeName: "gendemo.Msg3.Repr"}.AssignLink(nil) } func (na *_Msg3__ReprAssembler) AssignNode(v ld.Node) error { if v.IsNull() { return na.AssignNull() } if v2, ok := v.(*_Msg3); ok { switch *na.m { case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") case midvalue: panic("invalid state: cannot assign null into an assembler that's already begun working on recursive structures!") } if na.w == nil { na.w = v2 *na.m = schema.Maybe_Value return nil } *na.w = *v2 *na.m = schema.Maybe_Value return nil } if v.Kind() != ld.Kind_Map { return ld.ErrWrongKind{TypeName: "gendemo.Msg3.Repr", MethodName: "AssignNode", AppropriateKind: ld.KindSet_JustMap, ActualKind: v.Kind()} } itr := v.MapIterator() for !itr.Done() { k, v, err := itr.Next() if err != nil { return err } if err := na.AssembleKey().AssignNode(k); err != nil { return err } if err := na.AssembleValue().AssignNode(v); err != nil { return err } } return na.Finish() } func (_Msg3__ReprAssembler) Prototype() ld.NodePrototype { return _Msg3__ReprPrototype{} } func (ma *_Msg3__ReprAssembler) valueFinishTidy() bool { switch ma.f { case 0: switch ma.cm { case schema.Maybe_Value: ma.cm = schema.Maybe_Absent ma.state = maState_initial return true default: return false } case 1: switch ma.cm { case schema.Maybe_Value: ma.cm = schema.Maybe_Absent ma.state = maState_initial return true default: return false } case 2: switch ma.cm { case schema.Maybe_Value: ma.cm = schema.Maybe_Absent ma.state = maState_initial return true default: return false } default: panic("unreachable") } } func (ma *_Msg3__ReprAssembler) AssembleEntry(k string) (ld.NodeAssembler, error) { switch ma.state { case maState_initial: // carry on case maState_midKey: panic("invalid state: AssembleEntry cannot be called when in the middle of assembling another key") case maState_expectValue: panic("invalid state: AssembleEntry cannot be called when expecting start of value assembly") case maState_midValue: if !ma.valueFinishTidy() { panic("invalid state: AssembleEntry cannot be called when in the middle of assembling a value") } // if tidy success: carry on case maState_finished: panic("invalid state: AssembleEntry cannot be called on an assembler that's already finished") } switch k { case "whee": if ma.s&fieldBit__Msg3_Whee != 0 { return nil, ld.ErrRepeatedMapKey{Key: &fieldName__Msg3_Whee_serial} } ma.s += fieldBit__Msg3_Whee ma.state = maState_midValue ma.f = 0 ma.ca_whee.w = &ma.w.whee ma.ca_whee.m = &ma.cm return &ma.ca_whee, nil case "woot": if ma.s&fieldBit__Msg3_Woot != 0 { return nil, ld.ErrRepeatedMapKey{Key: &fieldName__Msg3_Woot_serial} } ma.s += fieldBit__Msg3_Woot ma.state = maState_midValue ma.f = 1 ma.ca_woot.w = &ma.w.woot ma.ca_woot.m = &ma.cm return &ma.ca_woot, nil case "waga": if ma.s&fieldBit__Msg3_Waga != 0 { return nil, ld.ErrRepeatedMapKey{Key: &fieldName__Msg3_Waga_serial} } ma.s += fieldBit__Msg3_Waga ma.state = maState_midValue ma.f = 2 ma.ca_waga.w = &ma.w.waga ma.ca_waga.m = &ma.cm return &ma.ca_waga, nil default: } return nil, ld.ErrInvalidKey{TypeName: "gendemo.Msg3.Repr", Key: &_String{k}} } func (ma *_Msg3__ReprAssembler) AssembleKey() ld.NodeAssembler { switch ma.state { case maState_initial: // carry on case maState_midKey: panic("invalid state: AssembleKey cannot be called when in the middle of assembling another key") case maState_expectValue: panic("invalid state: AssembleKey cannot be called when expecting start of value assembly") case maState_midValue: if !ma.valueFinishTidy() { panic("invalid state: AssembleKey cannot be called when in the middle of assembling a value") } // if tidy success: carry on case maState_finished: panic("invalid state: AssembleKey cannot be called on an assembler that's already finished") } ma.state = maState_midKey return (*_Msg3__ReprKeyAssembler)(ma) } func (ma *_Msg3__ReprAssembler) AssembleValue() ld.NodeAssembler { switch ma.state { case maState_initial: panic("invalid state: AssembleValue cannot be called when no key is primed") case maState_midKey: panic("invalid state: AssembleValue cannot be called when in the middle of assembling a key") case maState_expectValue: // carry on case maState_midValue: panic("invalid state: AssembleValue cannot be called when in the middle of assembling another value") case maState_finished: panic("invalid state: AssembleValue cannot be called on an assembler that's already finished") } ma.state = maState_midValue switch ma.f { case 0: ma.ca_whee.w = &ma.w.whee ma.ca_whee.m = &ma.cm return &ma.ca_whee case 1: ma.ca_woot.w = &ma.w.woot ma.ca_woot.m = &ma.cm return &ma.ca_woot case 2: ma.ca_waga.w = &ma.w.waga ma.ca_waga.m = &ma.cm return &ma.ca_waga default: panic("unreachable") } } func (ma *_Msg3__ReprAssembler) Finish() error { switch ma.state { case maState_initial: // carry on case maState_midKey: panic("invalid state: Finish cannot be called when in the middle of assembling a key") case maState_expectValue: panic("invalid state: Finish cannot be called when expecting start of value assembly") case maState_midValue: if !ma.valueFinishTidy() { panic("invalid state: Finish cannot be called when in the middle of assembling a value") } // if tidy success: carry on case maState_finished: panic("invalid state: Finish cannot be called on an assembler that's already finished") } if ma.s&fieldBits__Msg3_sufficient != fieldBits__Msg3_sufficient { err := ld.ErrMissingRequiredField{Missing: make([]string, 0)} if ma.s&fieldBit__Msg3_Whee == 0 { err.Missing = append(err.Missing, "whee") } if ma.s&fieldBit__Msg3_Woot == 0 { err.Missing = append(err.Missing, "woot") } if ma.s&fieldBit__Msg3_Waga == 0 { err.Missing = append(err.Missing, "waga") } return err } ma.state = maState_finished *ma.m = schema.Maybe_Value return nil } func (ma *_Msg3__ReprAssembler) KeyPrototype() ld.NodePrototype { return _String__Prototype{} } func (ma *_Msg3__ReprAssembler) ValuePrototype(k string) ld.NodePrototype { panic("todo structbuilder mapassembler repr valueprototype") } type _Msg3__ReprKeyAssembler _Msg3__ReprAssembler func (_Msg3__ReprKeyAssembler) BeginMap(sizeHint int64) (ld.MapAssembler, error) { return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.BeginMap(0) } func (_Msg3__ReprKeyAssembler) BeginList(sizeHint int64) (ld.ListAssembler, error) { return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.BeginList(0) } func (na *_Msg3__ReprKeyAssembler) AssignNull() error { return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.AssignNull() } func (_Msg3__ReprKeyAssembler) AssignBool(bool) error { return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.AssignBool(false) } func (_Msg3__ReprKeyAssembler) AssignInt(int64) error { return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.AssignInt(0) } func (_Msg3__ReprKeyAssembler) AssignFloat(float64) error { return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.AssignFloat(0) } func (ka *_Msg3__ReprKeyAssembler) AssignString(k string) error { if ka.state != maState_midKey { panic("misuse: KeyAssembler held beyond its valid lifetime") } switch k { case "whee": if ka.s&fieldBit__Msg3_Whee != 0 { return ld.ErrRepeatedMapKey{Key: &fieldName__Msg3_Whee_serial} } ka.s += fieldBit__Msg3_Whee ka.state = maState_expectValue ka.f = 0 return nil case "woot": if ka.s&fieldBit__Msg3_Woot != 0 { return ld.ErrRepeatedMapKey{Key: &fieldName__Msg3_Woot_serial} } ka.s += fieldBit__Msg3_Woot ka.state = maState_expectValue ka.f = 1 return nil case "waga": if ka.s&fieldBit__Msg3_Waga != 0 { return ld.ErrRepeatedMapKey{Key: &fieldName__Msg3_Waga_serial} } ka.s += fieldBit__Msg3_Waga ka.state = maState_expectValue ka.f = 2 return nil } return ld.ErrInvalidKey{TypeName: "gendemo.Msg3.Repr", Key: &_String{k}} } func (_Msg3__ReprKeyAssembler) AssignBytes([]byte) error { return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.AssignBytes(nil) } func (_Msg3__ReprKeyAssembler) AssignLink(ld.Link) error { return mixins.StringAssembler{TypeName: "gendemo.Msg3.Repr.KeyAssembler"}.AssignLink(nil) } func (ka *_Msg3__ReprKeyAssembler) AssignNode(v ld.Node) error { if v2, err := v.AsString(); err != nil { return err } else { return ka.AssignString(v2) } } func (_Msg3__ReprKeyAssembler) Prototype() ld.NodePrototype { return _String__Prototype{} } func (n String) String() string { return n.x } func (_String__Prototype) fromString(w *_String, v string) error { *w = _String{v} return nil } func (_String__Prototype) FromString(v string) (String, error) { n := _String{v} return &n, nil } type _String__Maybe struct { m schema.Maybe v _String } type MaybeString = *_String__Maybe func (m MaybeString) IsNull() bool { return m.m == schema.Maybe_Null } func (m MaybeString) IsAbsent() bool { return m.m == schema.Maybe_Absent } func (m MaybeString) Exists() bool { return m.m == schema.Maybe_Value } func (m MaybeString) AsNode() ld.Node { switch m.m { case schema.Maybe_Absent: return ld.Absent case schema.Maybe_Null: return ld.Null case schema.Maybe_Value: return &m.v default: panic("unreachable") } } func (m MaybeString) Must() String { if !m.Exists() { panic("unbox of a maybe rejected") } return &m.v } var _ ld.Node = (String)(&_String{}) var _ schema.TypedNode = (String)(&_String{}) func (String) Kind() ld.Kind { return ld.Kind_String } func (String) LookupByString(string) (ld.Node, error) { return mixins.String{TypeName: "gendemo.String"}.LookupByString("") } func (String) LookupByNode(ld.Node) (ld.Node, error) { return mixins.String{TypeName: "gendemo.String"}.LookupByNode(nil) } func (String) LookupByIndex(idx int64) (ld.Node, error) { return mixins.String{TypeName: "gendemo.String"}.LookupByIndex(0) } func (String) LookupBySegment(seg ld.PathSegment) (ld.Node, error) { return mixins.String{TypeName: "gendemo.String"}.LookupBySegment(seg) } func (String) MapIterator() ld.MapIterator { return nil } func (String) ListIterator() ld.ListIterator { return nil } func (String) Length() int64 { return -1 } func (String) IsAbsent() bool { return false } func (String) IsNull() bool { return false } func (String) AsBool() (bool, error) { return mixins.String{TypeName: "gendemo.String"}.AsBool() } func (String) AsInt() (int64, error) { return mixins.String{TypeName: "gendemo.String"}.AsInt() } func (String) AsFloat() (float64, error) { return mixins.String{TypeName: "gendemo.String"}.AsFloat() } func (n String) AsString() (string, error) { return n.x, nil } func (String) AsBytes() ([]byte, error) { return mixins.String{TypeName: "gendemo.String"}.AsBytes() } func (String) AsLink() (ld.Link, error) { return mixins.String{TypeName: "gendemo.String"}.AsLink() } func (String) Prototype() ld.NodePrototype { return _String__Prototype{} } type _String__Prototype struct{} func (_String__Prototype) NewBuilder() ld.NodeBuilder { var nb _String__Builder nb.Reset() return &nb } type _String__Builder struct { _String__Assembler } func (nb *_String__Builder) Build() ld.Node { if *nb.m != schema.Maybe_Value { panic("invalid state: cannot call Build on an assembler that's not finished") } return nb.w } func (nb *_String__Builder) Reset() { var w _String var m schema.Maybe *nb = _String__Builder{_String__Assembler{w: &w, m: &m}} } type _String__Assembler struct { w *_String m *schema.Maybe } func (na *_String__Assembler) reset() {} func (_String__Assembler) BeginMap(sizeHint int64) (ld.MapAssembler, error) { return mixins.StringAssembler{TypeName: "gendemo.String"}.BeginMap(0) } func (_String__Assembler) BeginList(sizeHint int64) (ld.ListAssembler, error) { return mixins.StringAssembler{TypeName: "gendemo.String"}.BeginList(0) } func (na *_String__Assembler) AssignNull() error { switch *na.m { case allowNull: *na.m = schema.Maybe_Null return nil case schema.Maybe_Absent: return mixins.StringAssembler{TypeName: "gendemo.String"}.AssignNull() case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") } panic("unreachable") } func (_String__Assembler) AssignBool(bool) error { return mixins.StringAssembler{TypeName: "gendemo.String"}.AssignBool(false) } func (_String__Assembler) AssignInt(int64) error { return mixins.StringAssembler{TypeName: "gendemo.String"}.AssignInt(0) } func (_String__Assembler) AssignFloat(float64) error { return mixins.StringAssembler{TypeName: "gendemo.String"}.AssignFloat(0) } func (na *_String__Assembler) AssignString(v string) error { switch *na.m { case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") } na.w.x = v *na.m = schema.Maybe_Value return nil } func (_String__Assembler) AssignBytes([]byte) error { return mixins.StringAssembler{TypeName: "gendemo.String"}.AssignBytes(nil) } func (_String__Assembler) AssignLink(ld.Link) error { return mixins.StringAssembler{TypeName: "gendemo.String"}.AssignLink(nil) } func (na *_String__Assembler) AssignNode(v ld.Node) error { if v.IsNull() { return na.AssignNull() } if v2, ok := v.(*_String); ok { switch *na.m { case schema.Maybe_Value, schema.Maybe_Null: panic("invalid state: cannot assign into assembler that's already finished") } *na.w = *v2 *na.m = schema.Maybe_Value return nil } if v2, err := v.AsString(); err != nil { return err } else { return na.AssignString(v2) } } func (_String__Assembler) Prototype() ld.NodePrototype { return _String__Prototype{} } func (String) Type() schema.Type { return nil /*TODO:typelit*/ } func (n String) Representation() ld.Node { return (*_String__Repr)(n) } type _String__Repr = _String var _ ld.Node = &_String__Repr{} type _String__ReprPrototype = _String__Prototype type _String__ReprAssembler = _String__Assembler