Files
clawgo/pkg/tools/tracked_output.go

44 lines
656 B
Go

package tools
import (
"bytes"
"sync"
"sync/atomic"
)
// trackedOutput is a thread-safe writer+buffer pair used by command progress checks.
type trackedOutput struct {
mu sync.Mutex
buf bytes.Buffer
size atomic.Int64
}
func (t *trackedOutput) Write(p []byte) (int, error) {
if t == nil {
return 0, nil
}
t.mu.Lock()
n, err := t.buf.Write(p)
t.mu.Unlock()
if n > 0 {
t.size.Add(int64(n))
}
return n, err
}
func (t *trackedOutput) Len() int {
if t == nil {
return 0
}
return int(t.size.Load())
}
func (t *trackedOutput) String() string {
if t == nil {
return ""
}
t.mu.Lock()
defer t.mu.Unlock()
return t.buf.String()
}