stash/pkg/plugin/common/rpc.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
}