mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 23:32:24 -06:00 
			
		
		
		
	* add minify dependency specifically for markdown * rearrange markdown formatting * update markdown tests
		
			
				
	
	
		
			65 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package buffer
 | 
						|
 | 
						|
import (
 | 
						|
	"io"
 | 
						|
)
 | 
						|
 | 
						|
// Writer implements an io.Writer over a byte slice.
 | 
						|
type Writer struct {
 | 
						|
	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,
 | 
						|
		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,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Write writes bytes from the given byte slice and returns the number of bytes written and an error if occurred. When err != nil, n == 0.
 | 
						|
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
 | 
						|
	}
 | 
						|
	w.buf = w.buf[:end+n]
 | 
						|
	return copy(w.buf[end:], b), nil
 | 
						|
}
 | 
						|
 | 
						|
// Len returns the length of the underlying byte slice.
 | 
						|
func (w *Writer) Len() int {
 | 
						|
	return len(w.buf)
 | 
						|
}
 | 
						|
 | 
						|
// Bytes returns the underlying byte slice.
 | 
						|
func (w *Writer) Bytes() []byte {
 | 
						|
	return w.buf
 | 
						|
}
 | 
						|
 | 
						|
// Reset empties and reuses the current buffer. Subsequent writes will overwrite the buffer, so any reference to the underlying slice is invalidated after this call.
 | 
						|
func (w *Writer) Reset() {
 | 
						|
	w.buf = w.buf[:0]
 | 
						|
}
 | 
						|
 | 
						|
// Close returns the last error.
 | 
						|
func (w *Writer) Close() error {
 | 
						|
	return w.err
 | 
						|
}
 |