mirror of
https://github.com/ipfs/kubo.git
synced 2025-05-20 00:18:12 +08:00
69 lines
2.3 KiB
Go
69 lines
2.3 KiB
Go
/*
|
|
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}
|
|
}
|