mirror of https://github.com/stashapp/stash.git
31 lines
766 B
Go
31 lines
766 B
Go
package common
|
|
|
|
import (
|
|
"net/rpc/jsonrpc"
|
|
|
|
"github.com/natefinch/pie"
|
|
)
|
|
|
|
// RPCRunner is the interface that RPC plugins are expected to fulfil.
|
|
type RPCRunner interface {
|
|
// Perform the operation, using the provided input and populating the
|
|
// output object.
|
|
Run(input PluginInput, output *PluginOutput) error
|
|
|
|
// Stop any running operations, if possible. No input is sent and any
|
|
// output is ignored.
|
|
Stop(input struct{}, output *bool) error
|
|
}
|
|
|
|
// ServePlugin is used by plugin instances to serve the plugin via RPC, using
|
|
// the provided RPCRunner interface.
|
|
func ServePlugin(iface RPCRunner) error {
|
|
p := pie.NewProvider()
|
|
if err := p.RegisterName("RPCRunner", iface); err != nil {
|
|
return err
|
|
}
|
|
|
|
p.ServeCodec(jsonrpc.NewServerCodec)
|
|
return nil
|
|
}
|