diff --git a/defaults.go b/defaults.go index 3a825fa..f35adf8 100644 --- a/defaults.go +++ b/defaults.go @@ -42,6 +42,14 @@ func Set(ptr interface{}) error { return nil } +// MustSet function is a wrapper of Set function +// It will call Set and panic if err not equals nil. +func MustSet(ptr interface{}) { + if err := Set(ptr); err != nil { + panic(err) + } +} + func setField(field reflect.Value, defaultVal string) error { if !field.CanSet() { return nil diff --git a/defaults_test.go b/defaults_test.go index 9b4a2d3..c6e2fa5 100644 --- a/defaults_test.go +++ b/defaults_test.go @@ -142,6 +142,52 @@ type Emmbeded struct { Int int `default:"1"` } +func TestMustSet(t *testing.T) { + + t.Run("right way", func(t *testing.T) { + defer func() { + if err := recover(); err != nil { + t.Fatalf("it should not panic error: %v", err) + } + }() + sample := &Sample{ + NonInitialString: "string", + NonInitialSlice: []int{1, 2, 3}, + NonInitialStruct: Struct{Foo: 123}, + NonInitialStructPtr: &Struct{Foo: 123}, + DeepSliceOfStructsWithNoTag: [][][]Struct{{{{Foo: 123}}}}, + } + MustSet(sample) + }) + + t.Run("not struct", func(t *testing.T) { + defer func() { + if err := recover(); err != nil { + t.Logf("panic error: %v", err) + } + }() + var a int + MustSet(&a) + }) + + t.Run("not pointer", func(t *testing.T) { + defer func() { + if err := recover(); err != nil { + t.Logf("panic error: %v", err) + } + }() + sample := Sample{ + NonInitialString: "string", + NonInitialSlice: []int{1, 2, 3}, + NonInitialStruct: Struct{Foo: 123}, + NonInitialStructPtr: &Struct{Foo: 123}, + DeepSliceOfStructsWithNoTag: [][][]Struct{{{{Foo: 123}}}}, + } + MustSet(sample) + }) + +} + func TestInit(t *testing.T) { sample := &Sample{ NonInitialString: "string",