// 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{}
)

// JoinChatBotResultApproved represents TL type `joinChatBotResultApproved#ae152a69`.
//
// See https://core.telegram.org/constructor/joinChatBotResultApproved for reference.
type JoinChatBotResultApproved struct {
}

// JoinChatBotResultApprovedTypeID is TL type id of JoinChatBotResultApproved.
const JoinChatBotResultApprovedTypeID = 0xae152a69

// construct implements constructor of JoinChatBotResultClass.
func ( JoinChatBotResultApproved) () JoinChatBotResultClass { return & }

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

	_ JoinChatBotResultClass = &JoinChatBotResultApproved{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *JoinChatBotResultApproved) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode joinChatBotResultApproved#ae152a69 as nil")
	}
	.PutID(JoinChatBotResultApprovedTypeID)
	return .EncodeBare()
}

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

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

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

// JoinChatBotResultDeclined represents TL type `joinChatBotResultDeclined#efa0194`.
//
// See https://core.telegram.org/constructor/joinChatBotResultDeclined for reference.
type JoinChatBotResultDeclined struct {
}

// JoinChatBotResultDeclinedTypeID is TL type id of JoinChatBotResultDeclined.
const JoinChatBotResultDeclinedTypeID = 0xefa0194

// construct implements constructor of JoinChatBotResultClass.
func ( JoinChatBotResultDeclined) () JoinChatBotResultClass { return & }

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

	_ JoinChatBotResultClass = &JoinChatBotResultDeclined{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *JoinChatBotResultDeclined) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode joinChatBotResultDeclined#efa0194 as nil")
	}
	.PutID(JoinChatBotResultDeclinedTypeID)
	return .EncodeBare()
}

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

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

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

// JoinChatBotResultQueued represents TL type `joinChatBotResultQueued#98a3a840`.
//
// See https://core.telegram.org/constructor/joinChatBotResultQueued for reference.
type JoinChatBotResultQueued struct {
}

// JoinChatBotResultQueuedTypeID is TL type id of JoinChatBotResultQueued.
const JoinChatBotResultQueuedTypeID = 0x98a3a840

// construct implements constructor of JoinChatBotResultClass.
func ( JoinChatBotResultQueued) () JoinChatBotResultClass { return & }

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

	_ JoinChatBotResultClass = &JoinChatBotResultQueued{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *JoinChatBotResultQueued) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode joinChatBotResultQueued#98a3a840 as nil")
	}
	.PutID(JoinChatBotResultQueuedTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *JoinChatBotResultQueued) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode joinChatBotResultQueued#98a3a840 as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *JoinChatBotResultQueued) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode joinChatBotResultQueued#98a3a840 to nil")
	}
	return nil
}

// JoinChatBotResultWebView represents TL type `joinChatBotResultWebView#d6e3b813`.
//
// See https://core.telegram.org/constructor/joinChatBotResultWebView for reference.
type JoinChatBotResultWebView struct {
	// URL field of JoinChatBotResultWebView.
	URL string
}

// JoinChatBotResultWebViewTypeID is TL type id of JoinChatBotResultWebView.
const JoinChatBotResultWebViewTypeID = 0xd6e3b813

// construct implements constructor of JoinChatBotResultClass.
func ( JoinChatBotResultWebView) () JoinChatBotResultClass { return & }

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

	_ JoinChatBotResultClass = &JoinChatBotResultWebView{}
)

func ( *JoinChatBotResultWebView) () bool {
	if  == nil {
		return true
	}
	if !(.URL == "") {
		return false
	}

	return true
}

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

// FillFrom fills JoinChatBotResultWebView from given interface.
func ( *JoinChatBotResultWebView) ( interface {
	() ( string)
}) {
	.URL = .()
}

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

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

// TypeInfo returns info about TL type.
func ( *JoinChatBotResultWebView) () tdp.Type {
	 := tdp.Type{
		Name: "joinChatBotResultWebView",
		ID:   JoinChatBotResultWebViewTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "URL",
			SchemaName: "url",
		},
	}
	return 
}

// Encode implements bin.Encoder.
func ( *JoinChatBotResultWebView) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode joinChatBotResultWebView#d6e3b813 as nil")
	}
	.PutID(JoinChatBotResultWebViewTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *JoinChatBotResultWebView) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode joinChatBotResultWebView#d6e3b813 as nil")
	}
	.PutString(.URL)
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *JoinChatBotResultWebView) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode joinChatBotResultWebView#d6e3b813 to nil")
	}
	{
		,  := .String()
		if  != nil {
			return fmt.Errorf("unable to decode joinChatBotResultWebView#d6e3b813: field url: %w", )
		}
		.URL = 
	}
	return nil
}

// GetURL returns value of URL field.
func ( *JoinChatBotResultWebView) () ( string) {
	if  == nil {
		return
	}
	return .URL
}

// JoinChatBotResultClassName is schema name of JoinChatBotResultClass.
const JoinChatBotResultClassName = "JoinChatBotResult"

// JoinChatBotResultClass represents JoinChatBotResult generic type.
//
// See https://core.telegram.org/type/JoinChatBotResult for reference.
//
// Constructors:
//   - [JoinChatBotResultApproved]
//   - [JoinChatBotResultDeclined]
//   - [JoinChatBotResultQueued]
//   - [JoinChatBotResultWebView]
//
// Example:
//
//	g, err := tg.DecodeJoinChatBotResult(buf)
//	if err != nil {
//	    panic(err)
//	}
//	switch v := g.(type) {
//	case *tg.JoinChatBotResultApproved: // joinChatBotResultApproved#ae152a69
//	case *tg.JoinChatBotResultDeclined: // joinChatBotResultDeclined#efa0194
//	case *tg.JoinChatBotResultQueued: // joinChatBotResultQueued#98a3a840
//	case *tg.JoinChatBotResultWebView: // joinChatBotResultWebView#d6e3b813
//	default: panic(v)
//	}
type JoinChatBotResultClass interface {
	bin.Encoder
	bin.Decoder
	bin.BareEncoder
	bin.BareDecoder
	construct() JoinChatBotResultClass

	// 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
}

// DecodeJoinChatBotResult implements binary de-serialization for JoinChatBotResultClass.
func ( *bin.Buffer) (JoinChatBotResultClass, error) {
	,  := .PeekID()
	if  != nil {
		return nil, 
	}
	switch  {
	case JoinChatBotResultApprovedTypeID:
		// Decoding joinChatBotResultApproved#ae152a69.
		 := JoinChatBotResultApproved{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode JoinChatBotResultClass: %w", )
		}
		return &, nil
	case JoinChatBotResultDeclinedTypeID:
		// Decoding joinChatBotResultDeclined#efa0194.
		 := JoinChatBotResultDeclined{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode JoinChatBotResultClass: %w", )
		}
		return &, nil
	case JoinChatBotResultQueuedTypeID:
		// Decoding joinChatBotResultQueued#98a3a840.
		 := JoinChatBotResultQueued{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode JoinChatBotResultClass: %w", )
		}
		return &, nil
	case JoinChatBotResultWebViewTypeID:
		// Decoding joinChatBotResultWebView#d6e3b813.
		 := JoinChatBotResultWebView{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode JoinChatBotResultClass: %w", )
		}
		return &, nil
	default:
		return nil, fmt.Errorf("unable to decode JoinChatBotResultClass: %w", bin.NewUnexpectedID())
	}
}

// JoinChatBotResult boxes the JoinChatBotResultClass providing a helper.
type JoinChatBotResultBox struct {
	JoinChatBotResult JoinChatBotResultClass
}

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

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