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

// InputMessagesFilterEmpty represents TL type `inputMessagesFilterEmpty#57e2f66c`.
// Filter is absent.
//
// See https://core.telegram.org/constructor/inputMessagesFilterEmpty for reference.
type InputMessagesFilterEmpty struct {
}

// InputMessagesFilterEmptyTypeID is TL type id of InputMessagesFilterEmpty.
const InputMessagesFilterEmptyTypeID = 0x57e2f66c

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterEmpty) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterEmpty{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterEmpty) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterEmpty#57e2f66c as nil")
	}
	.PutID(InputMessagesFilterEmptyTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputMessagesFilterEmpty) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterEmpty#57e2f66c as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputMessagesFilterEmpty) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputMessagesFilterEmpty#57e2f66c to nil")
	}
	return nil
}

// InputMessagesFilterPhotos represents TL type `inputMessagesFilterPhotos#9609a51c`.
// Filter for messages containing photos.
//
// See https://core.telegram.org/constructor/inputMessagesFilterPhotos for reference.
type InputMessagesFilterPhotos struct {
}

// InputMessagesFilterPhotosTypeID is TL type id of InputMessagesFilterPhotos.
const InputMessagesFilterPhotosTypeID = 0x9609a51c

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterPhotos) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterPhotos{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterPhotos) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterPhotos#9609a51c as nil")
	}
	.PutID(InputMessagesFilterPhotosTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputMessagesFilterPhotos) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterPhotos#9609a51c as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputMessagesFilterPhotos) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputMessagesFilterPhotos#9609a51c to nil")
	}
	return nil
}

// InputMessagesFilterVideo represents TL type `inputMessagesFilterVideo#9fc00e65`.
// Filter for messages containing videos.
//
// See https://core.telegram.org/constructor/inputMessagesFilterVideo for reference.
type InputMessagesFilterVideo struct {
}

// InputMessagesFilterVideoTypeID is TL type id of InputMessagesFilterVideo.
const InputMessagesFilterVideoTypeID = 0x9fc00e65

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterVideo) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterVideo{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterVideo) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterVideo#9fc00e65 as nil")
	}
	.PutID(InputMessagesFilterVideoTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputMessagesFilterVideo) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterVideo#9fc00e65 as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputMessagesFilterVideo) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputMessagesFilterVideo#9fc00e65 to nil")
	}
	return nil
}

// InputMessagesFilterPhotoVideo represents TL type `inputMessagesFilterPhotoVideo#56e9f0e4`.
// Filter for messages containing photos or videos.
//
// See https://core.telegram.org/constructor/inputMessagesFilterPhotoVideo for reference.
type InputMessagesFilterPhotoVideo struct {
}

// InputMessagesFilterPhotoVideoTypeID is TL type id of InputMessagesFilterPhotoVideo.
const InputMessagesFilterPhotoVideoTypeID = 0x56e9f0e4

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterPhotoVideo) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterPhotoVideo{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterPhotoVideo) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterPhotoVideo#56e9f0e4 as nil")
	}
	.PutID(InputMessagesFilterPhotoVideoTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputMessagesFilterPhotoVideo) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterPhotoVideo#56e9f0e4 as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputMessagesFilterPhotoVideo) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputMessagesFilterPhotoVideo#56e9f0e4 to nil")
	}
	return nil
}

// InputMessagesFilterDocument represents TL type `inputMessagesFilterDocument#9eddf188`.
// Filter for messages containing documents.
//
// See https://core.telegram.org/constructor/inputMessagesFilterDocument for reference.
type InputMessagesFilterDocument struct {
}

// InputMessagesFilterDocumentTypeID is TL type id of InputMessagesFilterDocument.
const InputMessagesFilterDocumentTypeID = 0x9eddf188

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterDocument) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterDocument{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterDocument) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterDocument#9eddf188 as nil")
	}
	.PutID(InputMessagesFilterDocumentTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputMessagesFilterDocument) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterDocument#9eddf188 as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputMessagesFilterDocument) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputMessagesFilterDocument#9eddf188 to nil")
	}
	return nil
}

// InputMessagesFilterURL represents TL type `inputMessagesFilterUrl#7ef0dd87`.
// Return only messages containing URLs
//
// See https://core.telegram.org/constructor/inputMessagesFilterUrl for reference.
type InputMessagesFilterURL struct {
}

