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  }