// Code generated by gotdgen, DO NOT EDIT.

package tg

import (
	
	
	
	
	

	

	
	
	
	
)

// No-op definition for keeping imports.
var (
	_ = bin.Buffer{}
	_ = context.Background()
	_ = fmt.Stringer(nil)
	_ = strings.Builder{}
	_ = errors.Is
	_ = multierr.AppendInto
	_ = sort.Ints
	_ = tdp.Format
	_ = tgerr.Error{}
	_ = tdjson.Encoder{}
)

// InlineQueryPeerTypeSameBotPM represents TL type `inlineQueryPeerTypeSameBotPM#3081ed9d`.
// Peer type: private chat with the bot itself
//
// See https://core.telegram.org/constructor/inlineQueryPeerTypeSameBotPM for reference.
type InlineQueryPeerTypeSameBotPM struct {
}

// InlineQueryPeerTypeSameBotPMTypeID is TL type id of InlineQueryPeerTypeSameBotPM.
const InlineQueryPeerTypeSameBotPMTypeID = 0x3081ed9d

// construct implements constructor of InlineQueryPeerTypeClass.
func ( InlineQueryPeerTypeSameBotPM) () InlineQueryPeerTypeClass { return & }

// Ensuring interfaces in compile-time for InlineQueryPeerTypeSameBotPM.
var (
	_ bin.Encoder     = &InlineQueryPeerTypeSameBotPM{}
	_ bin.Decoder     = &InlineQueryPeerTypeSameBotPM{}
	_ bin.BareEncoder = &InlineQueryPeerTypeSameBotPM{}
	_ bin.BareDecoder = &InlineQueryPeerTypeSameBotPM{}

	_ InlineQueryPeerTypeClass = &InlineQueryPeerTypeSameBotPM{}
)

func ( *InlineQueryPeerTypeSameBotPM) () bool {
	if  == nil {
		return true
	}

	return true
}

// String implements fmt.Stringer.
func ( *InlineQueryPeerTypeSameBotPM) () string {
	if  == nil {
		return "InlineQueryPeerTypeSameBotPM(nil)"
	}
	type  InlineQueryPeerTypeSameBotPM
	return fmt.Sprintf("InlineQueryPeerTypeSameBotPM%+v", (*))
}

// TypeID returns type id in TL schema.
//
// See https://core.telegram.org/mtproto/TL-tl#remarks.
func (*InlineQueryPeerTypeSameBotPM) () uint32 {
	return InlineQueryPeerTypeSameBotPMTypeID
}

// TypeName returns name of type in TL schema.
func (*InlineQueryPeerTypeSameBotPM) () string {
	return "inlineQueryPeerTypeSameBotPM"
}

// TypeInfo returns info about TL type.
func ( *InlineQueryPeerTypeSameBotPM) () tdp.Type {
	 := tdp.Type{
		Name: "inlineQueryPeerTypeSameBotPM",
		ID:   InlineQueryPeerTypeSameBotPMTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{}
	return 
}

// Encode implements bin.Encoder.
func ( *InlineQueryPeerTypeSameBotPM) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inlineQueryPeerTypeSameBotPM#3081ed9d as nil")
	}
	.PutID(InlineQueryPeerTypeSameBotPMTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InlineQueryPeerTypeSameBotPM) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inlineQueryPeerTypeSameBotPM#3081ed9d as nil")
	}
	return nil
}

// Decode implements bin.Decoder.
func ( *InlineQueryPeerTypeSameBotPM) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inlineQueryPeerTypeSameBotPM#3081ed9d to nil")
	}
	if  := .ConsumeID(InlineQueryPeerTypeSameBotPMTypeID);  != nil {
		return fmt.Errorf("unable to decode inlineQueryPeerTypeSameBotPM#3081ed9d: %w", )
	}
	return .DecodeBare()
}

// DecodeBare implements bin.BareDecoder.
func ( *InlineQueryPeerTypeSameBotPM) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inlineQueryPeerTypeSameBotPM#3081ed9d to nil")
	}
	return nil
}

// InlineQueryPeerTypePM represents TL type `inlineQueryPeerTypePM#833c0fac`.
// Peer type: private chat
//
// See https://core.telegram.org/constructor/inlineQueryPeerTypePM for reference.
type InlineQueryPeerTypePM struct {
}

