github.com/stafiprotocol/go-substrate-rpc-client@v1.4.7/types/data.go (about) 1 // Go Substrate RPC Client (GSRPC) provides APIs and types around Polkadot and any Substrate-based chain RPC calls 2 // 3 // Copyright 2020 Stafi Protocol 4 // 5 // Licensed under the Apache License, Version 2.0 (the "License"); 6 // you may not use this file except in compliance with the License. 7 // You may obtain a copy of the License at 8 // 9 // http://www.apache.org/licenses/LICENSE-2.0 10 // 11 // Unless required by applicable law or agreed to in writing, software 12 // distributed under the License is distributed on an "AS IS" BASIS, 13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 // See the License for the specific language governing permissions and 15 // limitations under the License. 16 17 package types 18 19 import ( 20 "fmt" 21 "io" 22 23 "github.com/stafiprotocol/go-substrate-rpc-client/pkg/scale" 24 ) 25 26 // Data is a raw data structure, containing raw bytes that are not decoded/encoded (without any length encoding). 27 // Be careful using this in your own structs – it only works as the last value in a struct since it will consume the 28 // remainder of the encoded data. The reason for this is that it does not contain any length encoding, so it would 29 // not know where to stop. 30 type Data []byte 31 32 // NewData creates a new Data type 33 func NewData(b []byte) Data { 34 return Data(b) 35 } 36 37 // Encode implements encoding for Data, which just unwraps the bytes of Data 38 func (d Data) Encode(encoder scale.Encoder) error { 39 return encoder.Write(d) 40 } 41 42 // Decode implements decoding for Data, which just reads all the remaining bytes into Data 43 func (d *Data) Decode(decoder scale.Decoder) error { 44 for i := 0; true; i++ { 45 b, err := decoder.ReadOneByte() 46 if err == io.EOF { 47 break 48 } 49 if err != nil { 50 return err 51 } 52 *d = append((*d)[:i], b) 53 } 54 return nil 55 } 56 57 // Hex returns a hex string representation of the value 58 func (d Data) Hex() string { 59 return fmt.Sprintf("%#x", d) 60 }