Codebase list golang-github-vbauerster-mpb / d4e4111
refactoring bar options Vladimir Bauer 6 years ago
1 changed file(s) with 25 addition(s) and 29 deletion(s). Raw diff Collapse all Expand all
33 "bytes"
44 "io"
55
6 "github.com/vbauerster/mpb/v4/decor"
6 "github.com/vbauerster/mpb/v5/decor"
77 )
88
99 // BarOption is a function option which changes the default behavior of a bar.
4949 }
5050 }
5151
52 // BarReplaceOnComplete is deprecated. Use BarParkTo instead.
53 func BarReplaceOnComplete(runningBar *Bar) BarOption {
54 return BarParkTo(runningBar)
55 }
56
57 // BarParkTo parks constructed bar into the runningBar. In other words,
58 // constructed bar will replace runningBar after it has been completed.
59 func BarParkTo(runningBar *Bar) BarOption {
52 // BarQueueAfter queues this (being constructed) bar to relplace
53 // runningBar after it has been completed.
54 func BarQueueAfter(runningBar *Bar) BarOption {
6055 if runningBar == nil {
6156 return nil
6257 }
6560 }
6661 }
6762
68 // BarRemoveOnComplete removes bar filler and decorators if any, on
69 // complete event.
63 // BarRemoveOnComplete removes both bar's filler and its decorators
64 // on complete event.
7065 func BarRemoveOnComplete() BarOption {
7166 return func(s *bState) {
7267 s.dropOnComplete = true
7368 }
7469 }
7570
76 // BarClearOnComplete clears bar filler only, on complete event.
77 func BarClearOnComplete() BarOption {
78 return BarOnComplete("")
79 }
80
81 // BarOnComplete replaces bar filler with message, on complete event.
82 func BarOnComplete(message string) BarOption {
83 return func(s *bState) {
84 s.filler = makeBarOnCompleteFiller(s.baseF, message)
85 }
86 }
87
88 func makeBarOnCompleteFiller(filler Filler, message string) Filler {
89 return FillerFunc(func(w io.Writer, width int, st *decor.Statistics) {
71 // BarFillerClearOnComplete clears bar's filler on complete event.
72 // It's shortcut for BarFillerOnComplete("").
73 func BarFillerClearOnComplete() BarOption {
74 return BarFillerOnComplete("")
75 }
76
77 // BarFillerOnComplete replaces bar's filler with message, on complete event.
78 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) {
9086 if st.Completed {
9187 io.WriteString(w, message)
9288 } else {
106102
107103 // BarExtender is an option to extend bar to the next new line, with
108104 // arbitrary output.
109 func BarExtender(extender Filler) BarOption {
105 func BarExtender(extender BarFiller) BarOption {
110106 if extender == nil {
111107 return nil
112108 }
115111 }
116112 }
117113
118 func makeExtFunc(extender Filler) extFunc {
114 func makeExtFunc(extender BarFiller) extFunc {
119115 buf := new(bytes.Buffer)
120116 nl := []byte("\n")
121117 return func(r io.Reader, tw int, st *decor.Statistics) (io.Reader, int) {
174170 if len(frames) == 0 {
175171 return nil
176172 }
177 chk := func(filler Filler) (interface{}, bool) {
173 chk := func(filler BarFiller) (interface{}, bool) {
178174 t, ok := filler.(*spinnerFiller)
179175 return t, ok
180176 }
188184 // actual type. If you implement your own Filler, so most probably
189185 // you'll need this. See BarStyle or SpinnerStyle for example.
190186 func MakeFillerTypeSpecificBarOption(
191 typeChecker func(Filler) (interface{}, bool),
187 typeChecker func(BarFiller) (interface{}, bool),
192188 cb func(interface{}),
193189 ) BarOption {
194190 return func(s *bState) {