/* Package commands provides an API for defining and parsing commands. Supporting nested commands, options, arguments, etc. The commands package also supports a collection of marshallers for presenting output to the user, including text, JSON, and XML marshallers. */ package commands import ( "io" logging "gx/ipfs/QmRREK2CAZ5Re2Bd9zZFG6FeYDppUWt5cMgsoUEp3ktgSr/go-log" cmdkit "gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit" ) var log = logging.Logger("command") // Function is the type of function that Commands use. // It reads from the Request, and writes results to the Response. type Function func(Request, Response) // Marshaler is a function that takes in a Response, and returns an io.Reader // (or an error on failure) type Marshaler func(Response) (io.Reader, error) // MarshalerMap is a map of Marshaler functions, keyed by EncodingType // (or an error on failure) type MarshalerMap map[EncodingType]Marshaler // Command is a runnable command, with input arguments and options (flags). // It can also have Subcommands, to group units of work into sets. type Command struct { Options []cmdkit.Option Arguments []cmdkit.Argument PreRun func(req Request) error // Run is the function that processes the request to generate a response. // Note that when executing the command over the HTTP API you can only read // after writing when using multipart requests. The request body will not be // available for reading after the HTTP connection has been written to. Run Function PostRun Function Marshalers map[EncodingType]Marshaler Helptext cmdkit.HelpText // External denotes that a command is actually an external binary. // fewer checks and validations will be performed on such commands. External bool // Type describes the type of the output of the Command's Run Function. // In precise terms, the value of Type is an instance of the return type of // the Run Function. // // ie. If command Run returns &Block{}, then Command.Type == &Block{} Type interface{} Subcommands map[string]*Command } // Subcommand returns the subcommand with the given id func (c *Command) Subcommand(id string) *Command { return c.Subcommands[id] } func ClientError(msg string) error { return &cmdkit.Error{Code: cmdkit.ErrClient, Message: msg} }