// InlineQueryPeerTypePMTypeID is TL type id of InlineQueryPeerTypePM.
const InlineQueryPeerTypePMTypeID = 0x833c0fac

// construct implements constructor of InlineQueryPeerTypeClass.
func ( InlineQueryPeerTypePM) () InlineQueryPeerTypeClass { return & }

// Ensuring interfaces in compile-time for InlineQueryPeerTypePM.
var (
	_ bin.Encoder     = &InlineQueryPeerTypePM{}
	_ bin.Decoder     = &InlineQueryPeerTypePM{}
	_ bin.BareEncoder = &InlineQueryPeerTypePM{}
	_ bin.BareDecoder = &InlineQueryPeerTypePM{}

	_ InlineQueryPeerTypeClass = &InlineQueryPeerTypePM{}
)

func ( *InlineQueryPeerTypePM) () bool {
	if  == nil {
		return true
	}

	return true
}

// String implements fmt.Stringer.
func ( *InlineQueryPeerTypePM) () string {
	if  == nil {
		return "InlineQueryPeerTypePM(nil)"
	}
	type  InlineQueryPeerTypePM
	return fmt.Sprintf("InlineQueryPeerTypePM%+v", (*))
}

// TypeID returns type id in TL schema.
//
// See https://core.telegram.org/mtproto/TL-tl#remarks.
func (*InlineQueryPeerTypePM) () uint32 {
	return InlineQueryPeerTypePMTypeID
}

// TypeName returns name of type in TL schema.
func (*InlineQueryPeerTypePM) () string {
	return "inlineQueryPeerTypePM"
}

// TypeInfo returns info about TL type.
func ( *InlineQueryPeerTypePM) () tdp.Type {
	 := tdp.Type{
		Name: "inlineQueryPeerTypePM",
		ID:   InlineQueryPeerTypePMTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{}
	return 
}

// Encode implements bin.Encoder.
func ( *InlineQueryPeerTypePM) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inlineQueryPeerTypePM#833c0fac as nil")
	}
	.PutID(InlineQueryPeerTypePMTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InlineQueryPeerTypePM) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inlineQueryPeerTypePM#833c0fac as nil")
	}
	return nil
}

// Decode implements bin.Decoder.
func ( *InlineQueryPeerTypePM) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inlineQueryPeerTypePM#833c0fac to nil")
	}
	if  := .ConsumeID(InlineQueryPeerTypePMTypeID);  != nil {
		return fmt.Errorf("unable to decode inlineQueryPeerTypePM#833c0fac: %w", )
	}
	return .DecodeBare()
}

// DecodeBare implements bin.BareDecoder.
func ( *InlineQueryPeerTypePM) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inlineQueryPeerTypePM#833c0fac to nil")
	}
	return nil
}

// InlineQueryPeerTypeChat represents TL type `inlineQueryPeerTypeChat#d766c50a`.
// Peer type: chatĀ¹
//
// Links:
//  1. https://core.telegram.org/api/channel
//
// See https://core.telegram.org/constructor/inlineQueryPeerTypeChat for reference.
type InlineQueryPeerTypeChat struct {
}

// InlineQueryPeerTypeChatTypeID is TL type id of InlineQueryPeerTypeChat.
const InlineQueryPeerTypeChatTypeID = 0xd766c50a

// construct implements constructor of InlineQueryPeerTypeClass.
func ( InlineQueryPeerTypeChat) () InlineQueryPeerTypeClass { return & }

// Ensuring interfaces in compile-time for InlineQueryPeerTypeChat.
var (
	_ bin.Encoder     = &InlineQueryPeerTypeChat{}
	_ bin.Decoder     = &InlineQueryPeerTypeChat{}
	_ bin.BareEncoder = &InlineQueryPeerTypeChat{}
	_ bin.BareDecoder = &InlineQueryPeerTypeChat{}

	_ InlineQueryPeerTypeClass = &InlineQueryPeerTypeChat{}
)

func ( *InlineQueryPeerTypeChat) () bool {
	if  == nil {
		return true
	}

	return true
}

