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

// SendMessageTypingAction represents TL type `sendMessageTypingAction#16bf744e`.
// User is typing.
//
// See https://core.telegram.org/constructor/sendMessageTypingAction for reference.
type SendMessageTypingAction struct {
}

// SendMessageTypingActionTypeID is TL type id of SendMessageTypingAction.
const SendMessageTypingActionTypeID = 0x16bf744e

// construct implements constructor of SendMessageActionClass.
func ( SendMessageTypingAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageTypingAction{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *SendMessageTypingAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageTypingAction#16bf744e as nil")
	}
	.PutID(SendMessageTypingActionTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *SendMessageTypingAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageTypingAction#16bf744e as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *SendMessageTypingAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode sendMessageTypingAction#16bf744e to nil")
	}
	return nil
}

// SendMessageCancelAction represents TL type `sendMessageCancelAction#fd5ec8f5`.
// Invalidate all previous action updates. E.g. when user deletes entered text or aborts
// a video upload.
//
// See https://core.telegram.org/constructor/sendMessageCancelAction for reference.
type SendMessageCancelAction struct {
}

// SendMessageCancelActionTypeID is TL type id of SendMessageCancelAction.
const SendMessageCancelActionTypeID = 0xfd5ec8f5

// construct implements constructor of SendMessageActionClass.
func ( SendMessageCancelAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageCancelAction{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *SendMessageCancelAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageCancelAction#fd5ec8f5 as nil")
	}
	.PutID(SendMessageCancelActionTypeID)
	return .EncodeBare()
}

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

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

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

// SendMessageRecordVideoAction represents TL type `sendMessageRecordVideoAction#a187d66f`.
// User is recording a video.
//
// See https://core.telegram.org/constructor/sendMessageRecordVideoAction for reference.
type SendMessageRecordVideoAction struct {
}

// SendMessageRecordVideoActionTypeID is TL type id of SendMessageRecordVideoAction.
const SendMessageRecordVideoActionTypeID = 0xa187d66f

// construct implements constructor of SendMessageActionClass.
func ( SendMessageRecordVideoAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageRecordVideoAction{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *SendMessageRecordVideoAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageRecordVideoAction#a187d66f as nil")
	}
	.PutID(SendMessageRecordVideoActionTypeID)
	return .EncodeBare()
}

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

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

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

// SendMessageUploadVideoAction represents TL type `sendMessageUploadVideoAction#e9763aec`.
// User is uploading a video.
//
// See https://core.telegram.org/constructor/sendMessageUploadVideoAction for reference.
type SendMessageUploadVideoAction struct {
	// Progress percentage
	Progress int
}

// SendMessageUploadVideoActionTypeID is TL type id of SendMessageUploadVideoAction.
const SendMessageUploadVideoActionTypeID = 0xe9763aec

// construct implements constructor of SendMessageActionClass.
func ( SendMessageUploadVideoAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageUploadVideoAction{}
)

func ( *SendMessageUploadVideoAction) () bool {
	if  == nil {
		return true
	}
	if !(.Progress == 0) {
		return false
	}

	return true
}

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

// FillFrom fills SendMessageUploadVideoAction from given interface.
func ( *SendMessageUploadVideoAction) ( interface {
	() ( int)
}) {
	.Progress = .()
}

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

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

// TypeInfo returns info about TL type.
func ( *SendMessageUploadVideoAction) () tdp.Type {
	 := tdp.Type{
		Name: "sendMessageUploadVideoAction",
		ID:   SendMessageUploadVideoActionTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "Progress",
			SchemaName: "progress",
		},
	}
	return 
}

// Encode implements bin.Encoder.
func ( *SendMessageUploadVideoAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageUploadVideoAction#e9763aec as nil")
	}
	.PutID(SendMessageUploadVideoActionTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *SendMessageUploadVideoAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageUploadVideoAction#e9763aec as nil")
	}
	.PutInt(.Progress)
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *SendMessageUploadVideoAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode sendMessageUploadVideoAction#e9763aec to nil")
	}
	{
		,  := .Int()
		if  != nil {
			return fmt.Errorf("unable to decode sendMessageUploadVideoAction#e9763aec: field progress: %w", )
		}
		.Progress = 
	}
	return nil
}

