From 365fc3288815fb9b6a66a4e4d77f8b47f1d21096 Mon Sep 17 00:00:00 2001 From: andrey1s Date: Sun, 25 Oct 2020 11:06:43 +0300 Subject: [PATCH] add error handler --- console.go | 2 +- input/wrap/input.go | 4 ++++ output/output.go | 25 +++++++++++++++---------- output/writer/output.go | 11 ++++++----- 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/console.go b/console.go index b4c08b0..f37217f 100644 --- a/console.go +++ b/console.go @@ -25,7 +25,7 @@ func Execute(ctx context.Context, cmd *Command, opts ...func(*App)) { 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 { def := input.NewDefinition() diff --git a/input/wrap/input.go b/input/wrap/input.go index 7ca33f9..55a7368 100644 --- a/input/wrap/input.go +++ b/input/wrap/input.go @@ -40,6 +40,10 @@ func (i *Input) Bind(ctx context.Context, def *input.Definition) error { 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 { for _, name := range def.Options() { opt, err := def.Option(name) diff --git a/output/output.go b/output/output.go index b9906b0..68927b7 100644 --- a/output/output.go +++ b/output/output.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "io" + "os" ) type Verbosity int @@ -16,46 +17,50 @@ const ( 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) 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) { - o(ctx, VerbosityNorm, msg, kv...) + writeError(o(ctx, VerbosityNorm, msg, kv...)) } 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{}) { - o(ctx, VerbosityNorm, fmt.Sprintln(args...)) + writeError(o(ctx, VerbosityNorm, fmt.Sprintln(args...))) } 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) { - o(ctx, VerbosityInfo, msg, kv...) + writeError(o(ctx, VerbosityInfo, msg, kv...)) } 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) { - o(ctx, VerbosityDebug, msg, kv...) + writeError(o(ctx, VerbosityDebug, msg, kv...)) } 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) { - o(ctx, VerbosityTrace, msg, kv...) + writeError(o(ctx, VerbosityTrace, msg, kv...)) } func (o Output) Write(b []byte) (int, error) { diff --git a/output/writer/output.go b/output/writer/output.go index 2175cba..4678499 100644 --- a/output/writer/output.go +++ b/output/writer/output.go @@ -11,6 +11,8 @@ import ( "gitoa.ru/go-4devs/console/output" ) +const newline = "\n" + func Stderr() output.Output { 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 { if len(kv) > 0 { - newline := "" - if msg[len(msg)-1:] == "\n" { - newline = "\n" + nline := "" + if msg[len(msg)-1:] == newline { + nline = newline } - return "msg=\"" + strings.TrimSpace(msg) + "\", " + output.KeyValues(kv).String() + newline - + return "msg=\"" + strings.TrimSpace(msg) + "\", " + output.KeyValues(kv).String() + nline } return msg