github.com/vnforks/kid@v5.11.1+incompatible/plugin/client.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package plugin 5 6 import ( 7 "github.com/hashicorp/go-plugin" 8 ) 9 10 // Starts the serving of a Mattermost plugin over net/rpc. gRPC is not yet supported. 11 // 12 // Call this when your plugin is ready to start. 13 func ClientMain(pluginImplementation interface{}) { 14 if impl, ok := pluginImplementation.(interface { 15 SetAPI(api API) 16 }); !ok { 17 panic("Plugin implementation given must embed plugin.MattermostPlugin") 18 } else { 19 impl.SetAPI(nil) 20 } 21 22 pluginMap := map[string]plugin.Plugin{ 23 "hooks": &hooksPlugin{hooks: pluginImplementation}, 24 } 25 26 plugin.Serve(&plugin.ServeConfig{ 27 HandshakeConfig: handshake, 28 Plugins: pluginMap, 29 }) 30 } 31 32 type MattermostPlugin struct { 33 // API exposes the plugin api, and becomes available just prior to the OnActive hook. 34 API API 35 } 36 37 // SetAPI persists the given API interface to the plugin. It is invoked just prior to the 38 // OnActivate hook, exposing the API for use by the plugin. 39 func (p *MattermostPlugin) SetAPI(api API) { 40 p.API = api 41 }