func WithContext(ctx Context) augment {
	return func(o *barOpts) {
		o.context = ctx
	}
}
WithContext augments an options constructor by setting the initial values
for the bar's context
package bar
import (
	"fmt"
	"time"
)
type barOpts struct {
	total, width               int
	start, end                 string
	complete, head, incomplete string
	formatString               string
	callback                   func()
	output                     Output
	context                    Context
	debug                      bool
}
type augment func(*barOpts)
func NewWithFormat(t int, f string) *Bar {
	return &Bar{
		progress:     0,
		total:        t,
		width:        20,
		start:        "(",
		complete:     "█",
		head:         "█",
		incomplete:   " ",
		end:          ")",
		closed:       false,
		startedAt:    time.Now(),
		rate:         0,
		formatString: f,
		format:       tokenize(f, nil),
		callback:     noop,
		output:       initializeStdout(),
	}
}
func NewWithOpts(opts ...func(o *barOpts)) *Bar {
	o := &barOpts{
		start:        "(",
		complete:     "█",
		head:         "█",
		incomplete:   " ",
		end:          ")",
		formatString: defaultFormat,
		callback:     noop,
		output:       initializeStdout(),
	}
	for _, aug := range opts {
		aug(o)
	}
	if o.width <= 0 {
		panic(fmt.Sprintf("a bar may not have a zero or negative width (received: %d)", o.width))
	}
	return &Bar{
		progress:     0,
		total:        o.total,
		width:        o.width,
		start:        o.start,
		complete:     o.complete,
		head:         o.head,
		incomplete:   o.incomplete,
		end:          o.end,
		closed:       false,
		startedAt:    time.Now(),
		rate:         0,
		formatString: o.formatString,
		format:       tokenize(o.formatString, o.context.customVerbs()),
		callback:     o.callback,
		output:       o.output,
		context:      o.context,
		debug:        o.debug,
	}
}
func WithDisplay(start, complete, head, incomplete, end string) augment {
	return func(o *barOpts) {
		o.start = start
		o.complete = complete
		o.head = head
		o.incomplete = incomplete
		o.end = end
	}
}
func WithDimensions(total, width int) augment {
	return func(o *barOpts) {
		o.total = total
		o.width = width
	}
}
func WithFormat(f string) augment {
	return func(o *barOpts) {
		o.formatString = f
	}
}
func WithCallback(cb func()) augment {
	return func(o *barOpts) {
		o.callback = cb
	}
}
func WithOutput(out Output) augment {
	return func(o *barOpts) {
		o.output = out
	}
}