open-nomad/plugins/shared/structs/util.go

104 lines
2.0 KiB
Go
Raw Normal View History

2018-10-12 06:18:26 +00:00
package structs
2018-10-12 22:25:34 +00:00
import (
"github.com/hashicorp/nomad/helper"
"github.com/hashicorp/nomad/plugins/shared/structs/proto"
)
2018-10-12 06:18:26 +00:00
func ConvertProtoAttribute(in *proto.Attribute) *Attribute {
out := &Attribute{
Unit: in.Unit,
}
switch in.Value.(type) {
case *proto.Attribute_BoolVal:
2018-10-12 22:25:34 +00:00
out.Bool = helper.BoolToPtr(in.GetBoolVal())
2018-10-12 06:18:26 +00:00
case *proto.Attribute_FloatVal:
2018-10-12 22:25:34 +00:00
out.Float = helper.Float64ToPtr(in.GetFloatVal())
2018-10-12 06:18:26 +00:00
case *proto.Attribute_IntVal:
2018-10-12 22:25:34 +00:00
out.Int = helper.Int64ToPtr(in.GetIntVal())
2018-10-12 06:18:26 +00:00
case *proto.Attribute_StringVal:
2018-10-12 22:25:34 +00:00
out.String = helper.StringToPtr(in.GetStringVal())
2018-10-12 06:18:26 +00:00
default:
}
return out
}
2018-10-13 18:43:06 +00:00
func ConvertProtoAttributeMap(in map[string]*proto.Attribute) map[string]*Attribute {
if in == nil {
return nil
}
out := make(map[string]*Attribute, len(in))
for k, a := range in {
out[k] = ConvertProtoAttribute(a)
}
return out
}
func ConvertStructsAttribute(in *Attribute) *proto.Attribute {
out := &proto.Attribute{
Unit: in.Unit,
}
if in.Int != nil {
out.Value = &proto.Attribute_IntVal{
IntVal: *in.Int,
}
} else if in.Float != nil {
out.Value = &proto.Attribute_FloatVal{
FloatVal: *in.Float,
}
} else if in.String != nil {
out.Value = &proto.Attribute_StringVal{
StringVal: *in.String,
}
} else if in.Bool != nil {
out.Value = &proto.Attribute_BoolVal{
BoolVal: *in.Bool,
}
}
return out
}
func ConvertStructAttributeMap(in map[string]*Attribute) map[string]*proto.Attribute {
if in == nil {
return nil
}
out := make(map[string]*proto.Attribute, len(in))
for k, a := range in {
out[k] = ConvertStructsAttribute(a)
}
return out
}
2018-10-12 22:25:34 +00:00
func Pow(a, b int64) int64 {
var p int64 = 1
2018-10-12 06:18:26 +00:00
for b > 0 {
if b&1 != 0 {
p *= a
}
b >>= 1
a *= a
}
return p
}
// CopyMapStringAttribute copies a map of string to Attribute
func CopyMapStringAttribute(in map[string]*Attribute) map[string]*Attribute {
if in == nil {
return nil
}
out := make(map[string]*Attribute, len(in))
for k, v := range in {
out[k] = v.Copy()
}
return out
}