add error handler
This commit is contained in:
@@ -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()
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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,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
|
||||||
|
|||||||
Reference in New Issue
Block a user