// GetProgress returns value of Progress field.
func ( *SendMessageUploadVideoAction) () ( int) {
	if  == nil {
		return
	}
	return .Progress
}

// SendMessageRecordAudioAction represents TL type `sendMessageRecordAudioAction#d52f73f7`.
// User is recording a voice message.
//
// See https://core.telegram.org/constructor/sendMessageRecordAudioAction for reference.
type SendMessageRecordAudioAction struct {
}

// SendMessageRecordAudioActionTypeID is TL type id of SendMessageRecordAudioAction.
const SendMessageRecordAudioActionTypeID = 0xd52f73f7

// construct implements constructor of SendMessageActionClass.
func ( SendMessageRecordAudioAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageRecordAudioAction{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *SendMessageRecordAudioAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageRecordAudioAction#d52f73f7 as nil")
	}
	.PutID(SendMessageRecordAudioActionTypeID)
	return .EncodeBare()
}

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

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

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

// SendMessageUploadAudioAction represents TL type `sendMessageUploadAudioAction#f351d7ab`.
// User is uploading a voice message.
//
// See https://core.telegram.org/constructor/sendMessageUploadAudioAction for reference.
type SendMessageUploadAudioAction struct {
	// Progress percentage
	Progress int
}

// SendMessageUploadAudioActionTypeID is TL type id of SendMessageUploadAudioAction.
const SendMessageUploadAudioActionTypeID = 0xf351d7ab

// construct implements constructor of SendMessageActionClass.
func ( SendMessageUploadAudioAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageUploadAudioAction{}
)

func ( *SendMessageUploadAudioAction) () bool {
	if  == nil {
		return true
	}
	if !(.Progress == 0) {
		return false
	}

	return true
}

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

// FillFrom fills SendMessageUploadAudioAction from given interface.
func ( *SendMessageUploadAudioAction) ( interface {
	() ( int)
}) {
	.Progress = .()
}

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

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

// TypeInfo returns info about TL type.
func ( *SendMessageUploadAudioAction) () tdp.Type {
	 := tdp.Type{
		Name: "sendMessageUploadAudioAction",
		ID:   SendMessageUploadAudioActionTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "Progress",
			SchemaName: "progress",
		},
	}
	return 
}

// Encode implements bin.Encoder.
func ( *SendMessageUploadAudioAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageUploadAudioAction#f351d7ab as nil")
	}
	.PutID(SendMessageUploadAudioActionTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *SendMessageUploadAudioAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageUploadAudioAction#f351d7ab as nil")
	}
	.PutInt(.Progress)
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *SendMessageUploadAudioAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode sendMessageUploadAudioAction#f351d7ab to nil")
	}
	{
		,  := .Int()
		if  != nil {
			return fmt.Errorf("unable to decode sendMessageUploadAudioAction#f351d7ab: field progress: %w", )
		}
		.Progress = 
	}
	return nil
}

// GetProgress returns value of Progress field.
func ( *SendMessageUploadAudioAction) () ( int) {
	if  == nil {
		return
	}
	return .Progress
}

// SendMessageUploadPhotoAction represents TL type `sendMessageUploadPhotoAction#d1d34a26`.
// User is uploading a photo.
//
// See https://core.telegram.org/constructor/sendMessageUploadPhotoAction for reference.
type SendMessageUploadPhotoAction struct {
	// Progress percentage
	Progress int
}

// SendMessageUploadPhotoActionTypeID is TL type id of SendMessageUploadPhotoAction.
const SendMessageUploadPhotoActionTypeID = 0xd1d34a26

// construct implements constructor of SendMessageActionClass.
func ( SendMessageUploadPhotoAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageUploadPhotoAction{}
)

func ( *SendMessageUploadPhotoAction) () bool {
	if  == nil {
		return true
	}
	if !(.Progress == 0) {
		return false
	}

	return true
}

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

// FillFrom fills SendMessageUploadPhotoAction from given interface.
func ( *SendMessageUploadPhotoAction) ( interface {
	() ( int)
}) {
	.Progress = .()
}

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

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

