github.com/wanddynosios/cli/v8@v8.7.9-0.20240221182337-1a92e3a7017f/api/cloudcontroller/pipebomb.go (about) 1 package cloudcontroller 2 3 import ( 4 "io" 5 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 7 ) 8 9 // Pipebomb is a wrapper around an io.Pipe's io.ReadCloser that turns it into a 10 // ReadSeeker that errors on Seek calls. This is designed to prevent the caller 11 // from rereading the body multiple times. 12 type Pipebomb struct { 13 io.ReadCloser 14 } 15 16 // Seek returns a PipeSeekError; allowing the top level calling function to 17 // handle the retry instead of seeking back to the beginning of the Reader. 18 func (*Pipebomb) Seek(offset int64, whence int) (int64, error) { 19 return 0, ccerror.PipeSeekError{} 20 } 21 22 // NewPipeBomb returns an io.WriteCloser that can be used to stream data to a 23 // the Pipebomb. 24 func NewPipeBomb() (*Pipebomb, io.WriteCloser) { 25 writerOutput, writerInput := io.Pipe() 26 return &Pipebomb{ReadCloser: writerOutput}, writerInput 27 }