123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- // Copyright 2016 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 optional provides versions of primitive types that can
- // be nil. These are useful in methods that update some of an API object's
- // fields.
- package optional
- import (
- "fmt"
- "strings"
- "time"
- )
- type (
- // Bool is either a bool or nil.
- Bool interface{}
- // String is either a string or nil.
- String interface{}
- // Int is either an int or nil.
- Int interface{}
- // Uint is either a uint or nil.
- Uint interface{}
- // Float64 is either a float64 or nil.
- Float64 interface{}
- // Duration is either a time.Duration or nil.
- Duration interface{}
- )
- // ToBool returns its argument as a bool.
- // It panics if its argument is nil or not a bool.
- func ToBool(v Bool) bool {
- x, ok := v.(bool)
- if !ok {
- doPanic("Bool", v)
- }
- return x
- }
- // ToString returns its argument as a string.
- // It panics if its argument is nil or not a string.
- func ToString(v String) string {
- x, ok := v.(string)
- if !ok {
- doPanic("String", v)
- }
- return x
- }
- // ToInt returns its argument as an int.
- // It panics if its argument is nil or not an int.
- func ToInt(v Int) int {
- x, ok := v.(int)
- if !ok {
- doPanic("Int", v)
- }
- return x
- }
- // ToUint returns its argument as a uint.
- // It panics if its argument is nil or not a uint.
- func ToUint(v Uint) uint {
- x, ok := v.(uint)
- if !ok {
- doPanic("Uint", v)
- }
- return x
- }
- // ToFloat64 returns its argument as a float64.
- // It panics if its argument is nil or not a float64.
- func ToFloat64(v Float64) float64 {
- x, ok := v.(float64)
- if !ok {
- doPanic("Float64", v)
- }
- return x
- }
- // ToDuration returns its argument as a time.Duration.
- // It panics if its argument is nil or not a time.Duration.
- func ToDuration(v Duration) time.Duration {
- x, ok := v.(time.Duration)
- if !ok {
- doPanic("Duration", v)
- }
- return x
- }
- func doPanic(capType string, v interface{}) {
- panic(fmt.Sprintf("optional.%s value should be %s, got %T", capType, strings.ToLower(capType), v))
- }
|