From 8fa8e47fe2a25bde5a682c50501af43c4571774e Mon Sep 17 00:00:00 2001 From: Anton Mashko Date: Tue, 26 Sep 2023 18:44:14 +0300 Subject: [PATCH] fix: added ptr type handling to parser callbacks --- parser.go | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/parser.go b/parser.go index 2efaaa2..8d97b60 100644 --- a/parser.go +++ b/parser.go @@ -22,9 +22,20 @@ func NewWithExternal(e External) *EnvConf { } } +func (e *EnvConf) fieldType(f field) *fieldType { + switch ft := f.(type) { + case *fieldType: + return ft + case *ptrType: + return e.fieldType(ft.field) + default: + return nil + } +} + func (e *EnvConf) fieldInitialized(f field) { - pt, ok := f.(*fieldType) - if !ok { + pt := e.fieldType(f) + if pt == nil { return } dv, _ := pt.def.Value() @@ -41,8 +52,8 @@ func (e *EnvConf) fieldInitialized(f field) { } func (e *EnvConf) fieldDefined(f field) { - pt, ok := f.(*fieldType) - if !ok { + pt := e.fieldType(f) + if pt == nil { return } if pt.definedValue == nil { @@ -64,8 +75,8 @@ func (e *EnvConf) fieldDefined(f field) { } func (e *EnvConf) fieldNotDefined(f field, err error) { - pt, ok := f.(*fieldType) - if !ok { + pt := e.fieldType(f) + if pt == nil { return } e.opts.OnFieldDefineErr(option.FieldDefineErrorArg{