separate options
This commit is contained in:
57
input/argument/argument.go
Normal file
57
input/argument/argument.go
Normal file
@@ -0,0 +1,57 @@
|
||||
package argument
|
||||
|
||||
import (
|
||||
"gitoa.ru/go-4devs/console/input/flag"
|
||||
"gitoa.ru/go-4devs/console/input/value"
|
||||
)
|
||||
|
||||
func New(name, description string, opts ...func(*Argument)) Argument {
|
||||
a := Argument{
|
||||
Name: name,
|
||||
Description: description,
|
||||
}
|
||||
|
||||
for _, opt := range opts {
|
||||
opt(&a)
|
||||
}
|
||||
|
||||
return a
|
||||
}
|
||||
|
||||
type Argument struct {
|
||||
Name string
|
||||
Description string
|
||||
Default value.Value
|
||||
Flag flag.Flag
|
||||
Valid []func(value.Value) error
|
||||
}
|
||||
|
||||
func (a Argument) HasDefault() bool {
|
||||
return a.Default != nil
|
||||
}
|
||||
|
||||
func (a Argument) IsBool() bool {
|
||||
return a.Flag.IsBool()
|
||||
}
|
||||
|
||||
func (a Argument) IsRequired() bool {
|
||||
return a.Flag.IsRequired()
|
||||
}
|
||||
|
||||
func (a Argument) IsArray() bool {
|
||||
return a.Flag.IsArray()
|
||||
}
|
||||
|
||||
func (a Argument) Validate(v value.Value) error {
|
||||
for _, valid := range a.Valid {
|
||||
if err := valid(v); err != nil {
|
||||
return Error(a.Name, err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func Error(name string, err error) error {
|
||||
return err
|
||||
}
|
||||
@@ -1,26 +1,26 @@
|
||||
package argument
|
||||
|
||||
import (
|
||||
"gitoa.ru/go-4devs/console/input"
|
||||
"gitoa.ru/go-4devs/console/input/flag"
|
||||
"gitoa.ru/go-4devs/console/input/value"
|
||||
)
|
||||
|
||||
func Required(a *input.Argument) {
|
||||
a.Flag |= input.ValueRequired
|
||||
func Required(a *Argument) {
|
||||
a.Flag |= flag.Required
|
||||
}
|
||||
|
||||
func Default(v interface{}) func(*input.Argument) {
|
||||
return func(a *input.Argument) {
|
||||
func Default(v interface{}) func(*Argument) {
|
||||
return func(a *Argument) {
|
||||
a.Default = value.New(v)
|
||||
}
|
||||
}
|
||||
|
||||
func Flag(flag input.Flag) func(*input.Argument) {
|
||||
return func(a *input.Argument) {
|
||||
func Flag(flag flag.Flag) func(*Argument) {
|
||||
return func(a *Argument) {
|
||||
a.Flag = flag
|
||||
}
|
||||
}
|
||||
|
||||
func Array(a *input.Argument) {
|
||||
a.Flag |= input.ValueArray
|
||||
func Array(a *Argument) {
|
||||
a.Flag |= flag.Array
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user