| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | package buftype MergingReader struct {	reader        Reader	timeoutReader TimeoutReader	leftover      *Buffer}func NewMergingReader(reader Reader) Reader {	return &MergingReader{		reader:        reader,		timeoutReader: reader.(TimeoutReader),	}}func (r *MergingReader) Read() (*Buffer, error) {	if r.leftover != nil {		b := r.leftover		r.leftover = nil		return b, nil	}	b, err := r.reader.Read()	if err != nil {		return nil, err	}	if b.IsFull() {		return b, nil	}	if r.timeoutReader == nil {		return b, nil	}	for {		b2, err := r.timeoutReader.ReadTimeout(0)		if err != nil {			break		}		nBytes := b.Append(b2.Bytes())		b2.SliceFrom(nBytes)		if b2.IsEmpty() {			b2.Release()		} else {			r.leftover = b2			break		}	}	return b, nil}
 |