2025-11-08 09:37:30 +03:00

72 lines
1.2 KiB
Go

package core
//go:generate go tool golang.org/x/tools/cmd/stringer -type=Tristate -output=tristate_stringer_generated.go
//go:generate go tool mvdan.cc/gofumpt -w tristate_stringer_generated.go
// Tristate
type Tristate byte
const (
TSUnknown Tristate = iota
TSFalse
TSTrue
)
func (t Tristate) IsTrue() bool {
return t == TSTrue
}
func (t Tristate) IsTrueOrUnknown() bool {
return t == TSTrue || t == TSUnknown
}
func (t Tristate) IsFalse() bool {
return t == TSFalse
}
func (t Tristate) IsFalseOrUnknown() bool {
return t == TSFalse || t == TSUnknown
}
func (t Tristate) IsUnknown() bool {
return t == TSUnknown
}
func (t Tristate) DefaultIfUnknown(value Tristate) Tristate {
if t == TSUnknown {
return value
}
return t
}
func (t *Tristate) UnmarshalJSON(data []byte) error {
switch string(data) {
case "true":
*t = TSTrue
case "false":
*t = TSFalse
default:
*t = TSUnknown
}
return nil
}
func (t Tristate) MarshalJSON() ([]byte, error) {
switch t {
case TSTrue:
return []byte("true"), nil
case TSFalse:
return []byte("false"), nil
default:
return []byte("null"), nil
}
}
func BoolToTristate(b bool) Tristate {
if b {
return TSTrue
}
return TSFalse
}