[VOL-936] Add changes in voltctl for Onu distance from OLT
Change-Id: If3d7a3f72ac876f495f202f928d244b1ee6e64c5
diff --git a/pkg/model/returnvalues.go b/pkg/model/returnvalues.go
new file mode 100755
index 0000000..88fa2e5
--- /dev/null
+++ b/pkg/model/returnvalues.go
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2019-present Ciena Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package model
+
+import (
+ "github.com/jhump/protoreflect/desc"
+ "github.com/jhump/protoreflect/dynamic"
+)
+
+type ReturnValueRow struct {
+ Name string `json:"name"`
+ Result interface{} `json:"result"`
+}
+
+type ReturnValues struct {
+ Set uint32 `json:"set"`
+ Unsupported uint32 `json:"unsupported"`
+ Error uint32 `json:"error"`
+ Distance uint32 `json:"distance"`
+}
+
+func (r *ReturnValues) PopulateFrom(val *dynamic.Message) {
+ r.Set = val.GetFieldByName("Set").(uint32)
+ r.Unsupported = val.GetFieldByName("Unsupported").(uint32)
+ r.Error = val.GetFieldByName("Error").(uint32)
+ r.Distance = val.GetFieldByName("Distance").(uint32)
+}
+
+// Given a list of allowed enum values, check each one of the values against the
+// bitmaps, and fill out an array of result rows as follows:
+// "Error", if the enum is set in the Error bitmap
+// "Unsupported", if the enum is set in the Unsupported bitmap
+// An interface containing the value, if the enum is set in the Set bitmap
+
+func (r *ReturnValues) GetKeyValuePairs(enumValues []*desc.EnumValueDescriptor) []ReturnValueRow {
+ var rows []ReturnValueRow
+
+ for _, v := range enumValues {
+ num := uint32(v.GetNumber())
+ if num == 0 {
+ // EMPTY is not a real value
+ continue
+ }
+ name := v.GetName()
+ if (r.Error & num) != 0 {
+ row := ReturnValueRow{Name: name, Result: "Error"}
+ rows = append(rows, row)
+ }
+ if (r.Unsupported & num) != 0 {
+ row := ReturnValueRow{Name: name, Result: "Unsupported"}
+ rows = append(rows, row)
+ }
+ if (r.Set & num) != 0 {
+ switch name {
+ case "DISTANCE":
+ row := ReturnValueRow{Name: name, Result: r.Distance}
+ rows = append(rows, row)
+ default:
+ row := ReturnValueRow{Name: name, Result: "Unimplemented-in-voltctl"}
+ rows = append(rows, row)
+ }
+ }
+ }
+
+ return rows
+}