Codebase list golang-github-vbauerster-mpb / 70225a5
continue on write err, so all decorators are invoked Vladimir Bauer 3 years ago
1 changed file(s) with 19 addition(s) and 16 deletion(s). Raw diff Collapse all Expand all
490490 return io.MultiReader(r, strings.NewReader("\n")), nil
491491 }
492492
493 func (s *bState) drawImpl(stat decor.Statistics) (r io.Reader, err error) {
493 func (s *bState) drawImpl(stat decor.Statistics) (io.Reader, error) {
494494 type decorResult struct {
495495 width int
496496 truncate bool
497 }
498 decorFiller := func(buf *bytes.Buffer, decorators []decor.Decorator) (res decorResult, err error) {
497 err error
498 }
499 decorFiller := func(buf *bytes.Buffer, decorators []decor.Decorator) (res decorResult) {
499500 res.width = stat.AvailableWidth
500501 for _, d := range decorators {
501502 str := d.Decor(stat)
502 if stat.AvailableWidth > 0 && err == nil {
503 if stat.AvailableWidth > 0 {
503504 stat.AvailableWidth -= runewidth.StringWidth(stripansi.Strip(str))
504 _, err = buf.WriteString(str)
505 if res.err == nil {
506 _, res.err = buf.WriteString(str)
507 }
505508 }
506509 }
507510 res.truncate = stat.AvailableWidth < 0
508 return res, err
509 }
511 return res
512 }
513
510514 bufP, bufB, bufA := s.buffers[0], s.buffers[1], s.buffers[2]
511515
512 resP, err := decorFiller(bufP, s.pDecorators)
513 if err != nil {
514 return nil, err
515 }
516
517 resA, err := decorFiller(bufA, s.aDecorators)
518 if err != nil {
519 return nil, err
516 resP := decorFiller(bufP, s.pDecorators)
517 resA := decorFiller(bufA, s.aDecorators)
518
519 for _, err := range []error{resP.err, resA.err} {
520 if err != nil {
521 return nil, err
522 }
520523 }
521524
522525 if resP.truncate {
547550 }
548551 }
549552 } else {
550 err = s.filler.Fill(bufB, stat)
553 err := s.filler.Fill(bufB, stat)
551554 if err != nil {
552555 return nil, err
553556 }