| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- // The plugin package exposes functions and helpers for communicating to
- // plugins which are implemented as standalone binary applications.
- //
- // plugin.Client fully manages the lifecycle of executing the application,
- // connecting to it, and returning the RPC client for dispensing plugins.
- //
- // plugin.Serve fully manages listeners to expose an RPC server from a binary
- // that plugin.Client can connect to.
- package plugin
- import (
- "context"
- "errors"
- "net/rpc"
- "google.golang.org/grpc"
- )
- // Plugin is the interface that is implemented to serve/connect to an
- // inteface implementation.
- type Plugin interface {
- // Server should return the RPC server compatible struct to serve
- // the methods that the Client calls over net/rpc.
- Server(*MuxBroker) (interface{}, error)
- // Client returns an interface implementation for the plugin you're
- // serving that communicates to the server end of the plugin.
- Client(*MuxBroker, *rpc.Client) (interface{}, error)
- }
- // GRPCPlugin is the interface that is implemented to serve/connect to
- // a plugin over gRPC.
- type GRPCPlugin interface {
- // GRPCServer should register this plugin for serving with the
- // given GRPCServer. Unlike Plugin.Server, this is only called once
- // since gRPC plugins serve singletons.
- GRPCServer(*GRPCBroker, *grpc.Server) error
- // GRPCClient should return the interface implementation for the plugin
- // you're serving via gRPC. The provided context will be canceled by
- // go-plugin in the event of the plugin process exiting.
- GRPCClient(context.Context, *GRPCBroker, *grpc.ClientConn) (interface{}, error)
- }
- // NetRPCUnsupportedPlugin implements Plugin but returns errors for the
- // Server and Client functions. This will effectively disable support for
- // net/rpc based plugins.
- //
- // This struct can be embedded in your struct.
- type NetRPCUnsupportedPlugin struct{}
- func (p NetRPCUnsupportedPlugin) Server(*MuxBroker) (interface{}, error) {
- return nil, errors.New("net/rpc plugin protocol not supported")
- }
- func (p NetRPCUnsupportedPlugin) Client(*MuxBroker, *rpc.Client) (interface{}, error) {
- return nil, errors.New("net/rpc plugin protocol not supported")
- }
|