// TypeInfo returns info about TL type.
func ( *SendMessageUploadPhotoAction) () tdp.Type {
	 := tdp.Type{
		Name: "sendMessageUploadPhotoAction",
		ID:   SendMessageUploadPhotoActionTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "Progress",
			SchemaName: "progress",
		},
	}
	return 
}

// Encode implements bin.Encoder.
func ( *SendMessageUploadPhotoAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageUploadPhotoAction#d1d34a26 as nil")
	}
	.PutID(SendMessageUploadPhotoActionTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *SendMessageUploadPhotoAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageUploadPhotoAction#d1d34a26 as nil")
	}
	.PutInt(.Progress)
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *SendMessageUploadPhotoAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode sendMessageUploadPhotoAction#d1d34a26 to nil")
	}
	{
		,  := .Int()
		if  != nil {
			return fmt.Errorf("unable to decode sendMessageUploadPhotoAction#d1d34a26: field progress: %w", )
		}
		.Progress = 
	}
	return nil
}

// GetProgress returns value of Progress field.
func ( *SendMessageUploadPhotoAction) () ( int) {
	if  == nil {
		return
	}
	return .Progress
}

// SendMessageUploadDocumentAction represents TL type `sendMessageUploadDocumentAction#aa0cd9e4`.
// User is uploading a file.
//
// See https://core.telegram.org/constructor/sendMessageUploadDocumentAction for reference.
type SendMessageUploadDocumentAction struct {
	// Progress percentage
	Progress int
}

// SendMessageUploadDocumentActionTypeID is TL type id of SendMessageUploadDocumentAction.
const SendMessageUploadDocumentActionTypeID = 0xaa0cd9e4

// construct implements constructor of SendMessageActionClass.
func ( SendMessageUploadDocumentAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageUploadDocumentAction{}
)

func ( *SendMessageUploadDocumentAction) () bool {
	if  == nil {
		return true
	}
	if !(.Progress == 0) {
		return false
	}

	return true
}

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

// FillFrom fills SendMessageUploadDocumentAction from given interface.
func ( *SendMessageUploadDocumentAction) ( interface {
	() ( int)
}) {
	.Progress = .()
}

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

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

// TypeInfo returns info about TL type.
func ( *SendMessageUploadDocumentAction) () tdp.Type {
	 := tdp.Type{
		Name: "sendMessageUploadDocumentAction",
		ID:   SendMessageUploadDocumentActionTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "Progress",
			SchemaName: "progress",
		},
	}
	return 
}

// Encode implements bin.Encoder.
func ( *SendMessageUploadDocumentAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageUploadDocumentAction#aa0cd9e4 as nil")
	}
	.PutID(SendMessageUploadDocumentActionTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *SendMessageUploadDocumentAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageUploadDocumentAction#aa0cd9e4 as nil")
	}
	.PutInt(.Progress)
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *SendMessageUploadDocumentAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode sendMessageUploadDocumentAction#aa0cd9e4 to nil")
	}
	{
		,  := .Int()
		if  != nil {
			return fmt.Errorf("unable to decode sendMessageUploadDocumentAction#aa0cd9e4: field progress: %w", )
		}
		.Progress = 
	}
	return nil
}

// GetProgress returns value of Progress field.
func ( *SendMessageUploadDocumentAction) () ( int) {
	if  == nil {
		return
	}
	return .Progress
}

// SendMessageGeoLocationAction represents TL type `sendMessageGeoLocationAction#176f8ba1`.
// User is selecting a location to share.
//
// See https://core.telegram.org/constructor/sendMessageGeoLocationAction for reference.
type SendMessageGeoLocationAction struct {
}

// SendMessageGeoLocationActionTypeID is TL type id of SendMessageGeoLocationAction.
const SendMessageGeoLocationActionTypeID = 0x176f8ba1

// construct implements constructor of SendMessageActionClass.
func ( SendMessageGeoLocationAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageGeoLocationAction{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *SendMessageGeoLocationAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageGeoLocationAction#176f8ba1 as nil")
	}
	.PutID(SendMessageGeoLocationActionTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *SendMessageGeoLocationAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageGeoLocationAction#176f8ba1 as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *SendMessageGeoLocationAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode sendMessageGeoLocationAction#176f8ba1 to nil")
	}
	return nil
}

