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

// InputRichMessage represents TL type `inputRichMessage#e4c449fc`.
//
// See https://core.telegram.org/constructor/inputRichMessage for reference.
type InputRichMessage struct {
	// Flags field of InputRichMessage.
	Flags bin.Fields
	// Rtl field of InputRichMessage.
	Rtl bool
	// Noautolink field of InputRichMessage.
	Noautolink bool
	// Blocks field of InputRichMessage.
	Blocks []PageBlockClass
	// Photos field of InputRichMessage.
	//
	// Use SetPhotos and GetPhotos helpers.
	Photos []InputPhotoClass
	// Documents field of InputRichMessage.
	//
	// Use SetDocuments and GetDocuments helpers.
	Documents []InputDocumentClass
	// Users field of InputRichMessage.
	//
	// Use SetUsers and GetUsers helpers.
	Users []InputUserClass
}

// InputRichMessageTypeID is TL type id of InputRichMessage.
const InputRichMessageTypeID = 0xe4c449fc

// construct implements constructor of InputRichMessageClass.
func ( InputRichMessage) () InputRichMessageClass { return & }

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

	_ InputRichMessageClass = &InputRichMessage{}
)

func ( *InputRichMessage) () bool {
	if  == nil {
		return true
	}
	if !(.Flags.Zero()) {
		return false
	}
	if !(.Rtl == false) {
		return false
	}
	if !(.Noautolink == false) {
		return false
	}
	if !(.Blocks == nil) {
		return false
	}
	if !(.Photos == nil) {
		return false
	}
	if !(.Documents == nil) {
		return false
	}
	if !(.Users == nil) {
		return false
	}

	return true
}

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

// FillFrom fills InputRichMessage from given interface.
func ( *InputRichMessage) ( interface {
	() ( bool)
	() ( bool)
	() ( []PageBlockClass)
	() ( []InputPhotoClass,  bool)
	() ( []InputDocumentClass,  bool)
	() ( []InputUserClass,  bool)
}) {
	.Rtl = .()
	.Noautolink = .()
	.Blocks = .()
	if ,  := .();  {
		.Photos = 
	}

	if ,  := .();  {
		.Documents = 
	}

	if ,  := .();  {
		.Users = 
	}

}

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

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

// TypeInfo returns info about TL type.
func ( *InputRichMessage) () tdp.Type {
	 := tdp.Type{
		Name: "inputRichMessage",
		ID:   InputRichMessageTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "Rtl",
			SchemaName: "rtl",
			Null:       !.Flags.Has(0),
		},
		{
			Name:       "Noautolink",
			SchemaName: "noautolink",
			Null:       !.Flags.Has(1),
		},
		{
			Name:       "Blocks",
			SchemaName: "blocks",
		},
		{
			Name:       "Photos",
			SchemaName: "photos",
			Null:       !.Flags.Has(2),
		},
		{
			Name:       "Documents",
			SchemaName: "documents",
			Null:       !.Flags.Has(3),
		},
		{
			Name:       "Users",
			SchemaName: "users",
			Null:       !.Flags.Has(4),
		},
	}
	return 
}

// SetFlags sets flags for non-zero fields.
func ( *InputRichMessage) () {
	if !(.Rtl == false) {
		.Flags.Set(0)
	}
	if !(.Noautolink == false) {
		.Flags.Set(1)
	}
	if !(.Photos == nil) {
		.Flags.Set(2)
	}
	if !(.Documents == nil) {
		.Flags.Set(3)
	}
	if !(.Users == nil) {
		.Flags.Set(4)
	}
}

