github.com/stafiprotocol/go-substrate-rpc-client@v1.4.7/types/storage_data_raw.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  // StorageDataRaw contains raw bytes that are not decoded/encoded.
    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 StorageDataRaw []byte
    31  
    32  // NewStorageDataRaw creates a new StorageDataRaw type
    33  func NewStorageDataRaw(b []byte) StorageDataRaw {
    34  	return StorageDataRaw(b)
    35  }
    36  
    37  // Encode implements encoding for StorageDataRaw, which just unwraps the bytes of StorageDataRaw
    38  func (s StorageDataRaw) Encode(encoder scale.Encoder) error {
    39  	return encoder.Write(s)
    40  }
    41  
    42  // Decode implements decoding for StorageDataRaw, which just reads all the remaining bytes into StorageDataRaw
    43  func (s *StorageDataRaw) 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  		*s = append((*s)[:i], b)
    53  	}
    54  	return nil
    55  }
    56  
    57  // Hex returns a hex string representation of the value
    58  func (s StorageDataRaw) Hex() string {
    59  	return fmt.Sprintf("%#x", s)
    60  }