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 }