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  }