// SendMessageChooseContactAction represents TL type `sendMessageChooseContactAction#628cbc6f`.
// User is selecting a contact to share.
//
// See https://core.telegram.org/constructor/sendMessageChooseContactAction for reference.
type SendMessageChooseContactAction struct {
}

// SendMessageChooseContactActionTypeID is TL type id of SendMessageChooseContactAction.
const SendMessageChooseContactActionTypeID = 0x628cbc6f

// construct implements constructor of SendMessageActionClass.
func ( SendMessageChooseContactAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageChooseContactAction{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *SendMessageChooseContactAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageChooseContactAction#628cbc6f as nil")
	}
	.PutID(SendMessageChooseContactActionTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *SendMessageChooseContactAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageChooseContactAction#628cbc6f as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *SendMessageChooseContactAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode sendMessageChooseContactAction#628cbc6f to nil")
	}
	return nil
}

// SendMessageGamePlayAction represents TL type `sendMessageGamePlayAction#dd6a8f48`.
// User is playing a game
//
// See https://core.telegram.org/constructor/sendMessageGamePlayAction for reference.
type SendMessageGamePlayAction struct {
}

// SendMessageGamePlayActionTypeID is TL type id of SendMessageGamePlayAction.
const SendMessageGamePlayActionTypeID = 0xdd6a8f48

// construct implements constructor of SendMessageActionClass.
func ( SendMessageGamePlayAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageGamePlayAction{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *SendMessageGamePlayAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageGamePlayAction#dd6a8f48 as nil")
	}
	.PutID(SendMessageGamePlayActionTypeID)
	return .EncodeBare()
}

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

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

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

// SendMessageRecordRoundAction represents TL type `sendMessageRecordRoundAction#88f27fbc`.
// User is recording a round video to share
//
// See https://core.telegram.org/constructor/sendMessageRecordRoundAction for reference.
type SendMessageRecordRoundAction struct {
}

// SendMessageRecordRoundActionTypeID is TL type id of SendMessageRecordRoundAction.
const SendMessageRecordRoundActionTypeID = 0x88f27fbc

// construct implements constructor of SendMessageActionClass.
func ( SendMessageRecordRoundAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageRecordRoundAction{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *SendMessageRecordRoundAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageRecordRoundAction#88f27fbc as nil")
	}
	.PutID(SendMessageRecordRoundActionTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *SendMessageRecordRoundAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageRecordRoundAction#88f27fbc as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *SendMessageRecordRoundAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode sendMessageRecordRoundAction#88f27fbc to nil")
	}
	return nil
}

// SendMessageUploadRoundAction represents TL type `sendMessageUploadRoundAction#243e1c66`.
// User is uploading a round video
//
// See https://core.telegram.org/constructor/sendMessageUploadRoundAction for reference.
type SendMessageUploadRoundAction struct {
	// Progress percentage
	Progress int
}

// SendMessageUploadRoundActionTypeID is TL type id of SendMessageUploadRoundAction.
const SendMessageUploadRoundActionTypeID = 0x243e1c66

// construct implements constructor of SendMessageActionClass.
func ( SendMessageUploadRoundAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageUploadRoundAction{}
)

func ( *SendMessageUploadRoundAction) () bool {
	if  == nil {
		return true
	}
	if !(.Progress == 0) {
		return false
	}

	return true
}

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

// FillFrom fills SendMessageUploadRoundAction from given interface.
func ( *SendMessageUploadRoundAction) ( interface {
	() ( int)
}) {
	.Progress = .()
}

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

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

// TypeInfo returns info about TL type.
func ( *SendMessageUploadRoundAction) () tdp.Type {
	 := tdp.Type{
		Name: "sendMessageUploadRoundAction",
		ID:   SendMessageUploadRoundActionTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "Progress",
			SchemaName: "progress",
		},
	}
	return 
}

