Codebase list golang-github-vbauerster-mpb / fc20986
add BarFillerMiddleware BarOption Vladimir Bauer 6 years ago
3 changed file(s) with 18 addition(s) and 27 deletion(s). Raw diff Collapse all Expand all
4343 type extFunc func(in io.Reader, reqWidth int, st decor.Statistics) (out io.Reader, lines int)
4444
4545 type bState struct {
46 baseF BarFiller
4746 filler BarFiller
4847 id int
4948 reqWidth int
7676
7777 // BarFillerOnComplete replaces bar's filler with message, on complete event.
7878 func BarFillerOnComplete(message string) BarOption {
79 return func(s *bState) {
80 s.filler = makeBarFillerOnComplete(s.baseF, message)
81 }
82 }
83
84 func makeBarFillerOnComplete(filler BarFiller, message string) BarFiller {
85 return BarFillerFunc(func(w io.Writer, width int, st decor.Statistics) {
86 if st.Completed {
87 io.WriteString(w, message)
88 } else {
89 filler.Fill(w, width, st)
90 }
79 return BarFillerMiddleware(func(base BarFiller) BarFiller {
80 return BarFillerFunc(func(w io.Writer, reqWidth int, st decor.Statistics) {
81 if st.Completed {
82 io.WriteString(w, message)
83 } else {
84 base.Fill(w, reqWidth, st)
85 }
86 })
9187 })
88 }
89
90 // BarFillerMiddleware provides a way to augment default BarFiller.
91 func BarFillerMiddleware(middle func(BarFiller) BarFiller) BarOption {
92 return func(s *bState) {
93 s.filler = middle(s.filler)
94 }
9295 }
9396
9497 // BarPriority sets bar's priority. Zero is highest priority, i.e. bar
137140 SetStyle(string)
138141 }
139142 return func(s *bState) {
140 if t, ok := s.baseF.(styleSetter); ok {
143 if t, ok := s.filler.(styleSetter); ok {
141144 t.SetStyle(style)
142145 }
143146 }
157160 SetReverse(bool)
158161 }
159162 return func(s *bState) {
160 if t, ok := s.baseF.(revSetter); ok {
163 if t, ok := s.filler.(revSetter); ok {
161164 t.SetReverse(true)
162165 }
163166 }
187190 cb func(interface{}),
188191 ) BarOption {
189192 return func(s *bState) {
190 if t, ok := typeChecker(s.baseF); ok {
193 if t, ok := typeChecker(s.filler); ok {
191194 cb(t)
192195 }
193196 }
339339 func (s *pState) makeBarState(total int64, filler BarFiller, options ...BarOption) *bState {
340340 bs := &bState{
341341 total: total,
342 baseF: extractBaseFiller(filler),
343342 filler: filler,
344343 priority: s.idCount,
345344 id: s.idCount,
383382 }()
384383 }
385384 }
386
387 func extractBaseFiller(f BarFiller) BarFiller {
388 type wrapper interface {
389 Base() BarFiller
390 }
391 if f, ok := f.(wrapper); ok {
392 return extractBaseFiller(f.Base())
393 }
394 return f
395 }