// String implements fmt.Stringer.
func ( *InlineQueryPeerTypeChat) () string {
	if  == nil {
		return "InlineQueryPeerTypeChat(nil)"
	}
	type  InlineQueryPeerTypeChat
	return fmt.Sprintf("InlineQueryPeerTypeChat%+v", (*))
}

// TypeID returns type id in TL schema.
//
// See https://core.telegram.org/mtproto/TL-tl#remarks.
func (*InlineQueryPeerTypeChat) () uint32 {
	return InlineQueryPeerTypeChatTypeID
}

// TypeName returns name of type in TL schema.
func (*InlineQueryPeerTypeChat) () string {
	return "inlineQueryPeerTypeChat"
}

// TypeInfo returns info about TL type.
func ( *InlineQueryPeerTypeChat) () tdp.Type {
	 := tdp.Type{
		Name: "inlineQueryPeerTypeChat",
		ID:   InlineQueryPeerTypeChatTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{}
	return 
}

// Encode implements bin.Encoder.
func ( *InlineQueryPeerTypeChat) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inlineQueryPeerTypeChat#d766c50a as nil")
	}
	.PutID(InlineQueryPeerTypeChatTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InlineQueryPeerTypeChat) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inlineQueryPeerTypeChat#d766c50a as nil")
	}
	return nil
}

// Decode implements bin.Decoder.
func ( *InlineQueryPeerTypeChat) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inlineQueryPeerTypeChat#d766c50a to nil")
	}
	if  := .ConsumeID(InlineQueryPeerTypeChatTypeID);  != nil {
		return fmt.Errorf("unable to decode inlineQueryPeerTypeChat#d766c50a: %w", )
	}
	return .DecodeBare()
}

// DecodeBare implements bin.BareDecoder.
func ( *InlineQueryPeerTypeChat) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inlineQueryPeerTypeChat#d766c50a to nil")
	}
	return nil
}

// InlineQueryPeerTypeMegagroup represents TL type `inlineQueryPeerTypeMegagroup#5ec4be43`.
// Peer type: supergroupĀ¹
//
// Links:
//  1. https://core.telegram.org/api/channel
//
// See https://core.telegram.org/constructor/inlineQueryPeerTypeMegagroup for reference.
type InlineQueryPeerTypeMegagroup struct {
}

// InlineQueryPeerTypeMegagroupTypeID is TL type id of InlineQueryPeerTypeMegagroup.
const InlineQueryPeerTypeMegagroupTypeID = 0x5ec4be43

// construct implements constructor of InlineQueryPeerTypeClass.
func ( InlineQueryPeerTypeMegagroup) () InlineQueryPeerTypeClass { return & }

// Ensuring interfaces in compile-time for InlineQueryPeerTypeMegagroup.
var (
	_ bin.Encoder     = &InlineQueryPeerTypeMegagroup{}
	_ bin.Decoder     = &InlineQueryPeerTypeMegagroup{}
	_ bin.BareEncoder = &InlineQueryPeerTypeMegagroup{}
	_ bin.BareDecoder = &InlineQueryPeerTypeMegagroup{}

	_ InlineQueryPeerTypeClass = &InlineQueryPeerTypeMegagroup{}
)

func ( *InlineQueryPeerTypeMegagroup) () bool {
	if  == nil {
		return true
	}

	return true
}

// String implements fmt.Stringer.
func ( *InlineQueryPeerTypeMegagroup) () string {
	if  == nil {
		return "InlineQueryPeerTypeMegagroup(nil)"
	}
	type  InlineQueryPeerTypeMegagroup
	return fmt.Sprintf("InlineQueryPeerTypeMegagroup%+v", (*))
}

// TypeID returns type id in TL schema.
//
// See https://core.telegram.org/mtproto/TL-tl#remarks.
func (*InlineQueryPeerTypeMegagroup) () uint32 {
	return InlineQueryPeerTypeMegagroupTypeID
}

// TypeName returns name of type in TL schema.
func (*InlineQueryPeerTypeMegagroup) () string {
	return "inlineQueryPeerTypeMegagroup"
}