// InputMessagesFilterURLTypeID is TL type id of InputMessagesFilterURL.
const InputMessagesFilterURLTypeID = 0x7ef0dd87

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterURL) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterURL{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterURL) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterUrl#7ef0dd87 as nil")
	}
	.PutID(InputMessagesFilterURLTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputMessagesFilterURL) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterUrl#7ef0dd87 as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputMessagesFilterURL) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputMessagesFilterUrl#7ef0dd87 to nil")
	}
	return nil
}

// InputMessagesFilterGif represents TL type `inputMessagesFilterGif#ffc86587`.
// Return only messages containing gifs
//
// See https://core.telegram.org/constructor/inputMessagesFilterGif for reference.
type InputMessagesFilterGif struct {
}

// InputMessagesFilterGifTypeID is TL type id of InputMessagesFilterGif.
const InputMessagesFilterGifTypeID = 0xffc86587

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterGif) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterGif{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterGif) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterGif#ffc86587 as nil")
	}
	.PutID(InputMessagesFilterGifTypeID)
	return .EncodeBare()
}

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

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

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

// InputMessagesFilterVoice represents TL type `inputMessagesFilterVoice#50f5c392`.
// Return only messages containing voice notes
//
// See https://core.telegram.org/constructor/inputMessagesFilterVoice for reference.
type InputMessagesFilterVoice struct {
}

// InputMessagesFilterVoiceTypeID is TL type id of InputMessagesFilterVoice.
const InputMessagesFilterVoiceTypeID = 0x50f5c392

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterVoice) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterVoice{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterVoice) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterVoice#50f5c392 as nil")
	}
	.PutID(InputMessagesFilterVoiceTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputMessagesFilterVoice) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterVoice#50f5c392 as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputMessagesFilterVoice) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputMessagesFilterVoice#50f5c392 to nil")
	}
	return nil
}

// InputMessagesFilterMusic represents TL type `inputMessagesFilterMusic#3751b49e`.
// Return only messages containing audio files
//
// See https://core.telegram.org/constructor/inputMessagesFilterMusic for reference.
type InputMessagesFilterMusic struct {
}

// InputMessagesFilterMusicTypeID is TL type id of InputMessagesFilterMusic.
const InputMessagesFilterMusicTypeID = 0x3751b49e

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterMusic) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterMusic{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterMusic) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterMusic#3751b49e as nil")
	}
	.PutID(InputMessagesFilterMusicTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputMessagesFilterMusic) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterMusic#3751b49e as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputMessagesFilterMusic) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputMessagesFilterMusic#3751b49e to nil")
	}
	return nil
}

// InputMessagesFilterChatPhotos represents TL type `inputMessagesFilterChatPhotos#3a20ecb8`.
// Return only chat photo changes
//
// See https://core.telegram.org/constructor/inputMessagesFilterChatPhotos for reference.
type InputMessagesFilterChatPhotos struct {
}

// InputMessagesFilterChatPhotosTypeID is TL type id of InputMessagesFilterChatPhotos.
const InputMessagesFilterChatPhotosTypeID = 0x3a20ecb8

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterChatPhotos) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterChatPhotos{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterChatPhotos) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterChatPhotos#3a20ecb8 as nil")
	}
	.PutID(InputMessagesFilterChatPhotosTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputMessagesFilterChatPhotos) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterChatPhotos#3a20ecb8 as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputMessagesFilterChatPhotos) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputMessagesFilterChatPhotos#3a20ecb8 to nil")
	}
	return nil
}

// InputMessagesFilterPhoneCalls represents TL type `inputMessagesFilterPhoneCalls#80c99768`.
// Return only phone calls
//
// See https://core.telegram.org/constructor/inputMessagesFilterPhoneCalls for reference.
type InputMessagesFilterPhoneCalls struct {
	// Flags, see TL conditional fields¹
	//
	// Links:
	//  1) https://core.telegram.org/mtproto/TL-combinators#conditional-fields
	Flags bin.Fields
	// Return only missed phone calls
	Missed bool
}

