internal/cli/provider.go (33 lines of code) (raw):

package cli import ( "context" "os" "os/signal" "github.com/charmbracelet/log" ) // Provider provides CLI settings. type Provider interface { // Context - creates a context for the command to run in. Context() (context.Context, context.CancelFunc) // Logger - creates a logger for the command to use. Logger() *log.Logger } type providerImpl struct { logger *log.Logger } // Default creates a default CLI provider instance. func Default(debug bool) *providerImpl { logLevel := log.InfoLevel if debug { logLevel = log.DebugLevel } return &providerImpl{ logger: log.NewWithOptions(os.Stderr, log.Options{ Level: logLevel, ReportTimestamp: false, }), } } var _ Provider = (*providerImpl)(nil) func (p *providerImpl) Context() (context.Context, context.CancelFunc) { // to allow user cancellation via ctrl+c return signal.NotifyContext(context.Background(), os.Interrupt) } func (p *providerImpl) Logger() *log.Logger { return p.logger }