// Encode implements bin.Encoder.
func ( *InputRichMessage) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputRichMessage#e4c449fc as nil")
	}
	.PutID(InputRichMessageTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputRichMessage) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputRichMessage#e4c449fc as nil")
	}
	.SetFlags()
	if  := .Flags.Encode();  != nil {
		return fmt.Errorf("unable to encode inputRichMessage#e4c449fc: field flags: %w", )
	}
	.PutVectorHeader(len(.Blocks))
	for ,  := range .Blocks {
		if  == nil {
			return fmt.Errorf("unable to encode inputRichMessage#e4c449fc: field blocks element with index %d is nil", )
		}
		if  := .Encode();  != nil {
			return fmt.Errorf("unable to encode inputRichMessage#e4c449fc: field blocks element with index %d: %w", , )
		}
	}
	if .Flags.Has(2) {
		.PutVectorHeader(len(.Photos))
		for ,  := range .Photos {
			if  == nil {
				return fmt.Errorf("unable to encode inputRichMessage#e4c449fc: field photos element with index %d is nil", )
			}
			if  := .Encode();  != nil {
				return fmt.Errorf("unable to encode inputRichMessage#e4c449fc: field photos element with index %d: %w", , )
			}
		}
	}
	if .Flags.Has(3) {
		.PutVectorHeader(len(.Documents))
		for ,  := range .Documents {
			if  == nil {
				return fmt.Errorf("unable to encode inputRichMessage#e4c449fc: field documents element with index %d is nil", )
			}
			if  := .Encode();  != nil {
				return fmt.Errorf("unable to encode inputRichMessage#e4c449fc: field documents element with index %d: %w", , )
			}
		}
	}
	if .Flags.Has(4) {
		.PutVectorHeader(len(.Users))
		for ,  := range .Users {
			if  == nil {
				return fmt.Errorf("unable to encode inputRichMessage#e4c449fc: field users element with index %d is nil", )
			}
			if  := .Encode();  != nil {
				return fmt.Errorf("unable to encode inputRichMessage#e4c449fc: field users element with index %d: %w", , )
			}
		}
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputRichMessage) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputRichMessage#e4c449fc to nil")
	}
	{
		if  := .Flags.Decode();  != nil {
			return fmt.Errorf("unable to decode inputRichMessage#e4c449fc: field flags: %w", )
		}
	}
	.Rtl = .Flags.Has(0)
	.Noautolink = .Flags.Has(1)
	{
		,  := .VectorHeader()
		if  != nil {
			return fmt.Errorf("unable to decode inputRichMessage#e4c449fc: field blocks: %w", )
		}

		if  > 0 {
			.Blocks = make([]PageBlockClass, 0, %bin.PreallocateLimit)
		}
		for  := 0;  < ; ++ {
			,  := DecodePageBlock()
			if  != nil {
				return fmt.Errorf("unable to decode inputRichMessage#e4c449fc: field blocks: %w", )
			}
			.Blocks = append(.Blocks, )
		}
	}
	if .Flags.Has(2) {
		,  := .VectorHeader()
		if  != nil {
			return fmt.Errorf("unable to decode inputRichMessage#e4c449fc: field photos: %w", )
		}

		if  > 0 {
			.Photos = make([]InputPhotoClass, 0, %bin.PreallocateLimit)
		}
		for  := 0;  < ; ++ {
			,  := DecodeInputPhoto()
			if  != nil {
				return fmt.Errorf("unable to decode inputRichMessage#e4c449fc: field photos: %w", )
			}
			.Photos = append(.Photos, )
		}
	}
	if .Flags.Has(3) {
		,  := .VectorHeader()
		if  != nil {
			return fmt.Errorf("unable to decode inputRichMessage#e4c449fc: field documents: %w", )
		}

		if  > 0 {
			.Documents = make([]InputDocumentClass, 0, %bin.PreallocateLimit)
		}
		for  := 0;  < ; ++ {
			,  := DecodeInputDocument()
			if  != nil {
				return fmt.Errorf("unable to decode inputRichMessage#e4c449fc: field documents: %w", )
			}
			.Documents = append(.Documents, )
		}
	}
	if .Flags.Has(4) {
		,  := .VectorHeader()
		if  != nil {
			return fmt.Errorf("unable to decode inputRichMessage#e4c449fc: field users: %w", )
		}

		if  > 0 {
			.Users = make([]InputUserClass, 0, %bin.PreallocateLimit)
		}
		for  := 0;  < ; ++ {
			,  := DecodeInputUser()
			if  != nil {
				return fmt.Errorf("unable to decode inputRichMessage#e4c449fc: field users: %w", )
			}
			.Users = append(.Users, )
		}
	}
	return nil
}

