deferless implementation
Vladimir Bauer
3 years ago
| 149 | 149 | |
| 150 | 150 | func (s *bFiller) Fill(w io.Writer, stat decor.Statistics) (err error) { |
| 151 | 151 | width := internal.CheckRequestedWidth(stat.RequestedWidth, stat.AvailableWidth) |
| 152 | brackets := s.components[iLbound].width + s.components[iRbound].width | |
| 153 | 152 | // don't count brackets as progress |
| 154 | width -= brackets | |
| 153 | width -= (s.components[iLbound].width + s.components[iRbound].width) | |
| 155 | 154 | if width < 0 { |
| 156 | 155 | return nil |
| 157 | 156 | } |
| 160 | 159 | if err != nil { |
| 161 | 160 | return err |
| 162 | 161 | } |
| 163 | defer func() { | |
| 164 | if err == nil { | |
| 165 | _, err = w.Write(s.components[iRbound].bytes) | |
| 166 | } | |
| 167 | }() | |
| 168 | 162 | |
| 169 | 163 | if width == 0 { |
| 170 | return nil | |
| 164 | _, err = w.Write(s.components[iRbound].bytes) | |
| 165 | return err | |
| 171 | 166 | } |
| 172 | 167 | |
| 173 | 168 | var filling [][]byte |
| 236 | 231 | } |
| 237 | 232 | |
| 238 | 233 | if s.rev { |
| 239 | return flush(w, padding, filling) | |
| 240 | } | |
| 241 | return flush(w, filling, padding) | |
| 234 | filling, padding = padding, filling | |
| 235 | } | |
| 236 | err = flush(w, filling, padding) | |
| 237 | if err != nil { | |
| 238 | return err | |
| 239 | } | |
| 240 | _, err = w.Write(s.components[iRbound].bytes) | |
| 241 | return err | |
| 242 | 242 | } |
| 243 | 243 | |
| 244 | 244 | func flush(w io.Writer, filling, padding [][]byte) error { |