ficsit-cli-flake/utils/progress.go

39 lines
601 B
Go
Raw Permalink Normal View History

package utils
import (
"io"
)
type GenericProgress struct {
Completed int64
Total int64
}
func (gp GenericProgress) Percentage() float64 {
if gp.Total == 0 {
return 0
}
return float64(gp.Completed) / float64(gp.Total)
}
var _ io.Writer = (*Progresser)(nil)
type Progresser struct {
Updates chan<- GenericProgress
Total int64
Running int64
}
func (pt *Progresser) Write(p []byte) (int, error) {
pt.Running += int64(len(p))
if pt.Updates != nil {
select {
case pt.Updates <- GenericProgress{Completed: pt.Running, Total: pt.Total}:
default:
}
}
return len(p), nil
}