Browse Source

add error handler

pull/2/head
andrey1s 4 years ago
parent
commit
365fc32888
  1. 2
      console.go
  2. 4
      input/wrap/input.go
  3. 25
      output/output.go
  4. 11
      output/writer/output.go

2
console.go

@ -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()

4
input/wrap/input.go

@ -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)

25
output/output.go

@ -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) {

11
output/writer/output.go

@ -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

Loading…
Cancel
Save