// Package plugin provides the ability to load plugins package plugin // Plugin is a plugin loaded from a file type Plugin interface { // Initialise a plugin with the config Init(c *Config) error // Load loads a .so plugin at the given path Load(path string) (*Config, error) // Build a .so plugin with config at the path specified Build(path string, c *Config) error } // Config is the plugin config type Config struct { // Name of the plugin e.g rabbitmq Name string // Type of the plugin e.g broker Type string // Path specifies the import path Path string // NewFunc creates an instance of the plugin NewFunc interface{} } var ( // Default plugin loader DefaultPlugin = NewPlugin() ) // NewPlugin creates a new plugin interface func NewPlugin() Plugin { return &plugin{} } func Build(path string, c *Config) error { return DefaultPlugin.Build(path, c) } func Load(path string) (*Config, error) { return DefaultPlugin.Load(path) } func Init(c *Config) error { return DefaultPlugin.Init(c) }