github.com/grahambrereton-form3/tilt@v0.10.18/internal/engine/runtimelog/reader.go (about)

     1  package runtimelog
     2  
     3  import (
     4  	"context"
     5  	"io"
     6  )
     7  
     8  // A reader that will stop returning data after its context has been canceled.
     9  //
    10  // If any data is read from the underlying stream after the cancel happens, throw the data out.
    11  type HardCancelReader struct {
    12  	ctx    context.Context
    13  	reader io.Reader
    14  }
    15  
    16  func NewHardCancelReader(ctx context.Context, reader io.Reader) HardCancelReader {
    17  	return HardCancelReader{ctx: ctx, reader: reader}
    18  }
    19  
    20  func (r HardCancelReader) Read(b []byte) (int, error) {
    21  	err := r.ctx.Err()
    22  	if err != nil {
    23  		return 0, err
    24  	}
    25  	n, err := r.reader.Read(b)
    26  	if r.ctx.Err() != nil {
    27  		return 0, r.ctx.Err()
    28  	}
    29  	return n, err
    30  }