Skip to content
Snippets Groups Projects
Commit 6eeeb998 authored by Malte Bauch's avatar Malte Bauch
Browse files

refactored to address the very high cyclomatic comlexity

parent 37f1b2c6
No related branches found
No related tags found
1 merge request!225Draft: Resolve "A SetRequest to change a specific path of an OND only works for paths with string values"
Pipeline #90782 passed with warnings
This commit is part of merge request !225. Comments created here will be created in the context of that merge request.
...@@ -2,95 +2,74 @@ package util ...@@ -2,95 +2,74 @@ package util
import ( import (
"fmt" "fmt"
gpb "github.com/openconfig/gnmi/proto/gnmi" "strconv"
"github.com/openconfig/gnmi/proto/gnmi"
gnmiv "github.com/openconfig/gnmi/value" gnmiv "github.com/openconfig/gnmi/value"
"github.com/openconfig/goyang/pkg/yang" "github.com/openconfig/goyang/pkg/yang"
"strconv"
) )
// ConvertStringToTypedValue takes a value as string and a YangType. The // ConvertStringToTypedValue takes a value as string and a YangType. The
// returned value is the converted TypedValue of the given string based on the // returned value is the converted TypedValue of the given string based on the
// given YangType. // given YangType.
func ConvertStringToTypedValue(s string, t *yang.YangType) (*gpb.TypedValue, error) { func ConvertStringToTypedValue(s string, t *yang.YangType) (*gnmi.TypedValue, error) {
// TODO: add more types // TODO: add more types
switch t.Kind { switch t.Kind {
case yang.Yint8: case yang.Yint8:
parsedInt, err := strconv.ParseInt(s, 10, 8) return convertStringToIntTypedValue(s, 10, 8)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(int8(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Yint16: case yang.Yint16:
parsedInt, err := strconv.ParseInt(s, 10, 16) return convertStringToIntTypedValue(s, 10, 16)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(int16(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Yint32: case yang.Yint32:
parsedInt, err := strconv.ParseInt(s, 10, 32) return convertStringToIntTypedValue(s, 10, 32)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(int32(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Yuint8: case yang.Yuint8:
parsedInt, err := strconv.ParseUint(s, 10, 8) return convertStringToUintTypedValue(s, 10, 8)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(uint8(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Yuint16: case yang.Yuint16:
parsedInt, err := strconv.ParseUint(s, 10, 16) return convertStringToUintTypedValue(s, 10, 16)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(uint16(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Yuint32: case yang.Yuint32:
parsedInt, err := strconv.ParseUint(s, 10, 32) return convertStringToUintTypedValue(s, 10, 32)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(uint32(parsedInt))
if err != nil {
return nil, err
}
return tv, nil
case yang.Ybool: case yang.Ybool:
parsedBool, err := strconv.ParseBool(s) parsedBool, err := strconv.ParseBool(s)
if err != nil { if err != nil {
return nil, err return nil, err
} }
tv, err := gnmiv.FromScalar(parsedBool) return gnmiv.FromScalar(parsedBool)
if err != nil {
return nil, err
}
return tv, nil
case yang.Ystring: case yang.Ystring:
tv, err := gnmiv.FromScalar(s) return gnmiv.FromScalar(s)
if err != nil { default:
return nil, err return nil, fmt.Errorf("could not convert to TypedValue, unsupported type of: %v", t)
} }
return tv, nil }
func convertStringToIntTypedValue(s string, base int, bitSize int) (*gnmi.TypedValue, error) {
parsedInt, err := strconv.ParseInt(s, base, bitSize)
if err != nil {
return nil, err
}
switch bitSize {
case 8:
return gnmiv.FromScalar(int8(parsedInt))
case 16:
return gnmiv.FromScalar(int16(parsedInt))
case 32:
return gnmiv.FromScalar(int32(parsedInt))
default:
return nil, fmt.Errorf("could not convert string %s to a gnmi.TypedValue (int), unsupported bitSize of: %d", s, bitSize)
}
}
func convertStringToUintTypedValue(s string, base int, bitSize int) (*gnmi.TypedValue, error) {
parsedInt, err := strconv.ParseUint(s, base, bitSize)
if err != nil {
return nil, err
}
switch bitSize {
case 8:
return gnmiv.FromScalar(uint8(parsedInt))
case 16:
return gnmiv.FromScalar(uint16(parsedInt))
case 32:
return gnmiv.FromScalar(uint32(parsedInt))
default: default:
return nil, fmt.Errorf("unsupported type to convert to TypedValue") return nil, fmt.Errorf("could not convert string %s to a gnmi.TypedValue (uint), unsupported bitSize of: %d", s, bitSize)
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment