andrey1s
4 years ago
9 changed files with 128 additions and 123 deletions
@ -0,0 +1,87 @@ |
|||||
|
package input |
||||
|
|
||||
|
import ( |
||||
|
"context" |
||||
|
"sync" |
||||
|
|
||||
|
"gitoa.ru/go-4devs/console/input/value" |
||||
|
"gitoa.ru/go-4devs/console/input/value/flag" |
||||
|
) |
||||
|
|
||||
|
type Map struct { |
||||
|
opts map[string]value.Append |
||||
|
args map[string]value.Append |
||||
|
sync.Mutex |
||||
|
} |
||||
|
|
||||
|
func (m *Map) Option(_ context.Context, name string) value.Value { |
||||
|
m.Lock() |
||||
|
defer m.Unlock() |
||||
|
|
||||
|
return m.opts[name] |
||||
|
} |
||||
|
|
||||
|
func (m *Map) Argument(_ context.Context, name string) value.Value { |
||||
|
m.Lock() |
||||
|
defer m.Unlock() |
||||
|
|
||||
|
return m.args[name] |
||||
|
} |
||||
|
|
||||
|
func (m *Map) Bind(_ context.Context, _ *Definition) error { |
||||
|
return nil |
||||
|
} |
||||
|
|
||||
|
func (m *Map) LenArguments() int { |
||||
|
return len(m.args) |
||||
|
} |
||||
|
|
||||
|
func (m *Map) HasOption(name string) bool { |
||||
|
_, ok := m.opts[name] |
||||
|
|
||||
|
return ok |
||||
|
} |
||||
|
|
||||
|
func (m *Map) SetOption(name string, v interface{}) { |
||||
|
m.Lock() |
||||
|
defer m.Unlock() |
||||
|
|
||||
|
if m.opts == nil { |
||||
|
m.opts = make(map[string]value.Append) |
||||
|
} |
||||
|
|
||||
|
m.opts[name] = value.New(v) |
||||
|
} |
||||
|
|
||||
|
func (m *Map) HasArgument(name string) bool { |
||||
|
_, ok := m.args[name] |
||||
|
|
||||
|
return ok |
||||
|
} |
||||
|
|
||||
|
func (m *Map) SetArgument(name string, v interface{}) { |
||||
|
m.Lock() |
||||
|
defer m.Unlock() |
||||
|
|
||||
|
if m.args == nil { |
||||
|
m.args = make(map[string]value.Append) |
||||
|
} |
||||
|
|
||||
|
m.args[name] = value.New(v) |
||||
|
} |
||||
|
|
||||
|
func (m *Map) AppendOption(f flag.Flag, name, val string) error { |
||||
|
if _, ok := m.opts[name]; !ok { |
||||
|
m.SetOption(name, value.ByFlag(f)) |
||||
|
} |
||||
|
|
||||
|
return m.opts[name].Append(val) |
||||
|
} |
||||
|
|
||||
|
func (m *Map) AppendArgument(f flag.Flag, name, val string) error { |
||||
|
if _, ok := m.args[name]; !ok { |
||||
|
m.SetArgument(name, value.ByFlag(f)) |
||||
|
} |
||||
|
|
||||
|
return m.args[name].Append(val) |
||||
|
} |
Loading…
Reference in new issue