// InputMessagesFilterPhoneCallsTypeID is TL type id of InputMessagesFilterPhoneCalls.
const InputMessagesFilterPhoneCallsTypeID = 0x80c99768

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterPhoneCalls) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterPhoneCalls{}
)

func ( *InputMessagesFilterPhoneCalls) () bool {
	if  == nil {
		return true
	}
	if !(.Flags.Zero()) {
		return false
	}
	if !(.Missed == false) {
		return false
	}

	return true
}

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

// FillFrom fills InputMessagesFilterPhoneCalls from given interface.
func ( *InputMessagesFilterPhoneCalls) ( interface {
	() ( bool)
}) {
	.Missed = .()
}

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

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

// TypeInfo returns info about TL type.
func ( *InputMessagesFilterPhoneCalls) () tdp.Type {
	 := tdp.Type{
		Name: "inputMessagesFilterPhoneCalls",
		ID:   InputMessagesFilterPhoneCallsTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "Missed",
			SchemaName: "missed",
			Null:       !.Flags.Has(0),
		},
	}
	return 
}

// SetFlags sets flags for non-zero fields.
func ( *InputMessagesFilterPhoneCalls) () {
	if !(.Missed == false) {
		.Flags.Set(0)
	}
}

// Encode implements bin.Encoder.
func ( *InputMessagesFilterPhoneCalls) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterPhoneCalls#80c99768 as nil")
	}
	.PutID(InputMessagesFilterPhoneCallsTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputMessagesFilterPhoneCalls) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterPhoneCalls#80c99768 as nil")
	}
	.SetFlags()
	if  := .Flags.Encode();  != nil {
		return fmt.Errorf("unable to encode inputMessagesFilterPhoneCalls#80c99768: field flags: %w", )
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputMessagesFilterPhoneCalls) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputMessagesFilterPhoneCalls#80c99768 to nil")
	}
	{
		if  := .Flags.Decode();  != nil {
			return fmt.Errorf("unable to decode inputMessagesFilterPhoneCalls#80c99768: field flags: %w", )
		}
	}
	.Missed = .Flags.Has(0)
	return nil
}

// SetMissed sets value of Missed conditional field.
func ( *InputMessagesFilterPhoneCalls) ( bool) {
	if  {
		.Flags.Set(0)
		.Missed = true
	} else {
		.Flags.Unset(0)
		.Missed = false
	}
}

// GetMissed returns value of Missed conditional field.
func ( *InputMessagesFilterPhoneCalls) () ( bool) {
	if  == nil {
		return
	}
	return .Flags.Has(0)
}

// InputMessagesFilterRoundVoice represents TL type `inputMessagesFilterRoundVoice#7a7c17a4`.
// Return only round videos and voice notes
//
// See https://core.telegram.org/constructor/inputMessagesFilterRoundVoice for reference.
type InputMessagesFilterRoundVoice struct {
}

// InputMessagesFilterRoundVoiceTypeID is TL type id of InputMessagesFilterRoundVoice.
const InputMessagesFilterRoundVoiceTypeID = 0x7a7c17a4

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterRoundVoice) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterRoundVoice{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterRoundVoice) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterRoundVoice#7a7c17a4 as nil")
	}
	.PutID(InputMessagesFilterRoundVoiceTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputMessagesFilterRoundVoice) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterRoundVoice#7a7c17a4 as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputMessagesFilterRoundVoice) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputMessagesFilterRoundVoice#7a7c17a4 to nil")
	}
	return nil
}

// InputMessagesFilterRoundVideo represents TL type `inputMessagesFilterRoundVideo#b549da53`.
// Return only round videos
//
// See https://core.telegram.org/constructor/inputMessagesFilterRoundVideo for reference.
type InputMessagesFilterRoundVideo struct {
}

// InputMessagesFilterRoundVideoTypeID is TL type id of InputMessagesFilterRoundVideo.
const InputMessagesFilterRoundVideoTypeID = 0xb549da53

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterRoundVideo) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterRoundVideo{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterRoundVideo) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterRoundVideo#b549da53 as nil")
	}
	.PutID(InputMessagesFilterRoundVideoTypeID)
	return .EncodeBare()
}

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

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

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