// TypeInfo returns info about TL type.
func ( *InlineQueryPeerTypeMegagroup) () tdp.Type {
	 := tdp.Type{
		Name: "inlineQueryPeerTypeMegagroup",
		ID:   InlineQueryPeerTypeMegagroupTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{}
	return 
}

// Encode implements bin.Encoder.
func ( *InlineQueryPeerTypeMegagroup) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inlineQueryPeerTypeMegagroup#5ec4be43 as nil")
	}
	.PutID(InlineQueryPeerTypeMegagroupTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InlineQueryPeerTypeMegagroup) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inlineQueryPeerTypeMegagroup#5ec4be43 as nil")
	}
	return nil
}

// Decode implements bin.Decoder.
func ( *InlineQueryPeerTypeMegagroup) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inlineQueryPeerTypeMegagroup#5ec4be43 to nil")
	}
	if  := .ConsumeID(InlineQueryPeerTypeMegagroupTypeID);  != nil {
		return fmt.Errorf("unable to decode inlineQueryPeerTypeMegagroup#5ec4be43: %w", )
	}
	return .DecodeBare()
}

// DecodeBare implements bin.BareDecoder.
func ( *InlineQueryPeerTypeMegagroup) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inlineQueryPeerTypeMegagroup#5ec4be43 to nil")
	}
	return nil
}

// InlineQueryPeerTypeBroadcast represents TL type `inlineQueryPeerTypeBroadcast#6334ee9a`.
// Peer type: channelĀ¹
//
// Links:
//  1. https://core.telegram.org/api/channel
//
// See https://core.telegram.org/constructor/inlineQueryPeerTypeBroadcast for reference.
type InlineQueryPeerTypeBroadcast struct {
}

// InlineQueryPeerTypeBroadcastTypeID is TL type id of InlineQueryPeerTypeBroadcast.
const InlineQueryPeerTypeBroadcastTypeID = 0x6334ee9a

// construct implements constructor of InlineQueryPeerTypeClass.
func ( InlineQueryPeerTypeBroadcast) () InlineQueryPeerTypeClass { return & }

// Ensuring interfaces in compile-time for InlineQueryPeerTypeBroadcast.
var (
	_ bin.Encoder     = &InlineQueryPeerTypeBroadcast{}
	_ bin.Decoder     = &InlineQueryPeerTypeBroadcast{}
	_ bin.BareEncoder = &InlineQueryPeerTypeBroadcast{}
	_ bin.BareDecoder = &InlineQueryPeerTypeBroadcast{}

	_ InlineQueryPeerTypeClass = &InlineQueryPeerTypeBroadcast{}
)

func ( *InlineQueryPeerTypeBroadcast) () bool {
	if  == nil {
		return true
	}

	return true
}

// String implements fmt.Stringer.
func ( *InlineQueryPeerTypeBroadcast) () string {
	if  == nil {
		return "InlineQueryPeerTypeBroadcast(nil)"
	}
	type  InlineQueryPeerTypeBroadcast
	return fmt.Sprintf("InlineQueryPeerTypeBroadcast%+v", (*))
}

// TypeID returns type id in TL schema.
//
// See https://core.telegram.org/mtproto/TL-tl#remarks.
func (*InlineQueryPeerTypeBroadcast) () uint32 {
	return InlineQueryPeerTypeBroadcastTypeID
}

// TypeName returns name of type in TL schema.
func (*InlineQueryPeerTypeBroadcast) () string {
	return "inlineQueryPeerTypeBroadcast"
}

// TypeInfo returns info about TL type.
func ( *InlineQueryPeerTypeBroadcast) () tdp.Type {
	 := tdp.Type{
		Name: "inlineQueryPeerTypeBroadcast",
		ID:   InlineQueryPeerTypeBroadcastTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{}
	return 
}

// Encode implements bin.Encoder.
func ( *InlineQueryPeerTypeBroadcast) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inlineQueryPeerTypeBroadcast#6334ee9a as nil")
	}
	.PutID(InlineQueryPeerTypeBroadcastTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InlineQueryPeerTypeBroadcast) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inlineQueryPeerTypeBroadcast#6334ee9a as nil")
	}
	return nil
}

// Decode implements bin.Decoder.
func ( *InlineQueryPeerTypeBroadcast) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inlineQueryPeerTypeBroadcast#6334ee9a to nil")
	}
	if  := .ConsumeID(InlineQueryPeerTypeBroadcastTypeID);  != nil {
		return fmt.Errorf("unable to decode inlineQueryPeerTypeBroadcast#6334ee9a: %w", )
	}
	return .DecodeBare()
}

