summaryrefslogtreecommitdiff
path: root/vendor/github.com/tdewolff/parse/v2/buffer
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/tdewolff/parse/v2/buffer')
-rw-r--r--vendor/github.com/tdewolff/parse/v2/buffer/writer.go28
1 files changed, 26 insertions, 2 deletions
diff --git a/vendor/github.com/tdewolff/parse/v2/buffer/writer.go b/vendor/github.com/tdewolff/parse/v2/buffer/writer.go
index b3c9990d9..6c94201ff 100644
--- a/vendor/github.com/tdewolff/parse/v2/buffer/writer.go
+++ b/vendor/github.com/tdewolff/parse/v2/buffer/writer.go
@@ -1,14 +1,29 @@
package buffer
+import (
+ "io"
+)
+
// Writer implements an io.Writer over a byte slice.
type Writer struct {
- buf []byte
+ buf []byte
+ err error
+ expand bool
}
// NewWriter returns a new Writer for a given byte slice.
func NewWriter(buf []byte) *Writer {
return &Writer{
- buf: buf,
+ buf: buf,
+ expand: true,
+ }
+}
+
+// NewStaticWriter returns a new Writer for a given byte slice. It does not reallocate and expand the byte-slice.
+func NewStaticWriter(buf []byte) *Writer {
+ return &Writer{
+ buf: buf,
+ expand: false,
}
}
@@ -17,6 +32,10 @@ func (w *Writer) Write(b []byte) (int, error) {
n := len(b)
end := len(w.buf)
if end+n > cap(w.buf) {
+ if !w.expand {
+ w.err = io.EOF
+ return 0, io.EOF
+ }
buf := make([]byte, end, 2*cap(w.buf)+n)
copy(buf, w.buf)
w.buf = buf
@@ -39,3 +58,8 @@ func (w *Writer) Bytes() []byte {
func (w *Writer) Reset() {
w.buf = w.buf[:0]
}
+
+// Close returns the last error.
+func (w *Writer) Close() error {
+ return w.err
+}