forked from ligato/vpp-agent
-
Notifications
You must be signed in to change notification settings - Fork 0
/
values.go
66 lines (57 loc) · 2.16 KB
/
values.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// Copyright (c) 2018 Cisco and/or its affiliates.
//
// 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.
//go:generate protoc --proto_path=./model --gogo_out=./model values.proto
package test
import (
"github.com/gogo/protobuf/proto"
. "github.com/ligato/vpp-agent/plugins/kvscheduler/api"
. "github.com/ligato/vpp-agent/plugins/kvscheduler/internal/test/model"
)
// NewStringValue creates a new instance of StringValue.
func NewStringValue(str string) proto.Message {
return &StringValue{Value: str}
}
// NewArrayValue creates a new instance of ArrayValue.
func NewArrayValue(items ...string) proto.Message {
return &ArrayValue{Items: items}
}
// NewArrayValue creates a new instance of ArrayValue with a suffix
// appended into each item value (but not key).
func NewArrayValueWithSuffix(suffix string, items ...string) proto.Message {
return &ArrayValue{Items: items, ItemSuffix: suffix}
}
// StringValueComparator is (a custom) KVDescriptor.ValueComparator for string values.
func StringValueComparator(key string, v1, v2 proto.Message) bool {
sv1, isStringVal1 := v1.(*StringValue)
sv2, isStringVal2 := v2.(*StringValue)
if !isStringVal1 || !isStringVal2 {
return false
}
return sv1.Value == sv2.Value
}
// ArrayValueDerBuilder can be used to derive one StringValue for every item
// in the array.
func ArrayValueDerBuilder(key string, value proto.Message) []KeyValuePair {
var derivedVals []KeyValuePair
arrayVal, isArrayVal := value.(*ArrayValue)
if isArrayVal {
for _, item := range arrayVal.Items {
derivedVals = append(derivedVals, KeyValuePair{
Key: key + "/" + item,
Value: NewStringValue(item + arrayVal.ItemSuffix),
})
}
}
return derivedVals
}