// DecodeBare implements bin.BareDecoder.
func ( *InlineQueryPeerTypeBroadcast) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inlineQueryPeerTypeBroadcast#6334ee9a to nil")
	}
	return nil
}

// InlineQueryPeerTypeBotPM represents TL type `inlineQueryPeerTypeBotPM#e3b2d0c`.
// Peer type: private chat with a bot.
//
// See https://core.telegram.org/constructor/inlineQueryPeerTypeBotPM for reference.
type InlineQueryPeerTypeBotPM struct {
}

// InlineQueryPeerTypeBotPMTypeID is TL type id of InlineQueryPeerTypeBotPM.
const InlineQueryPeerTypeBotPMTypeID = 0xe3b2d0c

// construct implements constructor of InlineQueryPeerTypeClass.
func ( InlineQueryPeerTypeBotPM) () InlineQueryPeerTypeClass { return & }

// Ensuring interfaces in compile-time for InlineQueryPeerTypeBotPM.
var (
	_ bin.Encoder     = &InlineQueryPeerTypeBotPM{}
	_ bin.Decoder     = &InlineQueryPeerTypeBotPM{}
	_ bin.BareEncoder = &InlineQueryPeerTypeBotPM{}
	_ bin.BareDecoder = &InlineQueryPeerTypeBotPM{}

	_ InlineQueryPeerTypeClass = &InlineQueryPeerTypeBotPM{}
)

func ( *InlineQueryPeerTypeBotPM) () bool {
	if  == nil {
		return true
	}

	return true
}

// String implements fmt.Stringer.
func ( *InlineQueryPeerTypeBotPM) () string {
	if  == nil {
		return "InlineQueryPeerTypeBotPM(nil)"
	}
	type  InlineQueryPeerTypeBotPM
	return fmt.Sprintf("InlineQueryPeerTypeBotPM%+v", (*))
}

// TypeID returns type id in TL schema.
//
// See https://core.telegram.org/mtproto/TL-tl#remarks.
func (*InlineQueryPeerTypeBotPM) () uint32 {
	return InlineQueryPeerTypeBotPMTypeID
}

// TypeName returns name of type in TL schema.
func (*InlineQueryPeerTypeBotPM) () string {
	return "inlineQueryPeerTypeBotPM"
}

// TypeInfo returns info about TL type.
func ( *InlineQueryPeerTypeBotPM) () tdp.Type {
	 := tdp.Type{
		Name: "inlineQueryPeerTypeBotPM",
		ID:   InlineQueryPeerTypeBotPMTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{}
	return 
}

// Encode implements bin.Encoder.
func ( *InlineQueryPeerTypeBotPM) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inlineQueryPeerTypeBotPM#e3b2d0c as nil")
	}
	.PutID(InlineQueryPeerTypeBotPMTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InlineQueryPeerTypeBotPM) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inlineQueryPeerTypeBotPM#e3b2d0c as nil")
	}
	return nil
}

// Decode implements bin.Decoder.
func ( *InlineQueryPeerTypeBotPM) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inlineQueryPeerTypeBotPM#e3b2d0c to nil")
	}
	if  := .ConsumeID(InlineQueryPeerTypeBotPMTypeID);  != nil {
		return fmt.Errorf("unable to decode inlineQueryPeerTypeBotPM#e3b2d0c: %w", )
	}
	return .DecodeBare()
}

// DecodeBare implements bin.BareDecoder.
func ( *InlineQueryPeerTypeBotPM) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inlineQueryPeerTypeBotPM#e3b2d0c to nil")
	}
	return nil
}

// InlineQueryPeerTypeClassName is schema name of InlineQueryPeerTypeClass.
const InlineQueryPeerTypeClassName = "InlineQueryPeerType"

