stash/pkg/plugin/common/msg.go

113 lines
2.6 KiB
Go
Raw Normal View History

2020-08-08 02:05:35 +00:00
package common
import "net/http"
const (
HookContextKey = "hookContext"
)
2020-08-08 02:05:35 +00:00
// StashServerConnection represents the connection details needed for a
// plugin instance to connect to its parent stash server.
type StashServerConnection struct {
// http or https
Scheme string
Host string
Port int
2020-08-08 02:05:35 +00:00
// Cookie for authentication purposes
SessionCookie *http.Cookie
// Dir specifies the directory containing the stash server's configuration
// file.
Dir string
// PluginDir specifies the directory containing the plugin configuration
// file.
PluginDir string
}
// PluginArgValue represents a single value parameter for plugin operations.
type PluginArgValue interface{}
// ArgsMap is a map of argument key to value.
type ArgsMap map[string]PluginArgValue
// String returns the string field or an empty string if the string field is
// nil
func (m ArgsMap) String(key string) string {
v, found := m[key]
var ret string
if !found {
return ret
}
ret, _ = v.(string)
return ret
}
// Int returns the int field or 0 if the int field is nil
func (m ArgsMap) Int(key string) int {
v, found := m[key]
var ret int
if !found {
return ret
}
ret, _ = v.(int)
return ret
}
// Bool returns the boolean field or false if the boolean field is nil
func (m ArgsMap) Bool(key string) bool {
v, found := m[key]
var ret bool
if !found {
return ret
}
ret, _ = v.(bool)
return ret
}
// Float returns the float field or 0 if the float field is nil
func (m ArgsMap) Float(key string) float64 {
v, found := m[key]
var ret float64
if !found {
return ret
}
ret, _ = v.(float64)
return ret
}
// PluginInput is the data structure that is sent to plugin instances when they
// are spawned.
type PluginInput struct {
// Server details to connect to the stash server.
ServerConnection StashServerConnection `json:"server_connection"`
// Arguments to the plugin operation.
Args ArgsMap `json:"args"`
}
// PluginOutput is the data structure that is expected to be output by plugin
// processes when execution has concluded. It is expected that this data will
// be encoded as JSON.
type PluginOutput struct {
Error *string `json:"error"`
Output interface{} `json:"output"`
}
// SetError is a convenience method that sets the Error field based on the
// provided error.
func (o *PluginOutput) SetError(err error) {
errStr := err.Error()
o.Error = &errStr
}
// HookContext is passed as a PluginArgValue and indicates what hook triggered
// this plugin task.
type HookContext struct {
ID int `json:"id,omitempty"`
Type string `json:"type"`
Input interface{} `json:"input"`
InputFields []string `json:"inputFields,omitempty"`
}