0% found this document useful (0 votes)
13 views3 pages

tmplMixin

Uploaded by

hilde.strom86
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views3 pages

tmplMixin

Uploaded by

hilde.strom86
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

// copy this and remove methods that aren't relevant to your kind.

// this has not been scripted.


// (the first part is trivial; the second part is not; and this updates rarely.
https://xkcd.com/1205/ applies.)

package mixins

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

// @Kind@ can be embedded in a struct to provide all the methods that


// have fixed output for any int-kinded nodes.
// (Mostly this includes all the methods which simply return ErrWrongKind.)
// Other methods will still need to be implemented to finish conforming to Node.
//
// To conserve memory and get a TypeName in errors without embedding,
// write methods on your type with a body that simply initializes this struct
// and immediately uses the relevant method;
// this is more verbose in source, but compiles to a tighter result:
// in memory, there's no embed; and in runtime, the calls will be inlined
// and thus have no cost in execution time.
type @Kind@ struct {
TypeName string
}

func (@Kind@) Kind() ipld.Kind {


return ipld.Kind_@Kind@
}
func (x @Kind@) LookupByString(string) (ipld.Node, error) {
return nil, ipld.ErrWrongKind{TypeName: x.TypeName, MethodName:
"LookupByString", AppropriateKind: ipld.KindSet_JustMap, ActualKind:
ipld.Kind_@Kind@}
}
func (x @Kind@) LookupByNode(key ipld.Node) (ipld.Node, error) {
return nil, ipld.ErrWrongKind{TypeName: x.TypeName, MethodName:
"LookupByNode", AppropriateKind: ipld.KindSet_JustMap, ActualKind:
ipld.Kind_@Kind@}
}
func (x @Kind@) LookupByIndex(idx int) (ipld.Node, error) {
return nil, ipld.ErrWrongKind{TypeName: x.TypeName, MethodName:
"LookupByIndex", AppropriateKind: ipld.KindSet_JustList, ActualKind:
ipld.Kind_@Kind@}
}
func (x @Kind@) LookupBySegment(ipld.PathSegment) (ipld.Node, error) {
return nil, ipld.ErrWrongKind{TypeName: x.TypeName, MethodName:
"LookupBySegment", AppropriateKind: ipld.KindSet_Recursive, ActualKind:
ipld.Kind_@Kind@}
}
func (@Kind@) MapIterator() ipld.MapIterator {
return nil
}
func (@Kind@) ListIterator() ipld.ListIterator {
return nil
}
func (@Kind@) Length() int {
return -1
}
func (@Kind@) IsAbsent() bool {
return false
}
func (@Kind@) IsNull() bool {
return false
}
func (x @Kind@) AsBool() (bool, error) {
return false, ipld.ErrWrongKind{TypeName: x.TypeName, MethodName: "AsBool",
AppropriateKind: ipld.KindSet_JustBool, ActualKind: ipld.Kind_@Kind@}
}
func (x @Kind@) AsInt() (int, error) {
return 0, ipld.ErrWrongKind{TypeName: x.TypeName, MethodName: "AsInt",
AppropriateKind: ipld.KindSet_JustInt, ActualKind: ipld.Kind_@Kind@}
}
func (x @Kind@) AsFloat() (float64, error) {
return 0, ipld.ErrWrongKind{TypeName: x.TypeName, MethodName: "AsFloat",
AppropriateKind: ipld.KindSet_JustFloat, ActualKind: ipld.Kind_@Kind@}
}
func (x @Kind@) AsString() (string, error) {
return "", ipld.ErrWrongKind{TypeName: x.TypeName, MethodName: "AsString",
AppropriateKind: ipld.KindSet_JustString, ActualKind: ipld.Kind_@Kind@}
}
func (x @Kind@) AsBytes() ([]byte, error) {
return nil, ipld.ErrWrongKind{TypeName: x.TypeName, MethodName: "AsBytes",
AppropriateKind: ipld.KindSet_JustBytes, ActualKind: ipld.Kind_@Kind@}
}
func (x @Kind@) AsLink() (ipld.Link, error) {
return nil, ipld.ErrWrongKind{TypeName: x.TypeName, MethodName: "AsLink",
AppropriateKind: ipld.KindSet_JustLink, ActualKind: ipld.Kind_@Kind@}
}

// @Kind@Assembler has similar purpose as @Kind@, but for (you guessed it)
// the NodeAssembler interface rather than the Node interface.
type @Kind@Assembler struct {
TypeName string
}

func (x @Kind@Assembler) BeginMap(sizeHint int) (ipld.MapAssembler, error) {


return nil, ipld.ErrWrongKind{TypeName: x.TypeName, MethodName: "BeginMap",
AppropriateKind: ipld.KindSet_JustMap, ActualKind: ipld.Kind_@Kind@}
}
func (x @Kind@Assembler) BeginList(sizeHint int) (ipld.ListAssembler, error) {
return nil, ipld.ErrWrongKind{TypeName: x.TypeName, MethodName: "BeginList",
AppropriateKind: ipld.KindSet_JustList, ActualKind: ipld.Kind_@Kind@}
}
func (x @Kind@Assembler) AssignNull() error {
return ipld.ErrWrongKind{TypeName: x.TypeName, MethodName: "AssignNull",
AppropriateKind: ipld.KindSet_JustNull, ActualKind: ipld.Kind_@Kind@}
}
func (x @Kind@Assembler) AssignBool(bool) error {
return ipld.ErrWrongKind{TypeName: x.TypeName, MethodName: "AssignBool",
AppropriateKind: ipld.KindSet_JustBool, ActualKind: ipld.Kind_@Kind@}
}
func (x @Kind@Assembler) AssignInt(int) error {
return ipld.ErrWrongKind{TypeName: x.TypeName, MethodName: "AssignInt",
AppropriateKind: ipld.KindSet_JustInt, ActualKind: ipld.Kind_@Kind@}
}
func (x @Kind@Assembler) AssignFloat(float64) error {
return ipld.ErrWrongKind{TypeName: x.TypeName, MethodName: "AssignFloat",
AppropriateKind: ipld.KindSet_JustFloat, ActualKind: ipld.Kind_@Kind@}
}
func (x @Kind@Assembler) AssignString(string) error {
return ipld.ErrWrongKind{TypeName: x.TypeName, MethodName: "AssignString",
AppropriateKind: ipld.KindSet_JustString, ActualKind: ipld.Kind_@Kind@}
}
func (x @Kind@Assembler) AssignBytes([]byte) error {
return ipld.ErrWrongKind{TypeName: x.TypeName, MethodName: "AssignBytes",
AppropriateKind: ipld.KindSet_JustBytes, ActualKind: ipld.Kind_@Kind@}
}
func (x @Kind@Assembler) AssignLink(ipld.Link) error {
return ipld.ErrWrongKind{TypeName: x.TypeName, MethodName: "AssignLink",
AppropriateKind: ipld.KindSet_JustLink, ActualKind: ipld.Kind_@Kind@}
}

You might also like