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 }