From 0d661986d1ae3ad94cf68bd6ebcf096061f34da8 Mon Sep 17 00:00:00 2001 From: andrey Date: Mon, 5 Jan 2026 23:51:55 +0300 Subject: [PATCH] update example --- example/cmd/config/main.go | 3 +- example/go.mod | 6 +-- example/go.sum | 6 ++- example/pkg/command/args.go | 55 +++++++++++++++------------- example/pkg/command/create_user.go | 58 +++++++++++++++++------------ example/pkg/command/hello.go | 57 ++++++++++++++++------------- example/pkg/command/hidden.go | 21 +++++------ example/pkg/command/long.go | 59 +++++++++++++++--------------- example/pkg/command/namespace.go | 20 +++++----- 9 files changed, 152 insertions(+), 133 deletions(-) diff --git a/example/cmd/config/main.go b/example/cmd/config/main.go index 878fde5..22732a7 100644 --- a/example/cmd/config/main.go +++ b/example/cmd/config/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "os" "gitoa.ru/go-4devs/config/provider/arg" "gitoa.ru/go-4devs/config/provider/chain" @@ -22,7 +23,7 @@ func main() { console. New(console.WithInput( chain.New( - arg.New(arg.WithSkip(0)), + arg.New(arg.WithArgs(os.Args)), env.New(Namespace, AppName), &memory.Default{}, ), diff --git a/example/go.mod b/example/go.mod index c3f0ff8..f55aeee 100644 --- a/example/go.mod +++ b/example/go.mod @@ -1,10 +1,10 @@ module gitoa.ru/go-4devs/console/example -go 1.23 +go 1.24.0 toolchain go1.24.1 require ( - gitoa.ru/go-4devs/config v0.0.7 - gitoa.ru/go-4devs/console v0.2.0 + gitoa.ru/go-4devs/config v0.0.8 + gitoa.ru/go-4devs/console v0.2.1-0.20260105202444-e2c6fc0a35a4 ) diff --git a/example/go.sum b/example/go.sum index 3450563..2cf2b51 100644 --- a/example/go.sum +++ b/example/go.sum @@ -1,4 +1,6 @@ -gitoa.ru/go-4devs/config v0.0.7 h1:8q6axRNLgXE5dYQd8Jbh9j+STqevbibVyvwrtsuHpZk= -gitoa.ru/go-4devs/config v0.0.7/go.mod h1:UINWnObZA0nLiJro+TtavUBBvN0cSt17aRHOk20pP74= +gitoa.ru/go-4devs/config v0.0.8 h1:o4p8I9jWJMfiFVVKr50IqCGj1fF+8kmSPDkH0deRvn4= +gitoa.ru/go-4devs/config v0.0.8/go.mod h1:jHKqVafFVW400LC0M4i1ifPapiI9sqpX/QTh+VMadKw= gitoa.ru/go-4devs/console v0.2.0 h1:6lsbArs99GA8vGdnwNDThZNKjFNctNtTlSCUjhgwIpU= gitoa.ru/go-4devs/console v0.2.0/go.mod h1:xi4Svw7T+lylckAQiJQS/2qwDwF4YbIanlhcbQrBAiI= +gitoa.ru/go-4devs/console v0.2.1-0.20260105202444-e2c6fc0a35a4 h1:zOk/59IvgUfCDL6ub6WX4hsqDK79FsZR0gf7s7t3fXM= +gitoa.ru/go-4devs/console v0.2.1-0.20260105202444-e2c6fc0a35a4/go.mod h1:PG/Zyj1dLh7eFlj9bgnV58+Ys6I/MTrS0q9W7oD7z4U= diff --git a/example/pkg/command/args.go b/example/pkg/command/args.go index 6dcfebe..dfc1459 100644 --- a/example/pkg/command/args.go +++ b/example/pkg/command/args.go @@ -7,32 +7,37 @@ import ( "gitoa.ru/go-4devs/config" "gitoa.ru/go-4devs/config/definition/option" "gitoa.ru/go-4devs/console" + "gitoa.ru/go-4devs/console/command" "gitoa.ru/go-4devs/console/output" ) -func Args() *console.Command { - return &console.Command{ - Name: "fdevs:console:arg", - Description: "Understanding how Console Arguments and Options Are Handled", - Configure: func(_ context.Context, def config.Definition) error { - def.Add( - option.Bool("foo", "foo option", option.Short('f')), - option.String("bar", "required bar option", option.Required, option.Short('b')), - option.String("cat", "cat option", option.Short('c')), - option.Time("time", "time example"), - option.Time("hidden", "hidden time example", option.Hidden), - ) - - return nil - }, - Execute: func(ctx context.Context, in config.Provider, out output.Output) error { - out.Println(ctx, "foo: ", console.ReadValue(ctx, in, "foo").Bool(), "") - out.Println(ctx, "bar: ", console.ReadValue(ctx, in, "bar").String(), "") - out.Println(ctx, "cat: ", console.ReadValue(ctx, in, "cat").String(), "") - out.Println(ctx, "time: ", console.ReadValue(ctx, in, "time").Time().Format(time.RFC3339), "") - out.Println(ctx, "hidden: ", console.ReadValue(ctx, in, "hidden").Time().Format(time.RFC3339), "") - - return nil - }, - } +func Args() command.Command { + return command.New( + "fdevs:console:arg", + "Understanding how Console Arguments and Options Are Handled", + ArgExecute, + command.Configure(ArgConfigure), + ) +} + +func ArgConfigure(_ context.Context, def config.Definition) error { + def.Add( + option.Bool("foo", "foo option", option.Short('f')), + option.String("bar", "required bar option", option.Required, option.Short('b')), + option.String("cat", "cat option", option.Short('c')), + option.Time("time", "time example"), + option.Time("hidden", "hidden time example", option.Hidden), + ) + + return nil +} + +func ArgExecute(ctx context.Context, in config.Provider, out output.Output) error { + out.Println(ctx, "foo: ", console.ReadValue(ctx, in, "foo").Bool(), "") + out.Println(ctx, "bar: ", console.ReadValue(ctx, in, "bar").String(), "") + out.Println(ctx, "cat: ", console.ReadValue(ctx, in, "cat").String(), "") + out.Println(ctx, "time: ", console.ReadValue(ctx, in, "time").Time().Format(time.RFC3339), "") + out.Println(ctx, "hidden: ", console.ReadValue(ctx, in, "hidden").Time().Format(time.RFC3339), "") + + return nil } diff --git a/example/pkg/command/create_user.go b/example/pkg/command/create_user.go index a4ab923..e3205f3 100644 --- a/example/pkg/command/create_user.go +++ b/example/pkg/command/create_user.go @@ -5,37 +5,47 @@ import ( "gitoa.ru/go-4devs/config" "gitoa.ru/go-4devs/config/definition/option" - "gitoa.ru/go-4devs/config/param" + cparam "gitoa.ru/go-4devs/config/param" argument "gitoa.ru/go-4devs/config/provider/arg" "gitoa.ru/go-4devs/console" + "gitoa.ru/go-4devs/console/command" "gitoa.ru/go-4devs/console/output" + "gitoa.ru/go-4devs/console/param" ) -func CreateUser(required bool) *console.Command { - return &console.Command{ - Name: "app:create-user", - Description: "Creates a new user.", - Help: "This command allows you to create a user...", - Configure: func(_ context.Context, cfg config.Definition) error { - var opts []param.Option - if required { - opts = append(opts, option.Required) - } +func CreateUser(required bool) command.Command { + return command.New( + "app:create-user", + "Creates a new user.", + UserExecute, + command.Configure(UserConfigure(required)), + command.Help(func(param.HData) (string, error) { + return "This command allows you to create a user...", nil + }), + ) +} - cfg. - Add( - argument.String("username", "The username of the user.", option.Required), - argument.String("password", "User password", opts...), - ) +func UserConfigure(required bool) func(_ context.Context, cfg config.Definition) error { + return func(_ context.Context, cfg config.Definition) error { + var opts []cparam.Option + if required { + opts = append(opts, option.Required) + } - return nil - }, - Execute: func(ctx context.Context, in config.Provider, out output.Output) error { - // outputs a message followed by a "\n" - out.Println(ctx, "User Creator") - out.Println(ctx, "Username: ", console.ReadValue(ctx, in, "username").String()) + cfg. + Add( + argument.String("username", "The username of the user.", option.Required), + argument.String("password", "User password", opts...), + ) - return nil - }, + return nil } } + +func UserExecute(ctx context.Context, in config.Provider, out output.Output) error { + // outputs a message followed by a "\n" + out.Println(ctx, "User Creator") + out.Println(ctx, "Username: ", console.ReadValue(ctx, in, "username").String()) + + return nil +} diff --git a/example/pkg/command/hello.go b/example/pkg/command/hello.go index 4fef561..c8d46a6 100644 --- a/example/pkg/command/hello.go +++ b/example/pkg/command/hello.go @@ -7,33 +7,38 @@ import ( "gitoa.ru/go-4devs/config/definition/option" "gitoa.ru/go-4devs/config/provider/arg" "gitoa.ru/go-4devs/console" + "gitoa.ru/go-4devs/console/command" "gitoa.ru/go-4devs/console/output" ) -func Hello() *console.Command { - return &console.Command{ - Name: "fdevs:console:hello", - Description: "example hello command", - Execute: func(ctx context.Context, in config.Provider, out output.Output) error { - name := console.ReadValue(ctx, in, "name").String() - out.Println(ctx, "Hello ", name, "") - - out.Info(ctx, "same trace info\n") - out.Debug(ctx, "have some question?\n") - out.Trace(ctx, "this message shows with -vvv\n") - - pass := console.ReadValue(ctx, in, "pass").String() - out.Println(ctx, "hidden option pass ", pass, "") - - return nil - }, - Configure: func(_ context.Context, def config.Definition) error { - def.Add( - arg.String("name", "Same name", arg.Default("World")), - option.String("pass", "password", option.Hidden), - ) - - return nil - }, - } +func Hello() command.Command { + return command.New( + "fdevs:console:hello", + "example hello command", + HelloExecute, + command.Configure(HelloConfigure), + ) +} + +func HelloExecute(ctx context.Context, in config.Provider, out output.Output) error { + name := console.ReadValue(ctx, in, "name").String() + out.Println(ctx, "Hello ", name, "") + + out.Info(ctx, "same trace info\n") + out.Debug(ctx, "have some question?\n") + out.Trace(ctx, "this message shows with -vvv\n") + + pass := console.ReadValue(ctx, in, "pass").String() + out.Println(ctx, "hidden option pass ", pass, "") + + return nil +} + +func HelloConfigure(_ context.Context, def config.Definition) error { + def.Add( + arg.String("name", "Same name", arg.Default("World")), + option.String("pass", "password", option.Hidden), + ) + + return nil } diff --git a/example/pkg/command/hidden.go b/example/pkg/command/hidden.go index 15e6900..764c4bd 100644 --- a/example/pkg/command/hidden.go +++ b/example/pkg/command/hidden.go @@ -4,19 +4,16 @@ import ( "context" "gitoa.ru/go-4devs/config" - "gitoa.ru/go-4devs/console" + "gitoa.ru/go-4devs/console/command" "gitoa.ru/go-4devs/console/output" ) -func Hidden() *console.Command { - return &console.Command{ - Name: "fdevs:console:hidden", - Description: "hidden command exmale", - Hidden: true, - Execute: func(ctx context.Context, _ config.Provider, out output.Output) error { - out.Println(ctx, " call hidden command") - - return nil - }, - } +func Hidden() command.Command { + return command.New("fdevs:console:hidden", "hidden command exmale", HiddenExecute, command.Hidden) +} + +func HiddenExecute(ctx context.Context, _ config.Provider, out output.Output) error { + out.Println(ctx, " call hidden command") + + return nil } diff --git a/example/pkg/command/long.go b/example/pkg/command/long.go index 46885c9..b50dcf3 100644 --- a/example/pkg/command/long.go +++ b/example/pkg/command/long.go @@ -9,45 +9,46 @@ import ( "gitoa.ru/go-4devs/config/validator" "gitoa.ru/go-4devs/config/value" "gitoa.ru/go-4devs/console" + "gitoa.ru/go-4devs/console/command" "gitoa.ru/go-4devs/console/output" ) const defaultTimeout = time.Second * 30 // Long example of a command that takes a long time to run. -func Long() *console.Command { - return &console.Command{ - Name: "fdevs:command:long", - Execute: func(ctx context.Context, in config.Provider, out output.Output) error { - timeout := console.ReadValue(ctx, in, "timeout").Duration() - timer := time.NewTimer(timeout) +func Long() command.Command { + return command.New("fdevs:command:long", "long command description", LongExecute, command.Configure(LongConfigure)) +} - ticker := time.NewTicker(time.Second) - defer ticker.Stop() +func LongExecute(ctx context.Context, in config.Provider, out output.Output) error { + timeout := console.ReadValue(ctx, in, "timeout").Duration() + timer := time.NewTimer(timeout) - for { - select { - case t := <-ticker.C: - out.Println(ctx, "ticker: ", t, "") - case <-timer.C: - out.Println(ctx, "stop timer") + ticker := time.NewTicker(time.Second) + defer ticker.Stop() - return nil - case <-ctx.Done(): - out.Println(ctx, "cancel context") - - return nil - } - } - }, - Configure: func(_ context.Context, def config.Definition) error { - def.Add(option.Duration("timeout", "set duration run command", - option.Default(value.New(defaultTimeout)), - option.Short('t'), - validator.Valid(validator.NotBlank), - )) + for { + select { + case t := <-ticker.C: + out.Println(ctx, "ticker: ", t, "") + case <-timer.C: + out.Println(ctx, "stop timer") return nil - }, + case <-ctx.Done(): + out.Println(ctx, "cancel context") + + return nil + } } } + +func LongConfigure(_ context.Context, def config.Definition) error { + def.Add(option.Duration("timeout", "set duration run command", + option.Default(value.New(defaultTimeout)), + option.Short('t'), + validator.Valid(validator.NotBlank), + )) + + return nil +} diff --git a/example/pkg/command/namespace.go b/example/pkg/command/namespace.go index 44c192b..4278f74 100644 --- a/example/pkg/command/namespace.go +++ b/example/pkg/command/namespace.go @@ -4,18 +4,16 @@ import ( "context" "gitoa.ru/go-4devs/config" - "gitoa.ru/go-4devs/console" + "gitoa.ru/go-4devs/console/command" "gitoa.ru/go-4devs/console/output" ) -func Namespace() *console.Command { - return &console.Command{ - Name: "app:start", - Description: "example command in other namespace", - Execute: func(ctx context.Context, _ config.Provider, out output.Output) error { - out.Println(ctx, "example command in other namespace") - - return nil - }, - } +func Namespace() command.Command { + return command.New("app:start", "example command in other namespace", NSExecute) +} + +func NSExecute(ctx context.Context, _ config.Provider, out output.Output) error { + out.Println(ctx, "example command in other namespace") + + return nil } -- 2.49.1