github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/uio/progress.go (about) 1 // Copyright 2019 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package uio 6 7 import ( 8 "io" 9 "strings" 10 ) 11 12 // ProgressReader implements io.Reader and prints Symbol to W after every 13 // Interval bytes passes through R. 14 type ProgressReader struct { 15 R io.Reader 16 17 Symbol string 18 Interval int 19 W io.Writer 20 21 counter int 22 } 23 24 // Read implements io.Reader for ProgressReader. 25 func (r *ProgressReader) Read(p []byte) (n int, err error) { 26 defer func() { 27 //log.Print("r.Counter %d, r.Interval %d, n 28 numSymbols := (r.counter%r.Interval + n) / r.Interval 29 r.W.Write([]byte(strings.Repeat(r.Symbol, numSymbols))) 30 r.counter += n 31 }() 32 return r.R.Read(p) 33 }