31 lines
452 B
Go
31 lines
452 B
Go
package term
|
|
|
|
import (
|
|
"bytes"
|
|
"sync"
|
|
)
|
|
|
|
type NextWriter struct {
|
|
b bytes.Buffer
|
|
mu sync.Mutex
|
|
}
|
|
|
|
func (w *NextWriter) Write(p []byte) (int, error) {
|
|
w.mu.Lock()
|
|
defer w.mu.Unlock()
|
|
return w.b.Write(p)
|
|
}
|
|
|
|
func (w *NextWriter) Read() ([]byte, int, error) {
|
|
w.mu.Lock()
|
|
defer w.mu.Unlock()
|
|
p := w.b.Bytes()
|
|
buf := make([]byte, len(p))
|
|
read, err := w.b.Read(buf)
|
|
w.b.Reset()
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
return buf, read, err
|
|
}
|