mirror of
https://github.com/tailscale/tailscale.git
synced 2025-02-22 21:08:38 +00:00

Add Int which converts a bool into an integer. Updates tailscale/corp#22024 Signed-off-by: Joe Tsai <joetsai@digital-static.net>
38 lines
826 B
Go
38 lines
826 B
Go
// Copyright (c) Tailscale Inc & AUTHORS
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
// Package bools contains the [Int], [Compare], and [Select] functions.
|
|
package bools
|
|
|
|
// Int returns 1 for true and 0 for false.
|
|
func Int(v bool) int {
|
|
if v {
|
|
return 1
|
|
} else {
|
|
return 0
|
|
}
|
|
}
|
|
|
|
// Compare compares two boolean values as if false is ordered before true.
|
|
func Compare[T ~bool](x, y T) int {
|
|
switch {
|
|
case x == false && y == true:
|
|
return -1
|
|
case x == true && y == false:
|
|
return +1
|
|
default:
|
|
return 0
|
|
}
|
|
}
|
|
|
|
// IfElse is a ternary operator that returns trueVal if condExpr is true
|
|
// otherwise it returns falseVal.
|
|
// IfElse(c, a, b) is roughly equivalent to (c ? a : b) in languages like C.
|
|
func IfElse[T any](condExpr bool, trueVal T, falseVal T) T {
|
|
if condExpr {
|
|
return trueVal
|
|
} else {
|
|
return falseVal
|
|
}
|
|
}
|