blob: bd4d8e57a68cc0da287700e9cb781a3cdafa8440 [file] [log] [blame]
// Copyright 2016 The LUCI Authors.
//
// 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 portal
import (
"errors"
)
// YesOrNo is a bool that serializes to 'yes' or 'no'.
//
// Useful in Fields that define boolean values.
type YesOrNo bool
// String returns "yes" or "no".
func (yn YesOrNo) String() string {
if yn {
return "yes"
}
return "no"
}
// Set changes the value of YesOrNo.
func (yn *YesOrNo) Set(v string) error {
switch v {
case "yes":
*yn = true
case "no":
*yn = false
default:
return errors.New("expecting 'yes' or 'no'")
}
return nil
}
// YesOrNoField modifies the field so that it corresponds to YesOrNo value.
//
// It sets 'Type', 'ChoiceVariants' and 'Validator' properties.
func YesOrNoField(f Field) Field {
f.Type = FieldChoice
f.ChoiceVariants = []string{"yes", "no"}
f.Validator = func(v string) error {
var x YesOrNo
return x.Set(v)
}
return f
}