+++ /dev/null
-package common
-
-import (
- "bytes"
- "errors"
- "io"
-)
-
-type PrefixedReader struct {
- Prefix []byte
- reader io.Reader
-}
-
-func NewPrefixedReader(prefix []byte, reader io.Reader) *PrefixedReader {
- return &PrefixedReader{prefix, reader}
-}
-
-func (pr *PrefixedReader) Read(p []byte) (n int, err error) {
- if len(pr.Prefix) > 0 {
- read := copy(p, pr.Prefix)
- pr.Prefix = pr.Prefix[read:]
- return read, nil
- } else {
- return pr.reader.Read(p)
- }
-}
-
-// NOTE: Not goroutine safe
-type BufferCloser struct {
- bytes.Buffer
- Closed bool
-}
-
-func NewBufferCloser(buf []byte) *BufferCloser {
- return &BufferCloser{
- *bytes.NewBuffer(buf),
- false,
- }
-}
-
-func (bc *BufferCloser) Close() error {
- if bc.Closed {
- return errors.New("BufferCloser already closed")
- }
- bc.Closed = true
- return nil
-}
-
-func (bc *BufferCloser) Write(p []byte) (n int, err error) {
- if bc.Closed {
- return 0, errors.New("Cannot write to closed BufferCloser")
- }
- return bc.Buffer.Write(p)
-}
-
-func (bc *BufferCloser) WriteByte(c byte) error {
- if bc.Closed {
- return errors.New("Cannot write to closed BufferCloser")
- }
- return bc.Buffer.WriteByte(c)
-}
-
-func (bc *BufferCloser) WriteRune(r rune) (n int, err error) {
- if bc.Closed {
- return 0, errors.New("Cannot write to closed BufferCloser")
- }
- return bc.Buffer.WriteRune(r)
-}
-
-func (bc *BufferCloser) WriteString(s string) (n int, err error) {
- if bc.Closed {
- return 0, errors.New("Cannot write to closed BufferCloser")
- }
- return bc.Buffer.WriteString(s)
-}