]>
Commit | Line | Data |
---|---|---|
15c0b25d AP |
1 | package plugin |
2 | ||
3 | import ( | |
4 | "io" | |
5 | "net" | |
6 | ) | |
7 | ||
8 | // Protocol is an enum representing the types of protocols. | |
9 | type Protocol string | |
10 | ||
11 | const ( | |
12 | ProtocolInvalid Protocol = "" | |
13 | ProtocolNetRPC Protocol = "netrpc" | |
14 | ProtocolGRPC Protocol = "grpc" | |
15 | ) | |
16 | ||
17 | // ServerProtocol is an interface that must be implemented for new plugin | |
18 | // protocols to be servers. | |
19 | type ServerProtocol interface { | |
20 | // Init is called once to configure and initialize the protocol, but | |
21 | // not start listening. This is the point at which all validation should | |
22 | // be done and errors returned. | |
23 | Init() error | |
24 | ||
25 | // Config is extra configuration to be outputted to stdout. This will | |
26 | // be automatically base64 encoded to ensure it can be parsed properly. | |
27 | // This can be an empty string if additional configuration is not needed. | |
28 | Config() string | |
29 | ||
30 | // Serve is called to serve connections on the given listener. This should | |
31 | // continue until the listener is closed. | |
32 | Serve(net.Listener) | |
33 | } | |
34 | ||
35 | // ClientProtocol is an interface that must be implemented for new plugin | |
36 | // protocols to be clients. | |
37 | type ClientProtocol interface { | |
38 | io.Closer | |
39 | ||
40 | // Dispense dispenses a new instance of the plugin with the given name. | |
41 | Dispense(string) (interface{}, error) | |
42 | ||
43 | // Ping checks that the client connection is still healthy. | |
44 | Ping() error | |
45 | } |