// SetRtl sets value of Rtl conditional field.
func ( *InputRichMessage) ( bool) {
	if  {
		.Flags.Set(0)
		.Rtl = true
	} else {
		.Flags.Unset(0)
		.Rtl = false
	}
}

// GetRtl returns value of Rtl conditional field.
func ( *InputRichMessage) () ( bool) {
	if  == nil {
		return
	}
	return .Flags.Has(0)
}

// SetNoautolink sets value of Noautolink conditional field.
func ( *InputRichMessage) ( bool) {
	if  {
		.Flags.Set(1)
		.Noautolink = true
	} else {
		.Flags.Unset(1)
		.Noautolink = false
	}
}

// GetNoautolink returns value of Noautolink conditional field.
func ( *InputRichMessage) () ( bool) {
	if  == nil {
		return
	}
	return .Flags.Has(1)
}

// GetBlocks returns value of Blocks field.
func ( *InputRichMessage) () ( []PageBlockClass) {
	if  == nil {
		return
	}
	return .Blocks
}

// SetPhotos sets value of Photos conditional field.
func ( *InputRichMessage) ( []InputPhotoClass) {
	.Flags.Set(2)
	.Photos = 
}

// GetPhotos returns value of Photos conditional field and
// boolean which is true if field was set.
func ( *InputRichMessage) () ( []InputPhotoClass,  bool) {
	if  == nil {
		return
	}
	if !.Flags.Has(2) {
		return , false
	}
	return .Photos, true
}

// SetDocuments sets value of Documents conditional field.
func ( *InputRichMessage) ( []InputDocumentClass) {
	.Flags.Set(3)
	.Documents = 
}

// GetDocuments returns value of Documents conditional field and
// boolean which is true if field was set.
func ( *InputRichMessage) () ( []InputDocumentClass,  bool) {
	if  == nil {
		return
	}
	if !.Flags.Has(3) {
		return , false
	}
	return .Documents, true
}

// SetUsers sets value of Users conditional field.
func ( *InputRichMessage) ( []InputUserClass) {
	.Flags.Set(4)
	.Users = 
}

// GetUsers returns value of Users conditional field and
// boolean which is true if field was set.
func ( *InputRichMessage) () ( []InputUserClass,  bool) {
	if  == nil {
		return
	}
	if !.Flags.Has(4) {
		return , false
	}
	return .Users, true
}

// MapBlocks returns field Blocks wrapped in PageBlockClassArray helper.
func ( *InputRichMessage) () ( PageBlockClassArray) {
	return PageBlockClassArray(.Blocks)
}

// MapPhotos returns field Photos wrapped in InputPhotoClassArray helper.
func ( *InputRichMessage) () ( InputPhotoClassArray,  bool) {
	if !.Flags.Has(2) {
		return , false
	}
	return InputPhotoClassArray(.Photos), true
}

// MapDocuments returns field Documents wrapped in InputDocumentClassArray helper.
func ( *InputRichMessage) () ( InputDocumentClassArray,  bool) {
	if !.Flags.Has(3) {
		return , false
	}
	return InputDocumentClassArray(.Documents), true
}

// MapUsers returns field Users wrapped in InputUserClassArray helper.
func ( *InputRichMessage) () ( InputUserClassArray,  bool) {
	if !.Flags.Has(4) {
		return , false
	}
	return InputUserClassArray(.Users), true
}

