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 }