// Encode implements bin.Encoder.
func ( *SendMessageUploadRoundAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageUploadRoundAction#243e1c66 as nil")
	}
	.PutID(SendMessageUploadRoundActionTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *SendMessageUploadRoundAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageUploadRoundAction#243e1c66 as nil")
	}
	.PutInt(.Progress)
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *SendMessageUploadRoundAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode sendMessageUploadRoundAction#243e1c66 to nil")
	}
	{
		,  := .Int()
		if  != nil {
			return fmt.Errorf("unable to decode sendMessageUploadRoundAction#243e1c66: field progress: %w", )
		}
		.Progress = 
	}
	return nil
}

// GetProgress returns value of Progress field.
func ( *SendMessageUploadRoundAction) () ( int) {
	if  == nil {
		return
	}
	return .Progress
}

// SpeakingInGroupCallAction represents TL type `speakingInGroupCallAction#d92c2285`.
// User is currently speaking in the group call
//
// See https://core.telegram.org/constructor/speakingInGroupCallAction for reference.
type SpeakingInGroupCallAction struct {
}

// SpeakingInGroupCallActionTypeID is TL type id of SpeakingInGroupCallAction.
const SpeakingInGroupCallActionTypeID = 0xd92c2285

// construct implements constructor of SendMessageActionClass.
func ( SpeakingInGroupCallAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SpeakingInGroupCallAction{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *SpeakingInGroupCallAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode speakingInGroupCallAction#d92c2285 as nil")
	}
	.PutID(SpeakingInGroupCallActionTypeID)
	return .EncodeBare()
}

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

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

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

// SendMessageHistoryImportAction represents TL type `sendMessageHistoryImportAction#dbda9246`.
// Chat history is being imported
//
// See https://core.telegram.org/constructor/sendMessageHistoryImportAction for reference.
type SendMessageHistoryImportAction struct {
	// Progress percentage
	Progress int
}

// SendMessageHistoryImportActionTypeID is TL type id of SendMessageHistoryImportAction.
const SendMessageHistoryImportActionTypeID = 0xdbda9246

// construct implements constructor of SendMessageActionClass.
func ( SendMessageHistoryImportAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageHistoryImportAction{}
)

func ( *SendMessageHistoryImportAction) () bool {
	if  == nil {
		return true
	}
	if !(.Progress == 0) {
		return false
	}

	return true
}

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

// FillFrom fills SendMessageHistoryImportAction from given interface.
func ( *SendMessageHistoryImportAction) ( interface {
	() ( int)
}) {
	.Progress = .()
}

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

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

// TypeInfo returns info about TL type.
func ( *SendMessageHistoryImportAction) () tdp.Type {
	 := tdp.Type{
		Name: "sendMessageHistoryImportAction",
		ID:   SendMessageHistoryImportActionTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "Progress",
			SchemaName: "progress",
		},
	}
	return 
}

// Encode implements bin.Encoder.
func ( *SendMessageHistoryImportAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageHistoryImportAction#dbda9246 as nil")
	}
	.PutID(SendMessageHistoryImportActionTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *SendMessageHistoryImportAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageHistoryImportAction#dbda9246 as nil")
	}
	.PutInt(.Progress)
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *SendMessageHistoryImportAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode sendMessageHistoryImportAction#dbda9246 to nil")
	}
	{
		,  := .Int()
		if  != nil {
			return fmt.Errorf("unable to decode sendMessageHistoryImportAction#dbda9246: field progress: %w", )
		}
		.Progress = 
	}
	return nil
}

// GetProgress returns value of Progress field.
func ( *SendMessageHistoryImportAction) () ( int) {
	if  == nil {
		return
	}
	return .Progress
}

// SendMessageChooseStickerAction represents TL type `sendMessageChooseStickerAction#b05ac6b1`.
// User is choosing a sticker
//
// See https://core.telegram.org/constructor/sendMessageChooseStickerAction for reference.
type SendMessageChooseStickerAction struct {
}

// SendMessageChooseStickerActionTypeID is TL type id of SendMessageChooseStickerAction.
const SendMessageChooseStickerActionTypeID = 0xb05ac6b1