// InputRichMessageHTML represents TL type `inputRichMessageHTML#dacb836a`.
//
// See https://core.telegram.org/constructor/inputRichMessageHTML for reference.
type InputRichMessageHTML struct {
	// Flags field of InputRichMessageHTML.
	Flags bin.Fields
	// Rtl field of InputRichMessageHTML.
	Rtl bool
	// Noautolink field of InputRichMessageHTML.
	Noautolink bool
	// HTML field of InputRichMessageHTML.
	HTML string
	// Files field of InputRichMessageHTML.
	//
	// Use SetFiles and GetFiles helpers.
	Files []InputRichFileClass
}

// InputRichMessageHTMLTypeID is TL type id of InputRichMessageHTML.
const InputRichMessageHTMLTypeID = 0xdacb836a

// construct implements constructor of InputRichMessageClass.
func ( InputRichMessageHTML) () InputRichMessageClass { return & }

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

	_ InputRichMessageClass = &InputRichMessageHTML{}
)

func ( *InputRichMessageHTML) () bool {
	if  == nil {
		return true
	}
	if !(.Flags.Zero()) {
		return false
	}
	if !(.Rtl == false) {
		return false
	}
	if !(.Noautolink == false) {
		return false
	}
	if !(.HTML == "") {
		return false
	}
	if !(.Files == nil) {
		return false
	}

	return true
}

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

// FillFrom fills InputRichMessageHTML from given interface.
func ( *InputRichMessageHTML) ( interface {
	() ( bool)
	() ( bool)
	() ( string)
	() ( []InputRichFileClass,  bool)
}) {
	.Rtl = .()
	.Noautolink = .()
	.HTML = .()
	if ,  := .();  {
		.Files = 
	}

}

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

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

// TypeInfo returns info about TL type.
func ( *InputRichMessageHTML) () tdp.Type {
	 := tdp.Type{
		Name: "inputRichMessageHTML",
		ID:   InputRichMessageHTMLTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "Rtl",
			SchemaName: "rtl",
			Null:       !.Flags.Has(0),
		},
		{
			Name:       "Noautolink",
			SchemaName: "noautolink",
			Null:       !.Flags.Has(1),
		},
		{
			Name:       "HTML",
			SchemaName: "html",
		},
		{
			Name:       "Files",
			SchemaName: "files",
			Null:       !.Flags.Has(2),
		},
	}
	return 
}

// SetFlags sets flags for non-zero fields.
func ( *InputRichMessageHTML) () {
	if !(.Rtl == false) {
		.Flags.Set(0)
	}
	if !(.Noautolink == false) {
		.Flags.Set(1)
	}
	if !(.Files == nil) {
		.Flags.Set(2)
	}
}

// Encode implements bin.Encoder.
func ( *InputRichMessageHTML) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputRichMessageHTML#dacb836a as nil")
	}
	.PutID(InputRichMessageHTMLTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputRichMessageHTML) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputRichMessageHTML#dacb836a as nil")
	}
	.SetFlags()
	if  := .Flags.Encode();  != nil {
		return fmt.Errorf("unable to encode inputRichMessageHTML#dacb836a: field flags: %w", )
	}
	.PutString(.HTML)
	if .Flags.Has(2) {
		.PutVectorHeader(len(.Files))
		for ,  := range .Files {
			if  == nil {
				return fmt.Errorf("unable to encode inputRichMessageHTML#dacb836a: field files element with index %d is nil", )
			}
			if  := .Encode();  != nil {
				return fmt.Errorf("unable to encode inputRichMessageHTML#dacb836a: field files element with index %d: %w", , )
			}
		}
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputRichMessageHTML) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputRichMessageHTML#dacb836a to nil")
	}
	{
		if  := .Flags.Decode();  != nil {
			return fmt.Errorf("unable to decode inputRichMessageHTML#dacb836a: field flags: %w", )
		}
	}
	.Rtl = .Flags.Has(0)
	.Noautolink = .Flags.Has(1)
	{
		,  := .String()
		if  != nil {
			return fmt.Errorf("unable to decode inputRichMessageHTML#dacb836a: field html: %w", )
		}
		.HTML = 
	}
	if .Flags.Has(2) {
		,  := .VectorHeader()
		if  != nil {
			return fmt.Errorf("unable to decode inputRichMessageHTML#dacb836a: field files: %w", )
		}

		if  > 0 {
			.Files = make([]InputRichFileClass, 0, %bin.PreallocateLimit)
		}
		for  := 0;  < ; ++ {
			,  := DecodeInputRichFile()
			if  != nil {
				return fmt.Errorf("unable to decode inputRichMessageHTML#dacb836a: field files: %w", )
			}
			.Files = append(.Files, )
		}
	}
	return nil
}