// InputMessagesFilterMyMentions represents TL type `inputMessagesFilterMyMentions#c1f8e69a`.
// Return only messages where the current user was mentioned¹.
//
// Links:
//  1. https://core.telegram.org/api/mentions
//
// See https://core.telegram.org/constructor/inputMessagesFilterMyMentions for reference.
type InputMessagesFilterMyMentions struct {
}

// InputMessagesFilterMyMentionsTypeID is TL type id of InputMessagesFilterMyMentions.
const InputMessagesFilterMyMentionsTypeID = 0xc1f8e69a

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterMyMentions) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterMyMentions{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterMyMentions) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterMyMentions#c1f8e69a as nil")
	}
	.PutID(InputMessagesFilterMyMentionsTypeID)
	return .EncodeBare()
}

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

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

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

// InputMessagesFilterGeo represents TL type `inputMessagesFilterGeo#e7026d0d`.
// Return only messages containing geolocations
//
// See https://core.telegram.org/constructor/inputMessagesFilterGeo for reference.
type InputMessagesFilterGeo struct {
}

// InputMessagesFilterGeoTypeID is TL type id of InputMessagesFilterGeo.
const InputMessagesFilterGeoTypeID = 0xe7026d0d

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterGeo) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterGeo{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterGeo) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterGeo#e7026d0d as nil")
	}
	.PutID(InputMessagesFilterGeoTypeID)
	return .EncodeBare()
}

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

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

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

// InputMessagesFilterContacts represents TL type `inputMessagesFilterContacts#e062db83`.
// Return only messages containing contacts
//
// See https://core.telegram.org/constructor/inputMessagesFilterContacts for reference.
type InputMessagesFilterContacts struct {
}

// InputMessagesFilterContactsTypeID is TL type id of InputMessagesFilterContacts.
const InputMessagesFilterContactsTypeID = 0xe062db83

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterContacts) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterContacts{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterContacts) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterContacts#e062db83 as nil")
	}
	.PutID(InputMessagesFilterContactsTypeID)
	return .EncodeBare()
}

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

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

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

// InputMessagesFilterPinned represents TL type `inputMessagesFilterPinned#1bb00451`.
// Fetch only pinned messages
//
// See https://core.telegram.org/constructor/inputMessagesFilterPinned for reference.
type InputMessagesFilterPinned struct {
}

// InputMessagesFilterPinnedTypeID is TL type id of InputMessagesFilterPinned.
const InputMessagesFilterPinnedTypeID = 0x1bb00451

// construct implements constructor of MessagesFilterClass.
func ( InputMessagesFilterPinned) () MessagesFilterClass { return & }

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

	_ MessagesFilterClass = &InputMessagesFilterPinned{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *InputMessagesFilterPinned) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterPinned#1bb00451 as nil")
	}
	.PutID(InputMessagesFilterPinnedTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputMessagesFilterPinned) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputMessagesFilterPinned#1bb00451 as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputMessagesFilterPinned) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputMessagesFilterPinned#1bb00451 to nil")
	}
	return nil
}

// MessagesFilterClassName is schema name of MessagesFilterClass.
const MessagesFilterClassName = "MessagesFilter"