// construct implements constructor of SendMessageActionClass.
func ( SendMessageChooseStickerAction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageChooseStickerAction{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *SendMessageChooseStickerAction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageChooseStickerAction#b05ac6b1 as nil")
	}
	.PutID(SendMessageChooseStickerActionTypeID)
	return .EncodeBare()
}

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

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

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

// SendMessageEmojiInteraction represents TL type `sendMessageEmojiInteraction#25972bcb`.
// User has clicked on an animated emoji triggering a reaction, click here for more info
// »¹.
//
// Links:
//  1. https://core.telegram.org/api/animated-emojis#emoji-reactions
//
// See https://core.telegram.org/constructor/sendMessageEmojiInteraction for reference.
type SendMessageEmojiInteraction struct {
	// Emoji
	Emoticon string
	// Message ID of the animated emoji that was clicked
	MsgID int
	// A JSON object with interaction info, click here for more info »¹
	//
	// Links:
	//  1) https://core.telegram.org/api/animated-emojis#emoji-reactions
	Interaction DataJSON
}

// SendMessageEmojiInteractionTypeID is TL type id of SendMessageEmojiInteraction.
const SendMessageEmojiInteractionTypeID = 0x25972bcb

// construct implements constructor of SendMessageActionClass.
func ( SendMessageEmojiInteraction) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageEmojiInteraction{}
)

func ( *SendMessageEmojiInteraction) () bool {
	if  == nil {
		return true
	}
	if !(.Emoticon == "") {
		return false
	}
	if !(.MsgID == 0) {
		return false
	}
	if !(.Interaction.Zero()) {
		return false
	}

	return true
}

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

// FillFrom fills SendMessageEmojiInteraction from given interface.
func ( *SendMessageEmojiInteraction) ( interface {
	() ( string)
	() ( int)
	() ( DataJSON)
}) {
	.Emoticon = .()
	.MsgID = .()
	.Interaction = .()
}

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

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

// TypeInfo returns info about TL type.
func ( *SendMessageEmojiInteraction) () tdp.Type {
	 := tdp.Type{
		Name: "sendMessageEmojiInteraction",
		ID:   SendMessageEmojiInteractionTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "Emoticon",
			SchemaName: "emoticon",
		},
		{
			Name:       "MsgID",
			SchemaName: "msg_id",
		},
		{
			Name:       "Interaction",
			SchemaName: "interaction",
		},
	}
	return 
}

// Encode implements bin.Encoder.
func ( *SendMessageEmojiInteraction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageEmojiInteraction#25972bcb as nil")
	}
	.PutID(SendMessageEmojiInteractionTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *SendMessageEmojiInteraction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageEmojiInteraction#25972bcb as nil")
	}
	.PutString(.Emoticon)
	.PutInt(.MsgID)
	if  := .Interaction.Encode();  != nil {
		return fmt.Errorf("unable to encode sendMessageEmojiInteraction#25972bcb: field interaction: %w", )
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *SendMessageEmojiInteraction) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode sendMessageEmojiInteraction#25972bcb to nil")
	}
	{
		,  := .String()
		if  != nil {
			return fmt.Errorf("unable to decode sendMessageEmojiInteraction#25972bcb: field emoticon: %w", )
		}
		.Emoticon = 
	}
	{
		,  := .Int()
		if  != nil {
			return fmt.Errorf("unable to decode sendMessageEmojiInteraction#25972bcb: field msg_id: %w", )
		}
		.MsgID = 
	}
	{
		if  := .Interaction.Decode();  != nil {
			return fmt.Errorf("unable to decode sendMessageEmojiInteraction#25972bcb: field interaction: %w", )
		}
	}
	return nil
}

// GetEmoticon returns value of Emoticon field.
func ( *SendMessageEmojiInteraction) () ( string) {
	if  == nil {
		return
	}
	return .Emoticon
}

// GetMsgID returns value of MsgID field.
func ( *SendMessageEmojiInteraction) () ( int) {
	if  == nil {
		return
	}
	return .MsgID
}

// GetInteraction returns value of Interaction field.
func ( *SendMessageEmojiInteraction) () ( DataJSON) {
	if  == nil {
		return
	}
	return .Interaction
}

