diff --git a/decor/optimistic_string_writer.go b/decor/optimistic_string_writer.go new file mode 100644 index 0000000..ea9fda7 --- /dev/null +++ b/decor/optimistic_string_writer.go @@ -0,0 +1,12 @@ +package decor + +import "io" + +func optimisticStringWriter(w io.Writer) func(string) { + return func(s string) { + _, err := io.WriteString(w, s) + if err != nil { + panic(err) + } + } +} diff --git a/decor/percentage.go b/decor/percentage.go index 2b0a7a9..6e7f5c6 100644 --- a/decor/percentage.go +++ b/decor/percentage.go @@ -2,7 +2,6 @@ import ( "fmt" - "io" "strconv" "github.com/vbauerster/mpb/v7/internal" @@ -24,12 +23,12 @@ } } - io.WriteString(st, strconv.FormatFloat(float64(s), 'f', prec, 64)) - + osw := optimisticStringWriter(st) + osw(strconv.FormatFloat(float64(s), 'f', prec, 64)) if st.Flag(' ') { - io.WriteString(st, " ") + osw(" ") } - io.WriteString(st, "%") + osw("%") } // Percentage returns percentage decorator. It's a wrapper of NewPercentage. diff --git a/decor/size_type.go b/decor/size_type.go index 2b06255..12879b8 100644 --- a/decor/size_type.go +++ b/decor/size_type.go @@ -2,7 +2,6 @@ import ( "fmt" - "io" "strconv" ) @@ -50,12 +49,12 @@ unit = _iTiB } - io.WriteString(st, strconv.FormatFloat(float64(self)/float64(unit), 'f', prec, 64)) - + osw := optimisticStringWriter(st) + osw(strconv.FormatFloat(float64(self)/float64(unit), 'f', prec, 64)) if st.Flag(' ') { - io.WriteString(st, " ") + osw(" ") } - io.WriteString(st, unit.String()) + osw(unit.String()) } const ( @@ -99,10 +98,10 @@ unit = _TB } - io.WriteString(st, strconv.FormatFloat(float64(self)/float64(unit), 'f', prec, 64)) - + osw := optimisticStringWriter(st) + osw(strconv.FormatFloat(float64(self)/float64(unit), 'f', prec, 64)) if st.Flag(' ') { - io.WriteString(st, " ") + osw(" ") } - io.WriteString(st, unit.String()) + osw(unit.String()) } diff --git a/decor/speed.go b/decor/speed.go index 634edab..99cfde2 100644 --- a/decor/speed.go +++ b/decor/speed.go @@ -2,7 +2,6 @@ import ( "fmt" - "io" "math" "time" @@ -24,7 +23,7 @@ func (self *speedFormatter) Format(st fmt.State, verb rune) { self.Formatter.Format(st, verb) - io.WriteString(st, "/s") + optimisticStringWriter(st)("/s") } // EwmaSpeed exponential-weighted-moving-average based speed decorator.