47 lines
1.3 KiB
Go
47 lines
1.3 KiB
Go
package ezconf
|
|
|
|
// Integration is an interface that packages can implement to provide
|
|
// easy integration with ezconf
|
|
type Integration interface {
|
|
// Name returns the name to use when registering the config
|
|
Name() string
|
|
|
|
// PackagePath returns the path to the package for source parsing
|
|
PackagePath() string
|
|
|
|
// ConfigFunc returns the ConfigFromEnv function
|
|
ConfigFunc() func() (interface{}, error)
|
|
|
|
// GroupName returns the display name for grouping environment variables
|
|
GroupName() string
|
|
}
|
|
|
|
// RegisterIntegration registers a package that implements the Integration interface
|
|
func (cl *ConfigLoader) RegisterIntegration(integration Integration) error {
|
|
// Add package path
|
|
pkgPath := integration.PackagePath()
|
|
if err := cl.AddPackagePath(pkgPath); err != nil {
|
|
return err
|
|
}
|
|
|
|
// Store group name for this package
|
|
cl.groupNames[pkgPath] = integration.GroupName()
|
|
|
|
// Add config function
|
|
if err := cl.AddConfigFunc(integration.Name(), integration.ConfigFunc()); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// RegisterIntegrations registers multiple integrations at once
|
|
func (cl *ConfigLoader) RegisterIntegrations(integrations ...Integration) error {
|
|
for _, integration := range integrations {
|
|
if err := cl.RegisterIntegration(integration); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|