github.com/mavryk-network/mvgo@v1.19.9/codec/transfer_ticket.go (about)

     1  // Copyright (c) 2023 Blockwatch Data Inc.
     2  // Author: alex@blockwatch.cc
     3  
     4  package codec
     5  
     6  import (
     7  	"bytes"
     8  	"strconv"
     9  
    10  	"github.com/mavryk-network/mvgo/mavryk"
    11  	"github.com/mavryk-network/mvgo/micheline"
    12  )
    13  
    14  // TransferTicket represents "transfer_ticket" operation
    15  type TransferTicket struct {
    16  	Manager
    17  	Contents    micheline.Prim `json:"ticket_contents"`
    18  	Type        micheline.Prim `json:"ticket_ty"`
    19  	Ticketer    mavryk.Address `json:"ticket_ticketer"`
    20  	Amount      mavryk.N       `json:"ticket_amount"`
    21  	Destination mavryk.Address `json:"destination"`
    22  	Entrypoint  string         `json:"entrypoint"`
    23  }
    24  
    25  func (o TransferTicket) Kind() mavryk.OpType {
    26  	return mavryk.OpTypeTransferTicket
    27  }
    28  
    29  func (o TransferTicket) MarshalJSON() ([]byte, error) {
    30  	buf := bytes.NewBuffer(nil)
    31  	buf.WriteByte('{')
    32  	buf.WriteString(`"kind":`)
    33  	buf.WriteString(strconv.Quote(o.Kind().String()))
    34  	buf.WriteByte(',')
    35  	o.Manager.EncodeJSON(buf)
    36  	buf.WriteString(`,"ticket_contents":`)
    37  	o.Contents.EncodeJSON(buf)
    38  	buf.WriteString(`,"ticket_ty":`)
    39  	o.Type.EncodeJSON(buf)
    40  	buf.WriteString(`,"ticketer":`)
    41  	buf.WriteString(strconv.Quote(o.Ticketer.String()))
    42  	buf.WriteString(`,"amount":`)
    43  	buf.WriteString(strconv.Quote(o.Amount.String()))
    44  	buf.WriteString(`,"destination":`)
    45  	buf.WriteString(strconv.Quote(o.Destination.String()))
    46  	buf.WriteString(`,"entrypoint":`)
    47  	buf.WriteString(strconv.Quote(o.Entrypoint))
    48  	buf.WriteByte('}')
    49  	return buf.Bytes(), nil
    50  }
    51  
    52  func (o TransferTicket) EncodeBuffer(buf *bytes.Buffer, p *mavryk.Params) error {
    53  	buf.WriteByte(o.Kind().TagVersion(p.OperationTagsVersion))
    54  	o.Manager.EncodeBuffer(buf, p)
    55  	writePrimWithLen(buf, o.Contents)
    56  	writePrimWithLen(buf, o.Type)
    57  	buf.Write(o.Ticketer.EncodePadded())
    58  	o.Amount.EncodeBuffer(buf)
    59  	buf.Write(o.Destination.EncodePadded())
    60  	writeStringWithLen(buf, o.Entrypoint)
    61  	return nil
    62  }
    63  
    64  func (o *TransferTicket) DecodeBuffer(buf *bytes.Buffer, p *mavryk.Params) (err error) {
    65  	if err = ensureTagAndSize(buf, o.Kind(), p.OperationTagsVersion); err != nil {
    66  		return
    67  	}
    68  	if err = o.Manager.DecodeBuffer(buf, p); err != nil {
    69  		return
    70  	}
    71  	if o.Contents, err = readPrimWithLen(buf); err != nil {
    72  		return
    73  	}
    74  	if o.Type, err = readPrimWithLen(buf); err != nil {
    75  		return
    76  	}
    77  	if err = o.Ticketer.Decode(buf.Next(22)); err != nil {
    78  		return
    79  	}
    80  	if err = o.Amount.DecodeBuffer(buf); err != nil {
    81  		return
    82  	}
    83  	if err = o.Destination.Decode(buf.Next(22)); err != nil {
    84  		return
    85  	}
    86  	o.Entrypoint, err = readStringWithLen(buf)
    87  	return
    88  }
    89  
    90  func (o TransferTicket) MarshalBinary() ([]byte, error) {
    91  	buf := bytes.NewBuffer(nil)
    92  	err := o.EncodeBuffer(buf, mavryk.DefaultParams)
    93  	return buf.Bytes(), err
    94  }
    95  
    96  func (o *TransferTicket) UnmarshalBinary(data []byte) error {
    97  	return o.DecodeBuffer(bytes.NewBuffer(data), mavryk.DefaultParams)
    98  }