// SetRtl sets value of Rtl conditional field.
func ( *InputRichMessageHTML) ( bool) {
	if  {
		.Flags.Set(0)
		.Rtl = true
	} else {
		.Flags.Unset(0)
		.Rtl = false
	}
}

// GetRtl returns value of Rtl conditional field.
func ( *InputRichMessageHTML) () ( bool) {
	if  == nil {
		return
	}
	return .Flags.Has(0)
}

// SetNoautolink sets value of Noautolink conditional field.
func ( *InputRichMessageHTML) ( bool) {
	if  {
		.Flags.Set(1)
		.Noautolink = true
	} else {
		.Flags.Unset(1)
		.Noautolink = false
	}
}

// GetNoautolink returns value of Noautolink conditional field.
func ( *InputRichMessageHTML) () ( bool) {
	if  == nil {
		return
	}
	return .Flags.Has(1)
}

// GetHTML returns value of HTML field.
func ( *InputRichMessageHTML) () ( string) {
	if  == nil {
		return
	}
	return .HTML
}

// SetFiles sets value of Files conditional field.
func ( *InputRichMessageHTML) ( []InputRichFileClass) {
	.Flags.Set(2)
	.Files = 
}

// GetFiles returns value of Files conditional field and
// boolean which is true if field was set.
func ( *InputRichMessageHTML) () ( []InputRichFileClass,  bool) {
	if  == nil {
		return
	}
	if !.Flags.Has(2) {
		return , false
	}
	return .Files, true
}

// MapFiles returns field Files wrapped in InputRichFileClassArray helper.
func ( *InputRichMessageHTML) () ( InputRichFileClassArray,  bool) {
	if !.Flags.Has(2) {
		return , false
	}
	return InputRichFileClassArray(.Files), true
}

// InputRichMessageMarkdown represents TL type `inputRichMessageMarkdown#4b572c`.
//
// See https://core.telegram.org/constructor/inputRichMessageMarkdown for reference.
type InputRichMessageMarkdown struct {
	// Flags field of InputRichMessageMarkdown.
	Flags bin.Fields
	// Rtl field of InputRichMessageMarkdown.
	Rtl bool
	// Noautolink field of InputRichMessageMarkdown.
	Noautolink bool
	// Markdown field of InputRichMessageMarkdown.
	Markdown string
	// Files field of InputRichMessageMarkdown.
	//
	// Use SetFiles and GetFiles helpers.
	Files []InputRichFileClass
}

// InputRichMessageMarkdownTypeID is TL type id of InputRichMessageMarkdown.
const InputRichMessageMarkdownTypeID = 0x4b572c

// construct implements constructor of InputRichMessageClass.
func ( InputRichMessageMarkdown) () InputRichMessageClass { return & }

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

	_ InputRichMessageClass = &InputRichMessageMarkdown{}
)

func ( *InputRichMessageMarkdown) () bool {
	if  == nil {
		return true
	}
	if !(.Flags.Zero()) {
		return false
	}
	if !(.Rtl == false) {
		return false
	}
	if !(.Noautolink == false) {
		return false
	}
	if !(.Markdown == "") {
		return false
	}
	if !(.Files == nil) {
		return false
	}

	return true
}

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

