Files
build_soong/cmd/release_config/release_config_lib/flag_value.go
Cole Faust 751a4a5fa2 Export release flag types to make/soong
And use the types to appropriately type selects on the release
variables.

Bug: 323382414
Test: Presubmits
Change-Id: Ide7eca95662caaa7b4be42e20399d9fcd7fed35f
2024-05-21 18:09:05 -07:00

96 lines
2.4 KiB
Go

// Copyright 2024 Google Inc. All rights reserved.
//
// 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 release_config_lib
import (
"strings"
rc_proto "android/soong/cmd/release_config/release_config_proto"
)
type FlagValue struct {
// The path providing this value.
path string
// Protobuf
proto rc_proto.FlagValue
}
func FlagValueFactory(protoPath string) (fv *FlagValue) {
fv = &FlagValue{path: protoPath}
if protoPath != "" {
LoadMessage(protoPath, &fv.proto)
}
return fv
}
func UnmarshalValue(str string) *rc_proto.Value {
ret := &rc_proto.Value{}
switch v := strings.ToLower(str); v {
case "true":
ret = &rc_proto.Value{Val: &rc_proto.Value_BoolValue{true}}
case "false":
ret = &rc_proto.Value{Val: &rc_proto.Value_BoolValue{false}}
case "##obsolete":
ret = &rc_proto.Value{Val: &rc_proto.Value_Obsolete{true}}
default:
ret = &rc_proto.Value{Val: &rc_proto.Value_StringValue{str}}
}
return ret
}
func MarshalValue(value *rc_proto.Value) string {
if value == nil {
return ""
}
switch val := value.Val.(type) {
case *rc_proto.Value_UnspecifiedValue:
// Value was never set.
return ""
case *rc_proto.Value_StringValue:
return val.StringValue
case *rc_proto.Value_BoolValue:
if val.BoolValue {
return "true"
}
// False ==> empty string
return ""
case *rc_proto.Value_Obsolete:
return " #OBSOLETE"
default:
// Flagged as error elsewhere, so return empty string here.
return ""
}
}
// Returns a string representation of the type of the value for make
func ValueType(value *rc_proto.Value) string {
if value == nil || value.Val == nil {
return "unspecified"
}
switch value.Val.(type) {
case *rc_proto.Value_UnspecifiedValue:
return "unspecified"
case *rc_proto.Value_StringValue:
return "string"
case *rc_proto.Value_BoolValue:
return "bool"
case *rc_proto.Value_Obsolete:
return "obsolete"
default:
panic("Unhandled type")
}
}