github.com/jmigpin/editor@v1.6.0/util/iout/limitedwriter.go (about)

     1  package iout
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  )
     7  
     8  type LimitedWriter struct {
     9  	avail int
    10  	buf   bytes.Buffer
    11  }
    12  
    13  func NewLimitedWriter(size int) *LimitedWriter {
    14  	return &LimitedWriter{avail: size}
    15  }
    16  
    17  func (w *LimitedWriter) Write(p []byte) (n int, err error) {
    18  	if w.avail < len(p) {
    19  		p = p[:w.avail]
    20  		err = fmt.Errorf("limit reached")
    21  	}
    22  	n, err2 := w.buf.Write(p)
    23  	if err2 != nil {
    24  		return n, err2
    25  	}
    26  	w.avail -= n
    27  	return n, err
    28  }
    29  
    30  func (w *LimitedWriter) Bytes() []byte {
    31  	return w.buf.Bytes()
    32  }