github.com/supragya/TendermintConnector@v0.0.0-20210619045051-113e32b84fb1/_deprecated_chains/cosmos/libs/common/io.go (about)

     1  package common
     2  
     3  import (
     4  	"bytes"
     5  	"errors"
     6  	"io"
     7  )
     8  
     9  type PrefixedReader struct {
    10  	Prefix []byte
    11  	reader io.Reader
    12  }
    13  
    14  func NewPrefixedReader(prefix []byte, reader io.Reader) *PrefixedReader {
    15  	return &PrefixedReader{prefix, reader}
    16  }
    17  
    18  func (pr *PrefixedReader) Read(p []byte) (n int, err error) {
    19  	if len(pr.Prefix) > 0 {
    20  		read := copy(p, pr.Prefix)
    21  		pr.Prefix = pr.Prefix[read:]
    22  		return read, nil
    23  	}
    24  	return pr.reader.Read(p)
    25  }
    26  
    27  // NOTE: Not goroutine safe
    28  type BufferCloser struct {
    29  	bytes.Buffer
    30  	Closed bool
    31  }
    32  
    33  func NewBufferCloser(buf []byte) *BufferCloser {
    34  	return &BufferCloser{
    35  		*bytes.NewBuffer(buf),
    36  		false,
    37  	}
    38  }
    39  
    40  func (bc *BufferCloser) Close() error {
    41  	if bc.Closed {
    42  		return errors.New("BufferCloser already closed")
    43  	}
    44  	bc.Closed = true
    45  	return nil
    46  }
    47  
    48  func (bc *BufferCloser) Write(p []byte) (n int, err error) {
    49  	if bc.Closed {
    50  		return 0, errors.New("Cannot write to closed BufferCloser")
    51  	}
    52  	return bc.Buffer.Write(p)
    53  }
    54  
    55  func (bc *BufferCloser) WriteByte(c byte) error {
    56  	if bc.Closed {
    57  		return errors.New("Cannot write to closed BufferCloser")
    58  	}
    59  	return bc.Buffer.WriteByte(c)
    60  }
    61  
    62  func (bc *BufferCloser) WriteRune(r rune) (n int, err error) {
    63  	if bc.Closed {
    64  		return 0, errors.New("Cannot write to closed BufferCloser")
    65  	}
    66  	return bc.Buffer.WriteRune(r)
    67  }
    68  
    69  func (bc *BufferCloser) WriteString(s string) (n int, err error) {
    70  	if bc.Closed {
    71  		return 0, errors.New("Cannot write to closed BufferCloser")
    72  	}
    73  	return bc.Buffer.WriteString(s)
    74  }