diff options
author | Jesse Hallam <jesse.hallam@gmail.com> | 2018-07-13 10:29:50 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-13 10:29:50 -0400 |
commit | 17f211c393772f30922bac595592e3fe60c2ef25 (patch) | |
tree | 4f8dfbe7949022d5da2de2db6d7b762e74fb4582 /plugin/client.go | |
parent | 5ddb08dcb47f938c9ac3a3e6338d9b3cc61c20a7 (diff) | |
download | chat-17f211c393772f30922bac595592e3fe60c2ef25.tar.gz chat-17f211c393772f30922bac595592e3fe60c2ef25.tar.bz2 chat-17f211c393772f30922bac595592e3fe60c2ef25.zip |
MM-11292: clean up plugins GoDoc (#9109)
* clean up plugins GoDoc:
- eliminate plugin.NewBlankContext() as unnecessary
- export ValidIdRegex as a string vs. the less readable var
- add/update various documentation strings
- hide everything by default, except where used by client plugins or the mattermost-server. The exception to this rule are the `*(Args|Returns)` structs which must be public for go-plugin, but are now prefixed with `Z_` with a warning not to use.
- include a top-level example to get plugin authors started
This is not a breaking change for existing plugins compiled against
plugins-v2.
* remove commented out ServeHTTPResponseWriter
* update examples to match developer docs
* add missing plugin/doc.go license header
Diffstat (limited to 'plugin/client.go')
-rw-r--r-- | plugin/client.go | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/plugin/client.go b/plugin/client.go index 3f6fbc7a6..457a16cf4 100644 --- a/plugin/client.go +++ b/plugin/client.go @@ -7,8 +7,9 @@ import ( "github.com/hashicorp/go-plugin" ) -// Starts the serving of a Mattermost plugin over rpc or gRPC -// Call this when your plugin is ready to start +// Starts the serving of a Mattermost plugin over net/rpc. gRPC is not yet supported. +// +// Call this when your plugin is ready to start. func ClientMain(pluginImplementation interface{}) { if impl, ok := pluginImplementation.(interface { SetAPI(api API) @@ -21,28 +22,39 @@ func ClientMain(pluginImplementation interface{}) { } pluginMap := map[string]plugin.Plugin{ - "hooks": &HooksPlugin{hooks: pluginImplementation}, + "hooks": &hooksPlugin{hooks: pluginImplementation}, } plugin.Serve(&plugin.ServeConfig{ - HandshakeConfig: Handshake, + HandshakeConfig: handshake, Plugins: pluginMap, }) } type MattermostPlugin struct { - API API + // API exposes the plugin api, and becomes available just prior to the OnActive hook. + API API + selfRef interface{} // This is so we can unmarshal into our parent } +// SetAPI persists the given API interface to the plugin. It is invoked just prior to the +// OnActivate hook, exposing the API for use by the plugin. func (p *MattermostPlugin) SetAPI(api API) { p.API = api } +// SetSelfRef is called by ClientMain to maintain a pointer to the plugin interface originally +// registered. This allows for the default implementation of OnConfigurationChange. func (p *MattermostPlugin) SetSelfRef(ref interface{}) { p.selfRef = ref } +// OnConfigurationChange provides a default implementation of this hook event that unmarshals the +// plugin configuration directly onto the plugin struct. +// +// Feel free to implement your own version of OnConfigurationChange if you need more advanced +// configuration handling. func (p *MattermostPlugin) OnConfigurationChange() error { if p.selfRef != nil { return p.API.LoadPluginConfiguration(p.selfRef) |