Skip to content

Commit

Permalink
2024.05.05-14:45
Browse files Browse the repository at this point in the history
  • Loading branch information
slankdev committed May 5, 2024
1 parent 61ce04f commit 886f70d
Showing 1 changed file with 6 additions and 84 deletions.
90 changes: 6 additions & 84 deletions pkg/vtyang/xpath.go
Original file line number Diff line number Diff line change
Expand Up @@ -681,94 +681,16 @@ func ParseXPathArgs2Impl(module *yang.Entry, args []string, setmode bool) (XPath
xword.Dbtype = Leaf
xword.Dbvaluetype = foundNode.Type.Kind
if setmode {
if len(words) < 2 {
return XPath{}, nil, fmt.Errorf("invalid args len")
}
valueStr = words[argumentCount]
value.Type = foundNode.Type.Kind
if err := value.SetFromStringWithType(
words[argumentCount], xword); err != nil {
return XPath{}, nil, errors.Wrap(err, "SetFromStringWithType")
}
argumentExist = true
}

// Additional Validation for Union
switch foundNode.Type.Kind {
case yang.Yunion:
validated := false
ytypes := resolveUnionTypes(foundNode.Type.Type)
for _, ytype := range ytypes {
switch ytype.Kind {
case yang.Ystring:
if err := validateStringValue(valueStr, ytype); err == nil {
xword.Dbuniontype = ytype.Kind
validated = true
}
case yang.Yenum:
if err := validateEnumValue(valueStr, ytype); err == nil {
xword.Dbuniontype = ytype.Kind
validated = true
}
case
yang.Yint8,
yang.Yint16,
yang.Yint32,
yang.Yint64,
yang.Yuint8,
yang.Yuint16,
yang.Yuint32,
yang.Yuint64,
yang.Ydecimal64:
if err := validateNumberValue(valueStr, ytype); err == nil {
xword.Dbuniontype = ytype.Kind
validated = true
}
default:
panic(fmt.Sprintf("PANIC %s", ytype.Kind.String()))
}
if validated {
break
if len(words) > 1 {
v, err := validateValue(words[argumentCount], foundNode.Type)
if err != nil {
return XPath{}, nil, errors.Wrap(err, "validateValue")
}
}
if !validated {
return XPath{}, nil, errors.Errorf("union not validated")
value = v
argumentExist = true
}
}

// Additional Validation for String
switch foundNode.Type.Kind {
case yang.Ystring:
if err := validateStringValue(valueStr, foundNode.Type); err != nil {
return XPath{}, nil, errors.Wrap(err, "validateStringValue")
}
}

// Additional Validation for Enum
switch foundNode.Type.Kind {
case yang.Yenum:
if err := validateEnumValue(valueStr, foundNode.Type); err != nil {
return XPath{}, nil, errors.Wrap(err, "validateEnumValue")
}
}

// Additional Validatation for Number-types
// - range (A)..(B)
switch foundNode.Type.Kind {
case yang.Yint8, yang.Yint16, yang.Yint32, yang.Yint64,
yang.Yuint8, yang.Yuint16, yang.Yuint32, yang.Yuint64,
yang.Ydecimal64:
if err := validateNumberValue(valueStr, foundNode.Type); err != nil {
return XPath{}, nil, errors.Wrap(err, "validateNumberValue")
}
}

// Additional Validation for String-types
// - length
// - pattern
// - pattern(invert-match)
// TODO(slankdev): IMPLEMENT ME

case foundNode.IsList():
if len(words) < 2 {
return XPath{}, nil, fmt.Errorf("is-list invalid args len")
Expand Down

0 comments on commit 886f70d

Please sign in to comment.