Skip to content

Commit 68b0df8

Browse files
authored
Merge pull request #32 from chrisUsick/error-explanation
Give better error message on provider application failure.
2 parents 0bf5149 + e668673 commit 68b0df8

File tree

3 files changed

+5
-4
lines changed

3 files changed

+5
-4
lines changed

configurator.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,14 @@ func (c *Configurator) applyProviders(field reflect.StructField, v reflect.Value
105105
return
106106
}
107107

108+
var lastErr error
108109
for _, provider := range c.providers {
109-
if provider.Provide(field, v) == nil {
110+
if lastErr = provider.Provide(field, v); lastErr == nil {
110111
return
111112
}
112113
}
113114

114-
c.onErrorFn(fmt.Errorf("configurator: field [%s] with tags [%v] cannot be set", field.Name, field.Tag))
115+
c.onErrorFn(fmt.Errorf("configurator: field [%s] with tags [%v] cannot be set. Last Provider error: %s", field.Name, field.Tag, lastErr))
115116
}
116117

117118
// FromEnvAndDefault is a shortcut for `New(cfg, NewEnvProvider(), NewDefaultProvider()).InitValues()`.

configurator_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ func TestSetOnFailFn(t *testing.T) {
153153
Name string `default:"test_name"`
154154
}{}
155155
onFailFn := func(err error) {
156-
if err != nil && err.Error() != "configurator: field [Name] with tags [default:\"test_name\"] cannot be set" {
156+
if err != nil && err.Error() != "configurator: field [Name] with tags [default:\"test_name\"] cannot be set. Last Provider error: no tag" {
157157
t.Fatalf("unexpected error: %v", err)
158158
}
159159
}

jsonProvider_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,6 @@ func TestFileProvider_Init(t *testing.T) {
107107
assert(t, "cannot init [JSONFileProvider] provider: file must have .json extension", err.Error())
108108

109109
err = New(i, NewJSONFileProvider("./testdata/input.json")).SetOptions(OnFailFnOpt(func(err error) {
110-
assert(t, "configurator: field [Test] with tags [file_json:\"void.\"] cannot be set", err.Error())
110+
assert(t, "configurator: field [Test] with tags [file_json:\"void.\"] cannot be set. Last Provider error: JSONFileProvider: findValStrByPath returns empty value", err.Error())
111111
})).InitValues()
112112
}

0 commit comments

Comments
 (0)