mirror of
https://github.com/ipfs/kubo.git
synced 2025-08-06 11:31:54 +08:00
commands: Added list of option definitions to Request, so Option can lookup values by all aliases
This commit is contained in:

committed by
Juan Batiz-Benet

parent
ce28fa363b
commit
eebb43753b
@ -45,7 +45,12 @@ func Parse(input []string, roots ...*cmds.Command) (cmds.Request, *cmds.Command,
|
||||
return nil, root, cmd, path, err
|
||||
}
|
||||
|
||||
req := cmds.NewRequest(path, opts, args, cmd)
|
||||
optDefs, err := root.GetOptions(path)
|
||||
if err != nil {
|
||||
return nil, root, cmd, path, err
|
||||
}
|
||||
|
||||
req := cmds.NewRequest(path, opts, args, cmd, optDefs)
|
||||
|
||||
err = cmd.CheckArguments(req)
|
||||
if err != nil {
|
||||
|
@ -90,7 +90,12 @@ func Parse(r *http.Request, root *cmds.Command) (cmds.Request, error) {
|
||||
args = append(args, make([]interface{}, valCount-1))
|
||||
}
|
||||
|
||||
req := cmds.NewRequest(path, opts, args, cmd)
|
||||
optDefs, err := root.GetOptions(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
req := cmds.NewRequest(path, opts, args, cmd, optDefs)
|
||||
|
||||
err = cmd.CheckArguments(req)
|
||||
if err != nil {
|
||||
|
@ -33,11 +33,12 @@ type Request interface {
|
||||
}
|
||||
|
||||
type request struct {
|
||||
path []string
|
||||
options optMap
|
||||
arguments []interface{}
|
||||
cmd *Command
|
||||
ctx Context
|
||||
path []string
|
||||
options optMap
|
||||
arguments []interface{}
|
||||
cmd *Command
|
||||
ctx Context
|
||||
optionDefs map[string]Option
|
||||
}
|
||||
|
||||
// Path returns the command path of this request
|
||||
@ -47,8 +48,26 @@ func (r *request) Path() []string {
|
||||
|
||||
// Option returns the value of the option for given name.
|
||||
func (r *request) Option(name string) (interface{}, bool) {
|
||||
val, err := r.options[name]
|
||||
return val, err
|
||||
val, found := r.options[name]
|
||||
if found {
|
||||
return val, found
|
||||
}
|
||||
|
||||
// if a value isn't defined for that name, we will try to look it up by its aliases
|
||||
|
||||
// find the option with the specified name
|
||||
option, found := r.optionDefs[name]
|
||||
if found {
|
||||
// try all the possible names, break if we find a value
|
||||
for _, n := range option.Names {
|
||||
val, found := r.options[n]
|
||||
if found {
|
||||
return val, found
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil, false
|
||||
}
|
||||
|
||||
// Options returns a copy of the option map
|
||||
@ -152,11 +171,11 @@ func (r *request) ConvertOptions(options map[string]Option) error {
|
||||
|
||||
// NewEmptyRequest initializes an empty request
|
||||
func NewEmptyRequest() Request {
|
||||
return NewRequest(nil, nil, nil, nil)
|
||||
return NewRequest(nil, nil, nil, nil, nil)
|
||||
}
|
||||
|
||||
// NewRequest returns a request initialized with given arguments
|
||||
func NewRequest(path []string, opts optMap, args []interface{}, cmd *Command) Request {
|
||||
func NewRequest(path []string, opts optMap, args []interface{}, cmd *Command, optDefs map[string]Option) Request {
|
||||
if path == nil {
|
||||
path = make([]string, 0)
|
||||
}
|
||||
@ -166,5 +185,8 @@ func NewRequest(path []string, opts optMap, args []interface{}, cmd *Command) Re
|
||||
if args == nil {
|
||||
args = make([]interface{}, 0)
|
||||
}
|
||||
return &request{path, opts, args, cmd, Context{}}
|
||||
if optDefs == nil {
|
||||
optDefs = make(map[string]Option)
|
||||
}
|
||||
return &request{path, opts, args, cmd, Context{}, optDefs}
|
||||
}
|
||||
|
Reference in New Issue
Block a user