// InlineQueryPeerTypeClass represents InlineQueryPeerType generic type.
//
// See https://core.telegram.org/type/InlineQueryPeerType for reference.
//
// Example:
//
//	g, err := tg.DecodeInlineQueryPeerType(buf)
//	if err != nil {
//	    panic(err)
//	}
//	switch v := g.(type) {
//	case *tg.InlineQueryPeerTypeSameBotPM: // inlineQueryPeerTypeSameBotPM#3081ed9d
//	case *tg.InlineQueryPeerTypePM: // inlineQueryPeerTypePM#833c0fac
//	case *tg.InlineQueryPeerTypeChat: // inlineQueryPeerTypeChat#d766c50a
//	case *tg.InlineQueryPeerTypeMegagroup: // inlineQueryPeerTypeMegagroup#5ec4be43
//	case *tg.InlineQueryPeerTypeBroadcast: // inlineQueryPeerTypeBroadcast#6334ee9a
//	case *tg.InlineQueryPeerTypeBotPM: // inlineQueryPeerTypeBotPM#e3b2d0c
//	default: panic(v)
//	}
type InlineQueryPeerTypeClass interface {
	bin.Encoder
	bin.Decoder
	bin.BareEncoder
	bin.BareDecoder
	construct() InlineQueryPeerTypeClass

	// TypeID returns type id in TL schema.
	//
	// See https://core.telegram.org/mtproto/TL-tl#remarks.
	TypeID() uint32
	// TypeName returns name of type in TL schema.
	TypeName() string
	// String implements fmt.Stringer.
	String() string
	// Zero returns true if current object has a zero value.
	Zero() bool
}

// DecodeInlineQueryPeerType implements binary de-serialization for InlineQueryPeerTypeClass.
func ( *bin.Buffer) (InlineQueryPeerTypeClass, error) {
	,  := .PeekID()
	if  != nil {
		return nil, 
	}
	switch  {
	case InlineQueryPeerTypeSameBotPMTypeID:
		// Decoding inlineQueryPeerTypeSameBotPM#3081ed9d.
		 := InlineQueryPeerTypeSameBotPM{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode InlineQueryPeerTypeClass: %w", )
		}
		return &, nil
	case InlineQueryPeerTypePMTypeID:
		// Decoding inlineQueryPeerTypePM#833c0fac.
		 := InlineQueryPeerTypePM{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode InlineQueryPeerTypeClass: %w", )
		}
		return &, nil
	case InlineQueryPeerTypeChatTypeID:
		// Decoding inlineQueryPeerTypeChat#d766c50a.
		 := InlineQueryPeerTypeChat{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode InlineQueryPeerTypeClass: %w", )
		}
		return &, nil
	case InlineQueryPeerTypeMegagroupTypeID:
		// Decoding inlineQueryPeerTypeMegagroup#5ec4be43.
		 := InlineQueryPeerTypeMegagroup{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode InlineQueryPeerTypeClass: %w", )
		}
		return &, nil
	case InlineQueryPeerTypeBroadcastTypeID:
		// Decoding inlineQueryPeerTypeBroadcast#6334ee9a.
		 := InlineQueryPeerTypeBroadcast{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode InlineQueryPeerTypeClass: %w", )
		}
		return &, nil
	case InlineQueryPeerTypeBotPMTypeID:
		// Decoding inlineQueryPeerTypeBotPM#e3b2d0c.
		 := InlineQueryPeerTypeBotPM{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode InlineQueryPeerTypeClass: %w", )
		}
		return &, nil
	default:
		return nil, fmt.Errorf("unable to decode InlineQueryPeerTypeClass: %w", bin.NewUnexpectedID())
	}
}

// InlineQueryPeerType boxes the InlineQueryPeerTypeClass providing a helper.
type InlineQueryPeerTypeBox struct {
	InlineQueryPeerType InlineQueryPeerTypeClass
}

// Decode implements bin.Decoder for InlineQueryPeerTypeBox.
func ( *InlineQueryPeerTypeBox) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("unable to decode InlineQueryPeerTypeBox to nil")
	}
	,  := DecodeInlineQueryPeerType()
	if  != nil {
		return fmt.Errorf("unable to decode boxed value: %w", )
	}
	.InlineQueryPeerType = 
	return nil
}

// Encode implements bin.Encode for InlineQueryPeerTypeBox.
func ( *InlineQueryPeerTypeBox) ( *bin.Buffer) error {
	if  == nil || .InlineQueryPeerType == nil {
		return fmt.Errorf("unable to encode InlineQueryPeerTypeClass as nil")
	}
	return .InlineQueryPeerType.Encode()
}