Skip to content

Commit

Permalink
only accept single loader
Browse files Browse the repository at this point in the history
  • Loading branch information
ktong committed Feb 2, 2024
1 parent 07a7a83 commit c367dcf
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 27 deletions.
36 changes: 17 additions & 19 deletions config.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,31 +66,29 @@ func New(opts ...Option) *Config {
return (*Config)(option)
}

// Load loads configuration from the given loaders.
// Load loads configuration from the given loader.
// Each loader takes precedence over the loaders before it.
//
// This method can be called multiple times but it is not concurrency-safe.
// It panics if any loader is nil.
func (c *Config) Load(loaders ...Loader) error {
for i, loader := range loaders {
if loader == nil {
panic(fmt.Sprintf("cannot load config from nil loader at loaders[%d]", i))
}
// It panics if loader is nil.
func (c *Config) Load(loader Loader) error {
if loader == nil {
panic("cannot load config from nil loader")
}

values, err := loader.Load()
if err != nil {
return fmt.Errorf("load configuration: %w", err)
}
maps.Merge(c.values, values)
values, err := loader.Load()
if err != nil {
return fmt.Errorf("load configuration: %w", err)
}
maps.Merge(c.values, values)

provider := &provider{
loader: loader,
values: make(map[string]any),
}
// Merged to empty map to convert to lower case.
maps.Merge(provider.values, values)
c.providers = append(c.providers, provider)
provider := &provider{
loader: loader,
values: make(map[string]any),
}
// Merged to empty map to convert to lower case.
maps.Merge(provider.values, values)
c.providers = append(c.providers, provider)

return nil
}
Expand Down
9 changes: 6 additions & 3 deletions config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,9 @@ func TestConfig_Unmarshal(t *testing.T) {
t.Parallel()

config := konf.New(testcase.opts...)
err := config.Load(testcase.loaders...)
assert.NoError(t, err)
for _, loader := range testcase.loaders {
assert.NoError(t, config.Load(loader))
}
testcase.assert(config)
})
}
Expand All @@ -125,7 +126,9 @@ func (m mapLoader) String() string {
func TestConfig_Explain(t *testing.T) {
t.Setenv("CONFIG_NEST", "env")
config := konf.New()
err := config.Load(env.New(), mapLoader{"owner": "map", "config": map[string]any{"nest": "map"}})
err := config.Load(env.New())
assert.NoError(t, err)
err = config.Load(mapLoader{"owner": "map", "config": map[string]any{"nest": "map"}})
assert.NoError(t, err)

assert.Equal(t, "non-exist has no configuration.\n\n", config.Explain("non-exist"))
Expand Down
10 changes: 5 additions & 5 deletions example_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,11 @@ var testdata embed.FS

func ExampleSetDefault() {
config := konf.New()
err := config.Load(
kfs.New(testdata, "testdata/config.json"),
env.New(env.WithPrefix("server")),
)
if err != nil {
if err := config.Load(kfs.New(testdata, "testdata/config.json")); err != nil {
// Handle error here.
panic(err)
}
if err := config.Load(env.New(env.WithPrefix("server"))); err != nil {
// Handle error here.
panic(err)
}
Expand Down

0 comments on commit c367dcf

Please sign in to comment.