add error handler

This commit is contained in:
2020-10-25 11:06:43 +03:00
parent 13bda376d6
commit 365fc32888
4 changed files with 26 additions and 16 deletions

View File

@@ -25,7 +25,7 @@ func Execute(ctx context.Context, cmd *Command, opts ...func(*App)) {
New(opts...).exec(ctx, cmd) New(opts...).exec(ctx, cmd)
} }
// Run current command by input and output/ // Run current command by input and output.
func Run(ctx context.Context, cmd *Command, in input.Input, out output.Output) error { func Run(ctx context.Context, cmd *Command, in input.Input, out output.Output) error {
def := input.NewDefinition() def := input.NewDefinition()

View File

@@ -40,6 +40,10 @@ func (i *Input) Bind(ctx context.Context, def *input.Definition) error {
return i.bindOptions(ctx, def) return i.bindOptions(ctx, def)
} }
func (i *Input) build(ctx context.Context) error {
return nil
}
func (i *Input) bindOptions(ctx context.Context, def *input.Definition) error { func (i *Input) bindOptions(ctx context.Context, def *input.Definition) error {
for _, name := range def.Options() { for _, name := range def.Options() {
opt, err := def.Option(name) opt, err := def.Option(name)

View File

@@ -4,6 +4,7 @@ import (
"context" "context"
"fmt" "fmt"
"io" "io"
"os"
) )
type Verbosity int type Verbosity int
@@ -16,46 +17,50 @@ const (
VerbosityTrace VerbosityTrace
) )
func writeError(n int, err error) {
fmt.Fprint(os.Stderr, err)
}
type Output func(ctx context.Context, verb Verbosity, msg string, args ...KeyValue) (int, error) type Output func(ctx context.Context, verb Verbosity, msg string, args ...KeyValue) (int, error)
func (o Output) Print(ctx context.Context, args ...interface{}) { func (o Output) Print(ctx context.Context, args ...interface{}) {
o(ctx, VerbosityNorm, fmt.Sprint(args...)) writeError(o(ctx, VerbosityNorm, fmt.Sprint(args...)))
} }
func (o Output) PrintKV(ctx context.Context, msg string, kv ...KeyValue) { func (o Output) PrintKV(ctx context.Context, msg string, kv ...KeyValue) {
o(ctx, VerbosityNorm, msg, kv...) writeError(o(ctx, VerbosityNorm, msg, kv...))
} }
func (o Output) Printf(ctx context.Context, format string, args ...interface{}) { func (o Output) Printf(ctx context.Context, format string, args ...interface{}) {
o(ctx, VerbosityNorm, fmt.Sprintf(format, args...)) writeError(o(ctx, VerbosityNorm, fmt.Sprintf(format, args...)))
} }
func (o Output) Println(ctx context.Context, args ...interface{}) { func (o Output) Println(ctx context.Context, args ...interface{}) {
o(ctx, VerbosityNorm, fmt.Sprintln(args...)) writeError(o(ctx, VerbosityNorm, fmt.Sprintln(args...)))
} }
func (o Output) Info(ctx context.Context, args ...interface{}) { func (o Output) Info(ctx context.Context, args ...interface{}) {
o(ctx, VerbosityInfo, fmt.Sprint(args...)) writeError(o(ctx, VerbosityInfo, fmt.Sprint(args...)))
} }
func (o Output) InfoKV(ctx context.Context, msg string, kv ...KeyValue) { func (o Output) InfoKV(ctx context.Context, msg string, kv ...KeyValue) {
o(ctx, VerbosityInfo, msg, kv...) writeError(o(ctx, VerbosityInfo, msg, kv...))
} }
func (o Output) Debug(ctx context.Context, args ...interface{}) { func (o Output) Debug(ctx context.Context, args ...interface{}) {
o(ctx, VerbosityDebug, fmt.Sprint(args...)) writeError(o(ctx, VerbosityDebug, fmt.Sprint(args...)))
} }
func (o Output) DebugKV(ctx context.Context, msg string, kv ...KeyValue) { func (o Output) DebugKV(ctx context.Context, msg string, kv ...KeyValue) {
o(ctx, VerbosityDebug, msg, kv...) writeError(o(ctx, VerbosityDebug, msg, kv...))
} }
func (o Output) Trace(ctx context.Context, args ...interface{}) { func (o Output) Trace(ctx context.Context, args ...interface{}) {
o(ctx, VerbosityTrace, fmt.Sprint(args...)) writeError(o(ctx, VerbosityTrace, fmt.Sprint(args...)))
} }
func (o Output) TraceKV(ctx context.Context, msg string, kv ...KeyValue) { func (o Output) TraceKV(ctx context.Context, msg string, kv ...KeyValue) {
o(ctx, VerbosityTrace, msg, kv...) writeError(o(ctx, VerbosityTrace, msg, kv...))
} }
func (o Output) Write(b []byte) (int, error) { func (o Output) Write(b []byte) (int, error) {

View File

@@ -11,6 +11,8 @@ import (
"gitoa.ru/go-4devs/console/output" "gitoa.ru/go-4devs/console/output"
) )
const newline = "\n"
func Stderr() output.Output { func Stderr() output.Output {
return New(os.Stderr, String) return New(os.Stderr, String)
} }
@@ -25,13 +27,12 @@ func Buffer(buf *bytes.Buffer) output.Output {
func String(_ output.Verbosity, msg string, kv ...output.KeyValue) string { func String(_ output.Verbosity, msg string, kv ...output.KeyValue) string {
if len(kv) > 0 { if len(kv) > 0 {
newline := "" nline := ""
if msg[len(msg)-1:] == "\n" { if msg[len(msg)-1:] == newline {
newline = "\n" nline = newline
} }
return "msg=\"" + strings.TrimSpace(msg) + "\", " + output.KeyValues(kv).String() + newline return "msg=\"" + strings.TrimSpace(msg) + "\", " + output.KeyValues(kv).String() + nline
} }
return msg return msg