github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/topic/topicreadercommon/one_time_reader.go (about)

     1  package topicreadercommon
     2  
     3  import (
     4  	"io"
     5  )
     6  
     7  type oneTimeReader struct {
     8  	err    error
     9  	reader io.Reader
    10  }
    11  
    12  func newOneTimeReader(reader io.Reader) oneTimeReader {
    13  	return oneTimeReader{
    14  		reader: reader,
    15  	}
    16  }
    17  
    18  func (s *oneTimeReader) Read(p []byte) (n int, err error) {
    19  	if s.err != nil {
    20  		return 0, s.err
    21  	}
    22  
    23  	n, err = s.reader.Read(p)
    24  	if err != nil {
    25  		s.err = err
    26  		s.reader = nil
    27  	}
    28  
    29  	return n, err
    30  }