// Code generated by fidlgen; DO NOT EDIT.

package handles

import (
	_zx "syscall/zx"
	_bindings "syscall/zx/fidl"
)

var _ _bindings.Enum = ObjType(0)

type ObjType uint32

const (
	ObjTypeNone          ObjType = 0
	ObjTypeProcess       ObjType = 1
	ObjTypeThread        ObjType = 2
	ObjTypeVmo           ObjType = 3
	ObjTypeChannel       ObjType = 4
	ObjTypeEvent         ObjType = 5
	ObjTypePort          ObjType = 6
	ObjTypeInterrupt     ObjType = 9
	ObjTypePciDevice     ObjType = 11
	ObjTypeLog           ObjType = 12
	ObjTypeSocket        ObjType = 14
	ObjTypeResource      ObjType = 15
	ObjTypeEventpair     ObjType = 16
	ObjTypeJob           ObjType = 17
	ObjTypeVmar          ObjType = 18
	ObjTypeFifo          ObjType = 19
	ObjTypeGuest         ObjType = 20
	ObjTypeVcpu          ObjType = 21
	ObjTypeTimer         ObjType = 22
	ObjTypeIommu         ObjType = 23
	ObjTypeBti           ObjType = 24
	ObjTypeProfile       ObjType = 25
	ObjTypePmt           ObjType = 26
	ObjTypeSuspendToken  ObjType = 27
	ObjTypePager         ObjType = 28
	ObjTypeException     ObjType = 29
	ObjTypeClock         ObjType = 30
	ObjTypeStream        ObjType = 31
	ObjTypeMsiAllocation ObjType = 32
	ObjTypeMsiInterrupt  ObjType = 33
)

func (_ ObjType) I_EnumValues() []ObjType {
	return []ObjType{
		ObjTypeNone,
		ObjTypeProcess,
		ObjTypeThread,
		ObjTypeVmo,
		ObjTypeChannel,
		ObjTypeEvent,
		ObjTypePort,
		ObjTypeInterrupt,
		ObjTypePciDevice,
		ObjTypeLog,
		ObjTypeSocket,
		ObjTypeResource,
		ObjTypeEventpair,
		ObjTypeJob,
		ObjTypeVmar,
		ObjTypeFifo,
		ObjTypeGuest,
		ObjTypeVcpu,
		ObjTypeTimer,
		ObjTypeIommu,
		ObjTypeBti,
		ObjTypeProfile,
		ObjTypePmt,
		ObjTypeSuspendToken,
		ObjTypePager,
		ObjTypeException,
		ObjTypeClock,
		ObjTypeStream,
		ObjTypeMsiAllocation,
		ObjTypeMsiInterrupt,
	}
}

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

func (x ObjType) IsUnknown() bool {
	switch x {
	case 0:
		return true
	case 1:
		return true
	case 2:
		return true
	case 3:
		return true
	case 4:
		return true
	case 5:
		return true
	case 6:
		return true
	case 9:
		return true
	case 11:
		return true
	case 12:
		return true
	case 14:
		return true
	case 15:
		return true
	case 16:
		return true
	case 17:
		return true
	case 18:
		return true
	case 19:
		return true
	case 20:
		return true
	case 21:
		return true
	case 22:
		return true
	case 23:
		return true
	case 24:
		return true
	case 25:
		return true
	case 26:
		return true
	case 27:
		return true
	case 28:
		return true
	case 29:
		return true
	case 30:
		return true
	case 31:
		return true
	case 32:
		return true
	case 33:
		return true
	default:
		return false
	}
}

func (x ObjType) String() string {
	switch x {
	case 0:
		return "None"
	case 1:
		return "Process"
	case 2:
		return "Thread"
	case 3:
		return "Vmo"
	case 4:
		return "Channel"
	case 5:
		return "Event"
	case 6:
		return "Port"
	case 9:
		return "Interrupt"
	case 11:
		return "PciDevice"
	case 12:
		return "Log"
	case 14:
		return "Socket"
	case 15:
		return "Resource"
	case 16:
		return "Eventpair"
	case 17:
		return "Job"
	case 18:
		return "Vmar"
	case 19:
		return "Fifo"
	case 20:
		return "Guest"
	case 21:
		return "Vcpu"
	case 22:
		return "Timer"
	case 23:
		return "Iommu"
	case 24:
		return "Bti"
	case 25:
		return "Profile"
	case 26:
		return "Pmt"
	case 27:
		return "SuspendToken"
	case 28:
		return "Pager"
	case 29:
		return "Exception"
	case 30:
		return "Clock"
	case 31:
		return "Stream"
	case 32:
		return "MsiAllocation"
	case 33:
		return "MsiInterrupt"
	}
	return "Unknown"
}

