37 lines
552 B
Go
37 lines
552 B
Go
package slicewriter
|
|
|
|
import "io"
|
|
|
|
type SliceWriter struct {
|
|
off int
|
|
buf []byte
|
|
}
|
|
|
|
func (w *SliceWriter) Write(p []byte) (int, error) {
|
|
if len(p)+w.off <= len(w.buf) {
|
|
copy(w.buf[w.off:], p)
|
|
w.off += len(p)
|
|
return len(p), nil
|
|
}
|
|
|
|
space := len(w.buf) - w.off
|
|
copy(w.buf[:w.off], p[:space])
|
|
w.off += space
|
|
return space, io.ErrShortWrite
|
|
}
|
|
|
|
func (w *SliceWriter) Reset() {
|
|
w.off = 0
|
|
}
|
|
|
|
func (w *SliceWriter) Bytes() []byte {
|
|
return w.buf[:w.off]
|
|
}
|
|
|
|
func NewSliceWriter(b []byte) *SliceWriter {
|
|
return &SliceWriter{
|
|
off: 0,
|
|
buf: b,
|
|
}
|
|
}
|