// SendMessageEmojiInteractionSeen represents TL type `sendMessageEmojiInteractionSeen#b665902e`.
// User is watching an animated emoji reaction triggered by another user, click here for
// more info »¹.
//
// Links:
//  1. https://core.telegram.org/api/animated-emojis#emoji-reactions
//
// See https://core.telegram.org/constructor/sendMessageEmojiInteractionSeen for reference.
type SendMessageEmojiInteractionSeen struct {
	// Emoji
	Emoticon string
}

// SendMessageEmojiInteractionSeenTypeID is TL type id of SendMessageEmojiInteractionSeen.
const SendMessageEmojiInteractionSeenTypeID = 0xb665902e

// construct implements constructor of SendMessageActionClass.
func ( SendMessageEmojiInteractionSeen) () SendMessageActionClass { return & }

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

	_ SendMessageActionClass = &SendMessageEmojiInteractionSeen{}
)

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

	return true
}

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

// FillFrom fills SendMessageEmojiInteractionSeen from given interface.
func ( *SendMessageEmojiInteractionSeen) ( interface {
	() ( string)
}) {
	.Emoticon = .()
}

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

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

// TypeInfo returns info about TL type.
func ( *SendMessageEmojiInteractionSeen) () tdp.Type {
	 := tdp.Type{
		Name: "sendMessageEmojiInteractionSeen",
		ID:   SendMessageEmojiInteractionSeenTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "Emoticon",
			SchemaName: "emoticon",
		},
	}
	return 
}

// Encode implements bin.Encoder.
func ( *SendMessageEmojiInteractionSeen) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageEmojiInteractionSeen#b665902e as nil")
	}
	.PutID(SendMessageEmojiInteractionSeenTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *SendMessageEmojiInteractionSeen) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode sendMessageEmojiInteractionSeen#b665902e as nil")
	}
	.PutString(.Emoticon)
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *SendMessageEmojiInteractionSeen) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode sendMessageEmojiInteractionSeen#b665902e to nil")
	}
	{
		,  := .String()
		if  != nil {
			return fmt.Errorf("unable to decode sendMessageEmojiInteractionSeen#b665902e: field emoticon: %w", )
		}
		.Emoticon = 
	}
	return nil
}

// GetEmoticon returns value of Emoticon field.
func ( *SendMessageEmojiInteractionSeen) () ( string) {
	if  == nil {
		return
	}
	return .Emoticon
}

// SendMessageActionClassName is schema name of SendMessageActionClass.
const SendMessageActionClassName = "SendMessageAction"

