@ -271,15 +271,22 @@ func (v *Validate) parseTagsRecursive(cTag *cachedTag, tag, fieldName, alias str
}
if t == diveTag {
switch t {
case diveTag:
cTag.diveTag = tag
tVals := &tagVals{tagVals: [][]string{{t}}}
cTag.tags = append(cTag.tags, tVals)
return true
if t == omitempty {
case omitempty:
cTag.isOmitEmpty = true
case structOnlyTag:
cTag.isStructOnly = true
case noStructLevelTag:
cTag.isNoStructLevel = true
// if a pipe character is needed within the param you must use the utf8Pipe representation "0x7C"
@ -48,9 +48,11 @@ var (
)
type cachedTag struct {
isOmitEmpty bool
diveTag string
isNoStructLevel bool
tags []*tagVals
isStructOnly bool
type tagVals struct {
@ -597,11 +599,11 @@ func (v *Validate) traverseField(topStruct reflect.Value, currentStruct reflect.
if typ != timeType {
if strings.Contains(tag, noStructLevelTag) {
if cTag.isNoStructLevel {
return
v.tranverseStruct(topStruct, current, current, errPrefix+name+".", errs, false, partial, exclude, includeExclude, strings.Contains(tag, structOnlyTag))
v.tranverseStruct(topStruct, current, current, errPrefix+name+".", errs, false, partial, exclude, includeExclude, cTag.isStructOnly)