first commit
This commit is contained in:
87
input/array/input.go
Normal file
87
input/array/input.go
Normal file
@@ -0,0 +1,87 @@
|
||||
package array
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
|
||||
"gitoa.ru/go-4devs/console/input"
|
||||
"gitoa.ru/go-4devs/console/input/value"
|
||||
"gitoa.ru/go-4devs/console/input/wrap"
|
||||
)
|
||||
|
||||
var _ input.ReadInput = (*Input)(nil)
|
||||
|
||||
func Argument(name string, v interface{}) func(*Input) {
|
||||
return func(i *Input) {
|
||||
i.args[name] = value.New(v)
|
||||
}
|
||||
}
|
||||
|
||||
func Option(name string, v interface{}) func(*Input) {
|
||||
return func(i *Input) {
|
||||
i.opt[name] = value.New(v)
|
||||
}
|
||||
}
|
||||
|
||||
func New(opts ...func(*Input)) *wrap.Input {
|
||||
i := &Input{
|
||||
args: make(map[string]input.Value),
|
||||
opt: make(map[string]input.Value),
|
||||
}
|
||||
|
||||
for _, opt := range opts {
|
||||
opt(i)
|
||||
}
|
||||
|
||||
return &wrap.Input{ReadInput: i}
|
||||
}
|
||||
|
||||
type Input struct {
|
||||
args map[string]input.Value
|
||||
opt map[string]input.Value
|
||||
mu sync.Mutex
|
||||
}
|
||||
|
||||
func (i *Input) ReadOption(_ context.Context, name string) (input.Value, error) {
|
||||
if o, has := i.opt[name]; has {
|
||||
return o, nil
|
||||
}
|
||||
|
||||
return nil, input.ErrorOption(name, input.ErrNotFound)
|
||||
}
|
||||
|
||||
func (i *Input) HasOption(name string) bool {
|
||||
_, has := i.opt[name]
|
||||
|
||||
return has
|
||||
}
|
||||
|
||||
func (i *Input) SetOption(name string, val input.Value) {
|
||||
i.mu.Lock()
|
||||
i.opt[name] = val
|
||||
i.mu.Unlock()
|
||||
}
|
||||
|
||||
func (i *Input) ReadArgument(_ context.Context, name string) (input.Value, error) {
|
||||
if a, has := i.args[name]; has {
|
||||
return a, nil
|
||||
}
|
||||
|
||||
return nil, input.ErrorArgument(name, input.ErrNotFound)
|
||||
}
|
||||
|
||||
func (i *Input) HasArgument(name string) bool {
|
||||
_, has := i.args[name]
|
||||
|
||||
return has
|
||||
}
|
||||
|
||||
func (i *Input) SetArgument(name string, val input.Value) {
|
||||
i.mu.Lock()
|
||||
i.args[name] = val
|
||||
i.mu.Unlock()
|
||||
}
|
||||
|
||||
func (i *Input) Bind(_ context.Context, def *input.Definition) error {
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user