type Handles struct {
	_                         struct{}                            `fidl:"s" fidl_size_v1:"132" fidl_alignment_v1:"4"`
	PlainHandle               _zx.Handle                          `fidl_offset_v1:"0" fidl_handle_subtype:"0" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	BtiHandle                 _zx.Handle                          `fidl_offset_v1:"4" fidl_handle_subtype:"24" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	ChannelHandle             _zx.Channel                         `fidl_offset_v1:"8" fidl_handle_subtype:"4" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	ClockHandle               _zx.Handle                          `fidl_offset_v1:"12" fidl_handle_subtype:"0" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	DebuglogHandle            _zx.Log                             `fidl_offset_v1:"16" fidl_handle_subtype:"12" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	EventHandle               _zx.Event                           `fidl_offset_v1:"20" fidl_handle_subtype:"5" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	EventpairHandle           _zx.Handle                          `fidl_offset_v1:"24" fidl_handle_subtype:"16" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	ExceptionHandle           _zx.Handle                          `fidl_offset_v1:"28" fidl_handle_subtype:"0" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	FifoHandle                _zx.Handle                          `fidl_offset_v1:"32" fidl_handle_subtype:"19" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	GuestHandle               _zx.Handle                          `fidl_offset_v1:"36" fidl_handle_subtype:"20" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	InterruptHandle           _zx.Handle                          `fidl_offset_v1:"40" fidl_handle_subtype:"9" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	IommuHandle               _zx.Handle                          `fidl_offset_v1:"44" fidl_handle_subtype:"23" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	JobHandle                 _zx.Handle                          `fidl_offset_v1:"48" fidl_handle_subtype:"17" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	PagerHandle               _zx.Handle                          `fidl_offset_v1:"52" fidl_handle_subtype:"28" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	PcideviceHandle           _zx.Handle                          `fidl_offset_v1:"56" fidl_handle_subtype:"11" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	PmtHandle                 _zx.Handle                          `fidl_offset_v1:"60" fidl_handle_subtype:"26" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	PortHandle                _zx.Port                            `fidl_offset_v1:"64" fidl_handle_subtype:"6" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	ProcessHandle             _zx.Handle                          `fidl_offset_v1:"68" fidl_handle_subtype:"1" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	ProfileHandle             _zx.Handle                          `fidl_offset_v1:"72" fidl_handle_subtype:"25" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	ResourceHandle            _zx.Handle                          `fidl_offset_v1:"76" fidl_handle_subtype:"15" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	SocketHandle              _zx.Socket                          `fidl_offset_v1:"80" fidl_handle_subtype:"14" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	SuspendtokenHandle        _zx.Handle                          `fidl_offset_v1:"84" fidl_handle_subtype:"27" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	ThreadHandle              _zx.Handle                          `fidl_offset_v1:"88" fidl_handle_subtype:"2" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	TimerHandle               _zx.Handle                          `fidl_offset_v1:"92" fidl_handle_subtype:"22" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	VcpuHandle                _zx.Handle                          `fidl_offset_v1:"96" fidl_handle_subtype:"21" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	VmarHandle                _zx.VMAR                            `fidl_offset_v1:"100" fidl_handle_subtype:"18" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	VmoHandle                 _zx.VMO                             `fidl_offset_v1:"104" fidl_handle_subtype:"3" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	RightsHandle              _zx.VMO                             `fidl_offset_v1:"108" fidl_handle_subtype:"3" fidl_handle_rights:"1" fidl_bounds:"0"`
	AliasedPlainHandleField   _zx.Handle                          `fidl_offset_v1:"112" fidl_handle_subtype:"0" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	AliasedSubtypeHandleField _zx.VMO                             `fidl_offset_v1:"116" fidl_handle_subtype:"3" fidl_handle_rights:"2147483648" fidl_bounds:"0"`
	AliasedRightsHandleField  _zx.VMO                             `fidl_offset_v1:"120" fidl_handle_subtype:"3" fidl_handle_rights:"1" fidl_bounds:"0"`
	SomeProtocol              SomeProtocolWithCtxInterface        `fidl_offset_v1:"124" fidl_handle_subtype:"4"`
	RequestSomeProtocol       SomeProtocolWithCtxInterfaceRequest `fidl_offset_v1:"128" fidl_handle_subtype:"4" fidl_bounds:"0"`
}

var _mHandles = _bindings.CreateLazyMarshaler(Handles{})

func (msg *Handles) Marshaler() _bindings.Marshaler {
	return _mHandles
}

const ()

type SomeProtocolWithCtxInterface _bindings.ChannelProxy

type SomeProtocolWithCtx interface {
}

type SomeProtocolWithCtxTransitionalBase struct{}

type SomeProtocolWithCtxInterfaceRequest _bindings.InterfaceRequest

func NewSomeProtocolWithCtxInterfaceRequest() (SomeProtocolWithCtxInterfaceRequest, *SomeProtocolWithCtxInterface, error) {
	req, cli, err := _bindings.NewInterfaceRequest()
	return SomeProtocolWithCtxInterfaceRequest(req), (*SomeProtocolWithCtxInterface)(cli), err
}

type SomeProtocolWithCtxStub struct {
	Impl SomeProtocolWithCtx
}

func (s_ *SomeProtocolWithCtxStub) Dispatch(args_ _bindings.DispatchArgs) (_bindings.Message, bool, error) {
	switch args_.Ordinal {
	}
	return nil, false, _bindings.ErrUnknownOrdinal
}

type SomeProtocolEventProxy _bindings.ChannelProxy
