-
-
Notifications
You must be signed in to change notification settings - Fork 211
Open
Description
Describe the feature
Add the ability to load a struct that has an interface element which has a struct assigned to it
Motivation
This would support go style polymorphism, where a portion of the configuration is set before Load() is called.
Consider the following:
type DatabaseProvider interface {
GetDatabase() *gorm.DB
}
type SqliteDatabase struct {
File string `env:"SQLITE_DATABASE_FILE"`
// ...
}
func (s *SqliteDatabase) GetDB() *gorm.DB {
// ...
}
type PostgresqlDatabase struct {
Name string `env:"PSQL_DATABASE_NAME"`
// ...
}
func (p *PostgresqlDatabase) GetDB() *gorm.DB {
// ...
}
type AppConfig struct {
DatabaseProvider `anonymous:"true"`
}
func NewAppConfig() (*AppConfig, error) {
env := os.GetEnvironment("ENVIRONMENT")
var appConfig *AppConfig
switch env {
case "dev":
appConfig = &AppConfig{ &SqliteDatabase{} }
default:
appConfig = &AppConfig{ &PostgresqlDatabase{} }
}
return appConfig, configor.New(&configor.Config{}).Load(appConfig)
}
Currently configor will not load the underlying database configuration, but there is no reason that it cannot do so since the value of the interface is a struct.
Related Issues
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels