github.com/ipld/go-ipld-prime@v0.21.0/node/basicnode/string.go (about) 1 package basicnode 2 3 import ( 4 "github.com/ipld/go-ipld-prime/datamodel" 5 "github.com/ipld/go-ipld-prime/node/mixins" 6 ) 7 8 var ( 9 _ datamodel.Node = plainString("") 10 _ datamodel.NodePrototype = Prototype__String{} 11 _ datamodel.NodeBuilder = &plainString__Builder{} 12 _ datamodel.NodeAssembler = &plainString__Assembler{} 13 ) 14 15 func NewString(value string) datamodel.Node { 16 v := plainString(value) 17 return &v 18 } 19 20 // plainString is a simple boxed string that complies with datamodel.Node. 21 // It's useful for many things, such as boxing map keys. 22 // 23 // The implementation is a simple typedef of a string; 24 // handling it as a Node incurs 'runtime.convTstring', 25 // which is about the best we can do. 26 type plainString string 27 28 // -- Node interface methods --> 29 30 func (plainString) Kind() datamodel.Kind { 31 return datamodel.Kind_String 32 } 33 func (plainString) LookupByString(string) (datamodel.Node, error) { 34 return mixins.String{TypeName: "string"}.LookupByString("") 35 } 36 func (plainString) LookupByNode(key datamodel.Node) (datamodel.Node, error) { 37 return mixins.String{TypeName: "string"}.LookupByNode(nil) 38 } 39 func (plainString) LookupByIndex(idx int64) (datamodel.Node, error) { 40 return mixins.String{TypeName: "string"}.LookupByIndex(0) 41 } 42 func (plainString) LookupBySegment(seg datamodel.PathSegment) (datamodel.Node, error) { 43 return mixins.String{TypeName: "string"}.LookupBySegment(seg) 44 } 45 func (plainString) MapIterator() datamodel.MapIterator { 46 return nil 47 } 48 func (plainString) ListIterator() datamodel.ListIterator { 49 return nil 50 } 51 func (plainString) Length() int64 { 52 return -1 53 } 54 func (plainString) IsAbsent() bool { 55 return false 56 } 57 func (plainString) IsNull() bool { 58 return false 59 } 60 func (plainString) AsBool() (bool, error) { 61 return mixins.String{TypeName: "string"}.AsBool() 62 } 63 func (plainString) AsInt() (int64, error) { 64 return mixins.String{TypeName: "string"}.AsInt() 65 } 66 func (plainString) AsFloat() (float64, error) { 67 return mixins.String{TypeName: "string"}.AsFloat() 68 } 69 func (x plainString) AsString() (string, error) { 70 return string(x), nil 71 } 72 func (plainString) AsBytes() ([]byte, error) { 73 return mixins.String{TypeName: "string"}.AsBytes() 74 } 75 func (plainString) AsLink() (datamodel.Link, error) { 76 return mixins.String{TypeName: "string"}.AsLink() 77 } 78 func (plainString) Prototype() datamodel.NodePrototype { 79 return Prototype__String{} 80 } 81 82 // -- NodePrototype --> 83 84 type Prototype__String struct{} 85 86 func (Prototype__String) NewBuilder() datamodel.NodeBuilder { 87 var w plainString 88 return &plainString__Builder{plainString__Assembler{w: &w}} 89 } 90 91 // -- NodeBuilder --> 92 93 type plainString__Builder struct { 94 plainString__Assembler 95 } 96 97 func (nb *plainString__Builder) Build() datamodel.Node { 98 return nb.w 99 } 100 func (nb *plainString__Builder) Reset() { 101 var w plainString 102 *nb = plainString__Builder{plainString__Assembler{w: &w}} 103 } 104 105 // -- NodeAssembler --> 106 107 type plainString__Assembler struct { 108 w *plainString 109 } 110 111 func (plainString__Assembler) BeginMap(sizeHint int64) (datamodel.MapAssembler, error) { 112 return mixins.StringAssembler{TypeName: "string"}.BeginMap(0) 113 } 114 func (plainString__Assembler) BeginList(sizeHint int64) (datamodel.ListAssembler, error) { 115 return mixins.StringAssembler{TypeName: "string"}.BeginList(0) 116 } 117 func (plainString__Assembler) AssignNull() error { 118 return mixins.StringAssembler{TypeName: "string"}.AssignNull() 119 } 120 func (plainString__Assembler) AssignBool(bool) error { 121 return mixins.StringAssembler{TypeName: "string"}.AssignBool(false) 122 } 123 func (plainString__Assembler) AssignInt(int64) error { 124 return mixins.StringAssembler{TypeName: "string"}.AssignInt(0) 125 } 126 func (plainString__Assembler) AssignFloat(float64) error { 127 return mixins.StringAssembler{TypeName: "string"}.AssignFloat(0) 128 } 129 func (na *plainString__Assembler) AssignString(v string) error { 130 *na.w = plainString(v) 131 return nil 132 } 133 func (plainString__Assembler) AssignBytes([]byte) error { 134 return mixins.StringAssembler{TypeName: "string"}.AssignBytes(nil) 135 } 136 func (plainString__Assembler) AssignLink(datamodel.Link) error { 137 return mixins.StringAssembler{TypeName: "string"}.AssignLink(nil) 138 } 139 func (na *plainString__Assembler) AssignNode(v datamodel.Node) error { 140 if v2, err := v.AsString(); err != nil { 141 return err 142 } else { 143 *na.w = plainString(v2) 144 return nil 145 } 146 } 147 func (plainString__Assembler) Prototype() datamodel.NodePrototype { 148 return Prototype__String{} 149 }