// SendMessageActionClass represents SendMessageAction generic type.
//
// See https://core.telegram.org/type/SendMessageAction for reference.
//
// Example:
//
//	g, err := tg.DecodeSendMessageAction(buf)
//	if err != nil {
//	    panic(err)
//	}
//	switch v := g.(type) {
//	case *tg.SendMessageTypingAction: // sendMessageTypingAction#16bf744e
//	case *tg.SendMessageCancelAction: // sendMessageCancelAction#fd5ec8f5
//	case *tg.SendMessageRecordVideoAction: // sendMessageRecordVideoAction#a187d66f
//	case *tg.SendMessageUploadVideoAction: // sendMessageUploadVideoAction#e9763aec
//	case *tg.SendMessageRecordAudioAction: // sendMessageRecordAudioAction#d52f73f7
//	case *tg.SendMessageUploadAudioAction: // sendMessageUploadAudioAction#f351d7ab
//	case *tg.SendMessageUploadPhotoAction: // sendMessageUploadPhotoAction#d1d34a26
//	case *tg.SendMessageUploadDocumentAction: // sendMessageUploadDocumentAction#aa0cd9e4
//	case *tg.SendMessageGeoLocationAction: // sendMessageGeoLocationAction#176f8ba1
//	case *tg.SendMessageChooseContactAction: // sendMessageChooseContactAction#628cbc6f
//	case *tg.SendMessageGamePlayAction: // sendMessageGamePlayAction#dd6a8f48
//	case *tg.SendMessageRecordRoundAction: // sendMessageRecordRoundAction#88f27fbc
//	case *tg.SendMessageUploadRoundAction: // sendMessageUploadRoundAction#243e1c66
//	case *tg.SpeakingInGroupCallAction: // speakingInGroupCallAction#d92c2285
//	case *tg.SendMessageHistoryImportAction: // sendMessageHistoryImportAction#dbda9246
//	case *tg.SendMessageChooseStickerAction: // sendMessageChooseStickerAction#b05ac6b1
//	case *tg.SendMessageEmojiInteraction: // sendMessageEmojiInteraction#25972bcb
//	case *tg.SendMessageEmojiInteractionSeen: // sendMessageEmojiInteractionSeen#b665902e
//	default: panic(v)
//	}
type SendMessageActionClass interface {
	bin.Encoder
	bin.Decoder
	bin.BareEncoder
	bin.BareDecoder
	construct() SendMessageActionClass

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

// DecodeSendMessageAction implements binary de-serialization for SendMessageActionClass.
func ( *bin.Buffer) (SendMessageActionClass, error) {
	,  := .PeekID()
	if  != nil {
		return nil, 
	}
	switch  {
	case SendMessageTypingActionTypeID:
		// Decoding sendMessageTypingAction#16bf744e.
		 := SendMessageTypingAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageCancelActionTypeID:
		// Decoding sendMessageCancelAction#fd5ec8f5.
		 := SendMessageCancelAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageRecordVideoActionTypeID:
		// Decoding sendMessageRecordVideoAction#a187d66f.
		 := SendMessageRecordVideoAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageUploadVideoActionTypeID:
		// Decoding sendMessageUploadVideoAction#e9763aec.
		 := SendMessageUploadVideoAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageRecordAudioActionTypeID:
		// Decoding sendMessageRecordAudioAction#d52f73f7.
		 := SendMessageRecordAudioAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageUploadAudioActionTypeID:
		// Decoding sendMessageUploadAudioAction#f351d7ab.
		 := SendMessageUploadAudioAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageUploadPhotoActionTypeID:
		// Decoding sendMessageUploadPhotoAction#d1d34a26.
		 := SendMessageUploadPhotoAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageUploadDocumentActionTypeID:
		// Decoding sendMessageUploadDocumentAction#aa0cd9e4.
		 := SendMessageUploadDocumentAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageGeoLocationActionTypeID:
		// Decoding sendMessageGeoLocationAction#176f8ba1.
		 := SendMessageGeoLocationAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageChooseContactActionTypeID:
		// Decoding sendMessageChooseContactAction#628cbc6f.
		 := SendMessageChooseContactAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageGamePlayActionTypeID:
		// Decoding sendMessageGamePlayAction#dd6a8f48.
		 := SendMessageGamePlayAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageRecordRoundActionTypeID:
		// Decoding sendMessageRecordRoundAction#88f27fbc.
		 := SendMessageRecordRoundAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageUploadRoundActionTypeID:
		// Decoding sendMessageUploadRoundAction#243e1c66.
		 := SendMessageUploadRoundAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SpeakingInGroupCallActionTypeID:
		// Decoding speakingInGroupCallAction#d92c2285.
		 := SpeakingInGroupCallAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageHistoryImportActionTypeID:
		// Decoding sendMessageHistoryImportAction#dbda9246.
		 := SendMessageHistoryImportAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageChooseStickerActionTypeID:
		// Decoding sendMessageChooseStickerAction#b05ac6b1.
		 := SendMessageChooseStickerAction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageEmojiInteractionTypeID:
		// Decoding sendMessageEmojiInteraction#25972bcb.
		 := SendMessageEmojiInteraction{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	case SendMessageEmojiInteractionSeenTypeID:
		// Decoding sendMessageEmojiInteractionSeen#b665902e.
		 := SendMessageEmojiInteractionSeen{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", )
		}
		return &, nil
	default:
		return nil, fmt.Errorf("unable to decode SendMessageActionClass: %w", bin.NewUnexpectedID())
	}
}

// SendMessageAction boxes the SendMessageActionClass providing a helper.
type SendMessageActionBox struct {
	SendMessageAction SendMessageActionClass
}

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

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