41 lines
		
	
	
		
			896 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			896 B
		
	
	
	
		
			Go
		
	
	
	
	
	
// Package plugin provides the ability to load plugins
 | 
						|
package plugin
 | 
						|
 | 
						|
// Plugin is a plugin loaded from a file
 | 
						|
type Plugin interface {
 | 
						|
	// 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)
 | 
						|
}
 |