Skip to content
Snippets Groups Projects

Draft: Resolve "A SetRequest to change a specific path of an OND only works for paths with string values"

2 files
+ 108
100
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 96
0
package util
import (
"fmt"
gpb "github.com/openconfig/gnmi/proto/gnmi"
gnmiv "github.com/openconfig/gnmi/value"
"github.com/openconfig/goyang/pkg/yang"
"strconv"
)
// ConvertStringToTypedValue takes a value as string and a YangType. The
// returned value is the converted TypedValue of the given string based on the
// given YangType.
func ConvertStringToTypedValue(s string, t *yang.YangType) (*gpb.TypedValue, error) {
// TODO: add more types
switch t.Kind {
case yang.Yint8:
parsedInt, err := strconv.ParseInt(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:
parsedInt, err := strconv.ParseInt(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:
parsedInt, err := strconv.ParseInt(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:
parsedInt, err := strconv.ParseUint(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:
parsedInt, err := strconv.ParseUint(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:
parsedInt, err := strconv.ParseUint(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:
parsedBool, err := strconv.ParseBool(s)
if err != nil {
return nil, err
}
tv, err := gnmiv.FromScalar(parsedBool)
if err != nil {
return nil, err
}
return tv, nil
case yang.Ystring:
tv, err := gnmiv.FromScalar(s)
if err != nil {
return nil, err
}
return tv, nil
default:
return nil, fmt.Errorf("unsupported type to convert to TypedValue")
}
}
Loading