// Code generated by fidlgen; DO NOT EDIT.

package consts

import (
	_bindings "syscall/zx/fidl"
)

const (
	EnabledFlag       bool     = true
	Offset            int8     = -33
	Answer            uint16   = 42
	AnswerInBinary    uint16   = 42
	PopulationUsa2018 uint32   = 330000000
	Diamond           uint64   = 1746410393481133080
	Fuchsia           uint64   = 4054509061583223046
	Username          string   = "\"squeenze\""
	MinTemp           float32  = -273.15
	ConversionFactor  float64  = 1.41421
	EnumVal           EnumType = EnumTypeValue
	EnumPrimitiveVal  int32    = EnumTypeValue
	EnumTrue          EnumType = EnumTypeTrue
	EnumPrimitiveTrue int32    = EnumTypeTrue
	BitsVal           BitsType = BitsTypeValue
	BitsPrimitiveVal  int32    = BitsTypeValue
	BitsTrue          BitsType = BitsTypeTrue
	BitsPrimitiveTrue int32    = BitsTypeTrue
)

var _ _bindings.Enum = EnumType(0)

type EnumType int32

const (
	EnumTypeValue EnumType = 1
	EnumTypeTrue  EnumType = 2
)

func (_ EnumType) I_EnumValues() []EnumType {
	return []EnumType{
		EnumTypeValue,
		EnumTypeTrue,
	}
}

func (_ EnumType) I_EnumIsStrict() bool {
	return true
}

func (x EnumType) IsUnknown() bool {
	switch x {
	case 1:
		return true
	case 2:
		return true
	default:
		return false
	}
}

func (x EnumType) String() string {
	switch x {
	case 1:
		return "Value"
	case 2:
		return "True"
	}
	return "Unknown"
}

var _ _bindings.Bits = BitsType(0)

type BitsType uint32

const (
	BitsTypeValue BitsType = 1
	BitsTypeTrue  BitsType = 2
	BitsType_Mask BitsType = 3
)

func (_ BitsType) I_BitsMask() BitsType {
	return BitsType_Mask
}

func (_ BitsType) I_BitsIsStrict() bool {
	return true
}

func (x BitsType) HasUnknownBits() bool {
	return x.GetUnknownBits() != 0
}

func (x BitsType) GetUnknownBits() uint64 {
	return uint64(^BitsType_Mask & x)
}

func (x BitsType) InvertBits() BitsType {
	return BitsType_Mask & ^x
}

// HasBits validates that all flipped bits in the mask are set.
func (x BitsType) HasBits(mask BitsType) bool {
	return mask|x == x
}

// ClearBits ensures all flipped bits in the mask are unset.
func (x BitsType) ClearBits(mask BitsType) BitsType {
	return ^mask & x
}

func (x BitsType) String() string {
	switch x {
	case 1:
		return "Value"
	case 2:
		return "True"
	}
	return "Unknown"
}
