[VOL-2938]Failure seen when parsing adapter config
Change-Id: Ie044eb110c36fc4b7597457fa6b1f6c94cd1baff
diff --git a/pkg/model/utils.go b/pkg/model/utils.go
index 15ef51f..682b8d1 100644
--- a/pkg/model/utils.go
+++ b/pkg/model/utils.go
@@ -16,23 +16,68 @@
package model
import (
+ "errors"
"github.com/jhump/protoreflect/dynamic"
)
-func GetEnumValue(val *dynamic.Message, name string) string {
- return val.FindFieldDescriptorByName(name).GetEnumType().
- FindValueByNumber(val.GetFieldByName(name).(int32)).GetName()
-}
-
-func SetEnumValue(msg *dynamic.Message, name string, value string) {
- eValue := msg.FindFieldDescriptorByName(name).GetEnumType().FindValueByName(value)
- msg.SetFieldByName(name, eValue.GetNumber())
-}
-
-func GetEnumString(msg *dynamic.Message, name string, value int32) string {
- eValue := msg.FindFieldDescriptorByName(name).GetEnumType().FindValueByNumber(value)
- if eValue == nil {
- panic("eValue is nil")
+func GetEnumValue(val *dynamic.Message, name string) (string, error) {
+ fd := val.FindFieldDescriptorByName(name)
+ if fd == nil {
+ return "", errors.New("fieldDescriptor is nil for " + name)
}
- return eValue.GetName()
+
+ enumType := fd.GetEnumType()
+ if enumType == nil {
+ return "", errors.New("enumType is nil for " + name)
+ }
+
+ field, ok := val.GetFieldByName(name).(int32)
+ if !ok {
+ return "", errors.New("Enum integer value not found for " + name)
+ }
+
+ eValue := enumType.FindValueByNumber(field)
+ if eValue == nil {
+ return "", errors.New("Value not found for " + name)
+ }
+
+ return eValue.GetName(), nil
+}
+
+func SetEnumValue(msg *dynamic.Message, name string, value string) error {
+ fd := msg.FindFieldDescriptorByName(name)
+ if fd == nil {
+ return errors.New("fieldDescriptor is nil for " + name)
+ }
+
+ enumType := fd.GetEnumType()
+ if enumType == nil {
+ return errors.New("enumType is nil for " + name)
+ }
+
+ eValue := enumType.FindValueByName(value)
+ if eValue == nil {
+ return errors.New("Value not found for " + name)
+ }
+
+ msg.SetFieldByName(name, eValue.GetNumber())
+ return nil
+}
+
+func GetEnumString(msg *dynamic.Message, name string, value int32) (string, error) {
+ fd := msg.FindFieldDescriptorByName(name)
+ if fd == nil {
+ return "", errors.New("fieldDescriptor is nil for " + name)
+ }
+
+ enumType := fd.GetEnumType()
+ if enumType == nil {
+ return "", errors.New("enumType is nil for " + name)
+ }
+
+ eValue := enumType.FindValueByNumber(value)
+ if eValue == nil {
+ return "", errors.New("Value not found for " + name)
+ }
+ return eValue.GetName(), nil
}