github.com/demonoid81/moby@v0.0.0-20200517203328-62dd8e17c460/pkg/ioutils/writers.go (about)

     1  package ioutils // import "github.com/demonoid81/moby/pkg/ioutils"
     2  
     3  import "io"
     4  
     5  // NopWriter represents a type which write operation is nop.
     6  type NopWriter struct{}
     7  
     8  func (*NopWriter) Write(buf []byte) (int, error) {
     9  	return len(buf), nil
    10  }
    11  
    12  type nopWriteCloser struct {
    13  	io.Writer
    14  }
    15  
    16  func (w *nopWriteCloser) Close() error { return nil }
    17  
    18  // NopWriteCloser returns a nopWriteCloser.
    19  func NopWriteCloser(w io.Writer) io.WriteCloser {
    20  	return &nopWriteCloser{w}
    21  }
    22  
    23  // NopFlusher represents a type which flush operation is nop.
    24  type NopFlusher struct{}
    25  
    26  // Flush is a nop operation.
    27  func (f *NopFlusher) Flush() {}
    28  
    29  type writeCloserWrapper struct {
    30  	io.Writer
    31  	closer func() error
    32  }
    33  
    34  func (r *writeCloserWrapper) Close() error {
    35  	return r.closer()
    36  }
    37  
    38  // NewWriteCloserWrapper returns a new io.WriteCloser.
    39  func NewWriteCloserWrapper(r io.Writer, closer func() error) io.WriteCloser {
    40  	return &writeCloserWrapper{
    41  		Writer: r,
    42  		closer: closer,
    43  	}
    44  }
    45  
    46  // WriteCounter wraps a concrete io.Writer and hold a count of the number
    47  // of bytes written to the writer during a "session".
    48  // This can be convenient when write return is masked
    49  // (e.g., json.Encoder.Encode())
    50  type WriteCounter struct {
    51  	Count  int64
    52  	Writer io.Writer
    53  }
    54  
    55  // NewWriteCounter returns a new WriteCounter.
    56  func NewWriteCounter(w io.Writer) *WriteCounter {
    57  	return &WriteCounter{
    58  		Writer: w,
    59  	}
    60  }
    61  
    62  func (wc *WriteCounter) Write(p []byte) (count int, err error) {
    63  	count, err = wc.Writer.Write(p)
    64  	wc.Count += int64(count)
    65  	return
    66  }