// FillFrom fills InputRichMessageMarkdown from given interface.
func ( *InputRichMessageMarkdown) ( interface {
	() ( bool)
	() ( bool)
	() ( string)
	() ( []InputRichFileClass,  bool)
}) {
	.Rtl = .()
	.Noautolink = .()
	.Markdown = .()
	if ,  := .();  {
		.Files = 
	}

}

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

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

// TypeInfo returns info about TL type.
func ( *InputRichMessageMarkdown) () tdp.Type {
	 := tdp.Type{
		Name: "inputRichMessageMarkdown",
		ID:   InputRichMessageMarkdownTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "Rtl",
			SchemaName: "rtl",
			Null:       !.Flags.Has(0),
		},
		{
			Name:       "Noautolink",
			SchemaName: "noautolink",
			Null:       !.Flags.Has(1),
		},
		{
			Name:       "Markdown",
			SchemaName: "markdown",
		},
		{
			Name:       "Files",
			SchemaName: "files",
			Null:       !.Flags.Has(2),
		},
	}
	return 
}

// SetFlags sets flags for non-zero fields.
func ( *InputRichMessageMarkdown) () {
	if !(.Rtl == false) {
		.Flags.Set(0)
	}
	if !(.Noautolink == false) {
		.Flags.Set(1)
	}
	if !(.Files == nil) {
		.Flags.Set(2)
	}
}

// Encode implements bin.Encoder.
func ( *InputRichMessageMarkdown) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputRichMessageMarkdown#4b572c as nil")
	}
	.PutID(InputRichMessageMarkdownTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputRichMessageMarkdown) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputRichMessageMarkdown#4b572c as nil")
	}
	.SetFlags()
	if  := .Flags.Encode();  != nil {
		return fmt.Errorf("unable to encode inputRichMessageMarkdown#4b572c: field flags: %w", )
	}
	.PutString(.Markdown)
	if .Flags.Has(2) {
		.PutVectorHeader(len(.Files))
		for ,  := range .Files {
			if  == nil {
				return fmt.Errorf("unable to encode inputRichMessageMarkdown#4b572c: field files element with index %d is nil", )
			}
			if  := .Encode();  != nil {
				return fmt.Errorf("unable to encode inputRichMessageMarkdown#4b572c: field files element with index %d: %w", , )
			}
		}
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputRichMessageMarkdown) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputRichMessageMarkdown#4b572c to nil")
	}
	{
		if  := .Flags.Decode();  != nil {
			return fmt.Errorf("unable to decode inputRichMessageMarkdown#4b572c: field flags: %w", )
		}
	}
	.Rtl = .Flags.Has(0)
	.Noautolink = .Flags.Has(1)
	{
		,  := .String()
		if  != nil {
			return fmt.Errorf("unable to decode inputRichMessageMarkdown#4b572c: field markdown: %w", )
		}
		.Markdown = 
	}
	if .Flags.Has(2) {
		,  := .VectorHeader()
		if  != nil {
			return fmt.Errorf("unable to decode inputRichMessageMarkdown#4b572c: field files: %w", )
		}

		if  > 0 {
			.Files = make([]InputRichFileClass, 0, %bin.PreallocateLimit)
		}
		for  := 0;  < ; ++ {
			,  := DecodeInputRichFile()
			if  != nil {
				return fmt.Errorf("unable to decode inputRichMessageMarkdown#4b572c: field files: %w", )
			}
			.Files = append(.Files, )
		}
	}
	return nil
}

// SetRtl sets value of Rtl conditional field.
func ( *InputRichMessageMarkdown) ( bool) {
	if  {
		.Flags.Set(0)
		.Rtl = true
	} else {
		.Flags.Unset(0)
		.Rtl = false
	}
}