// MessagesFilterClass represents MessagesFilter generic type.
//
// See https://core.telegram.org/type/MessagesFilter for reference.
//
// Example:
//
//	g, err := tg.DecodeMessagesFilter(buf)
//	if err != nil {
//	    panic(err)
//	}
//	switch v := g.(type) {
//	case *tg.InputMessagesFilterEmpty: // inputMessagesFilterEmpty#57e2f66c
//	case *tg.InputMessagesFilterPhotos: // inputMessagesFilterPhotos#9609a51c
//	case *tg.InputMessagesFilterVideo: // inputMessagesFilterVideo#9fc00e65
//	case *tg.InputMessagesFilterPhotoVideo: // inputMessagesFilterPhotoVideo#56e9f0e4
//	case *tg.InputMessagesFilterDocument: // inputMessagesFilterDocument#9eddf188
//	case *tg.InputMessagesFilterURL: // inputMessagesFilterUrl#7ef0dd87
//	case *tg.InputMessagesFilterGif: // inputMessagesFilterGif#ffc86587
//	case *tg.InputMessagesFilterVoice: // inputMessagesFilterVoice#50f5c392
//	case *tg.InputMessagesFilterMusic: // inputMessagesFilterMusic#3751b49e
//	case *tg.InputMessagesFilterChatPhotos: // inputMessagesFilterChatPhotos#3a20ecb8
//	case *tg.InputMessagesFilterPhoneCalls: // inputMessagesFilterPhoneCalls#80c99768
//	case *tg.InputMessagesFilterRoundVoice: // inputMessagesFilterRoundVoice#7a7c17a4
//	case *tg.InputMessagesFilterRoundVideo: // inputMessagesFilterRoundVideo#b549da53
//	case *tg.InputMessagesFilterMyMentions: // inputMessagesFilterMyMentions#c1f8e69a
//	case *tg.InputMessagesFilterGeo: // inputMessagesFilterGeo#e7026d0d
//	case *tg.InputMessagesFilterContacts: // inputMessagesFilterContacts#e062db83
//	case *tg.InputMessagesFilterPinned: // inputMessagesFilterPinned#1bb00451
//	default: panic(v)
//	}
type MessagesFilterClass interface {
	bin.Encoder
	bin.Decoder
	bin.BareEncoder
	bin.BareDecoder
	construct() MessagesFilterClass

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

// DecodeMessagesFilter implements binary de-serialization for MessagesFilterClass.
func ( *bin.Buffer) (MessagesFilterClass, error) {
	,  := .PeekID()
	if  != nil {
		return nil, 
	}
	switch  {
	case InputMessagesFilterEmptyTypeID:
		// Decoding inputMessagesFilterEmpty#57e2f66c.
		 := InputMessagesFilterEmpty{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterPhotosTypeID:
		// Decoding inputMessagesFilterPhotos#9609a51c.
		 := InputMessagesFilterPhotos{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterVideoTypeID:
		// Decoding inputMessagesFilterVideo#9fc00e65.
		 := InputMessagesFilterVideo{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterPhotoVideoTypeID:
		// Decoding inputMessagesFilterPhotoVideo#56e9f0e4.
		 := InputMessagesFilterPhotoVideo{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterDocumentTypeID:
		// Decoding inputMessagesFilterDocument#9eddf188.
		 := InputMessagesFilterDocument{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterURLTypeID:
		// Decoding inputMessagesFilterUrl#7ef0dd87.
		 := InputMessagesFilterURL{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterGifTypeID:
		// Decoding inputMessagesFilterGif#ffc86587.
		 := InputMessagesFilterGif{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterVoiceTypeID:
		// Decoding inputMessagesFilterVoice#50f5c392.
		 := InputMessagesFilterVoice{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterMusicTypeID:
		// Decoding inputMessagesFilterMusic#3751b49e.
		 := InputMessagesFilterMusic{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterChatPhotosTypeID:
		// Decoding inputMessagesFilterChatPhotos#3a20ecb8.
		 := InputMessagesFilterChatPhotos{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterPhoneCallsTypeID:
		// Decoding inputMessagesFilterPhoneCalls#80c99768.
		 := InputMessagesFilterPhoneCalls{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterRoundVoiceTypeID:
		// Decoding inputMessagesFilterRoundVoice#7a7c17a4.
		 := InputMessagesFilterRoundVoice{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterRoundVideoTypeID:
		// Decoding inputMessagesFilterRoundVideo#b549da53.
		 := InputMessagesFilterRoundVideo{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterMyMentionsTypeID:
		// Decoding inputMessagesFilterMyMentions#c1f8e69a.
		 := InputMessagesFilterMyMentions{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterGeoTypeID:
		// Decoding inputMessagesFilterGeo#e7026d0d.
		 := InputMessagesFilterGeo{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterContactsTypeID:
		// Decoding inputMessagesFilterContacts#e062db83.
		 := InputMessagesFilterContacts{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	case InputMessagesFilterPinnedTypeID:
		// Decoding inputMessagesFilterPinned#1bb00451.
		 := InputMessagesFilterPinned{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", )
		}
		return &, nil
	default:
		return nil, fmt.Errorf("unable to decode MessagesFilterClass: %w", bin.NewUnexpectedID())
	}
}

// MessagesFilter boxes the MessagesFilterClass providing a helper.
type MessagesFilterBox struct {
	MessagesFilter MessagesFilterClass
}

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

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