OSDN Git Service

add package
[bytom/vapor.git] / vendor / github.com / hashicorp / go-plugin / plugin.go
diff --git a/vendor/github.com/hashicorp/go-plugin/plugin.go b/vendor/github.com/hashicorp/go-plugin/plugin.go
new file mode 100644 (file)
index 0000000..79d9674
--- /dev/null
@@ -0,0 +1,58 @@
+// 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")
+}