// GetRtl returns value of Rtl conditional field.
func ( *InputRichMessageMarkdown) () ( bool) {
	if  == nil {
		return
	}
	return .Flags.Has(0)
}

// SetNoautolink sets value of Noautolink conditional field.
func ( *InputRichMessageMarkdown) ( bool) {
	if  {
		.Flags.Set(1)
		.Noautolink = true
	} else {
		.Flags.Unset(1)
		.Noautolink = false
	}
}

// GetNoautolink returns value of Noautolink conditional field.
func ( *InputRichMessageMarkdown) () ( bool) {
	if  == nil {
		return
	}
	return .Flags.Has(1)
}

// GetMarkdown returns value of Markdown field.
func ( *InputRichMessageMarkdown) () ( string) {
	if  == nil {
		return
	}
	return .Markdown
}

// SetFiles sets value of Files conditional field.
func ( *InputRichMessageMarkdown) ( []InputRichFileClass) {
	.Flags.Set(2)
	.Files = 
}

// GetFiles returns value of Files conditional field and
// boolean which is true if field was set.
func ( *InputRichMessageMarkdown) () ( []InputRichFileClass,  bool) {
	if  == nil {
		return
	}
	if !.Flags.Has(2) {
		return , false
	}
	return .Files, true
}

// MapFiles returns field Files wrapped in InputRichFileClassArray helper.
func ( *InputRichMessageMarkdown) () ( InputRichFileClassArray,  bool) {
	if !.Flags.Has(2) {
		return , false
	}
	return InputRichFileClassArray(.Files), true
}

// InputRichMessageClassName is schema name of InputRichMessageClass.
const InputRichMessageClassName = "InputRichMessage"

// InputRichMessageClass represents InputRichMessage generic type.
//
// See https://core.telegram.org/type/InputRichMessage for reference.
//
// Constructors:
//   - [InputRichMessage]
//   - [InputRichMessageHTML]
//   - [InputRichMessageMarkdown]
//
// Example:
//
//	g, err := tg.DecodeInputRichMessage(buf)
//	if err != nil {
//	    panic(err)
//	}
//	switch v := g.(type) {
//	case *tg.InputRichMessage: // inputRichMessage#e4c449fc
//	case *tg.InputRichMessageHTML: // inputRichMessageHTML#dacb836a
//	case *tg.InputRichMessageMarkdown: // inputRichMessageMarkdown#4b572c
//	default: panic(v)
//	}
type InputRichMessageClass interface {
	bin.Encoder
	bin.Decoder
	bin.BareEncoder
	bin.BareDecoder
	construct() InputRichMessageClass

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

	// Rtl field of InputRichMessage.
	GetRtl() (value bool)

	// Noautolink field of InputRichMessage.
	GetNoautolink() (value bool)
}

// DecodeInputRichMessage implements binary de-serialization for InputRichMessageClass.
func ( *bin.Buffer) (InputRichMessageClass, error) {
	,  := .PeekID()
	if  != nil {
		return nil, 
	}
	switch  {
	case InputRichMessageTypeID:
		// Decoding inputRichMessage#e4c449fc.
		 := InputRichMessage{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode InputRichMessageClass: %w", )
		}
		return &, nil
	case InputRichMessageHTMLTypeID:
		// Decoding inputRichMessageHTML#dacb836a.
		 := InputRichMessageHTML{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode InputRichMessageClass: %w", )
		}
		return &, nil
	case InputRichMessageMarkdownTypeID:
		// Decoding inputRichMessageMarkdown#4b572c.
		 := InputRichMessageMarkdown{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode InputRichMessageClass: %w", )
		}
		return &, nil
	default:
		return nil, fmt.Errorf("unable to decode InputRichMessageClass: %w", bin.NewUnexpectedID())
	}
}

// InputRichMessage boxes the InputRichMessageClass providing a helper.
type InputRichMessageBox struct {
	InputRichMessage InputRichMessageClass
}

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

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