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

// StarsTransactionPeerUnsupported represents TL type `starsTransactionPeerUnsupported#95f2bfe4`.
// Describes a Telegram Star¹ transaction that cannot be described using the current
// layer.
//
// Links:
//  1. https://core.telegram.org/api/stars
//
// See https://core.telegram.org/constructor/starsTransactionPeerUnsupported for reference.
type StarsTransactionPeerUnsupported struct {
}

// StarsTransactionPeerUnsupportedTypeID is TL type id of StarsTransactionPeerUnsupported.
const StarsTransactionPeerUnsupportedTypeID = 0x95f2bfe4

// construct implements constructor of StarsTransactionPeerClass.
func ( StarsTransactionPeerUnsupported) () StarsTransactionPeerClass { return & }

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

	_ StarsTransactionPeerClass = &StarsTransactionPeerUnsupported{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *StarsTransactionPeerUnsupported) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode starsTransactionPeerUnsupported#95f2bfe4 as nil")
	}
	.PutID(StarsTransactionPeerUnsupportedTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *StarsTransactionPeerUnsupported) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode starsTransactionPeerUnsupported#95f2bfe4 as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *StarsTransactionPeerUnsupported) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode starsTransactionPeerUnsupported#95f2bfe4 to nil")
	}
	return nil
}

// StarsTransactionPeerAppStore represents TL type `starsTransactionPeerAppStore#b457b375`.
// Describes a Telegram Star¹ transaction with the App Store, used when purchasing
// Telegram Stars through the App Store.
//
// Links:
//  1. https://core.telegram.org/api/stars
//
// See https://core.telegram.org/constructor/starsTransactionPeerAppStore for reference.
type StarsTransactionPeerAppStore struct {
}

// StarsTransactionPeerAppStoreTypeID is TL type id of StarsTransactionPeerAppStore.
const StarsTransactionPeerAppStoreTypeID = 0xb457b375

// construct implements constructor of StarsTransactionPeerClass.
func ( StarsTransactionPeerAppStore) () StarsTransactionPeerClass { return & }

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

	_ StarsTransactionPeerClass = &StarsTransactionPeerAppStore{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *StarsTransactionPeerAppStore) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode starsTransactionPeerAppStore#b457b375 as nil")
	}
	.PutID(StarsTransactionPeerAppStoreTypeID)
	return .EncodeBare()
}

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

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

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

// StarsTransactionPeerPlayMarket represents TL type `starsTransactionPeerPlayMarket#7b560a0b`.
// Describes a Telegram Star¹ transaction with the Play Store, used when purchasing
// Telegram Stars through the Play Store.
//
// Links:
//  1. https://core.telegram.org/api/stars
//
// See https://core.telegram.org/constructor/starsTransactionPeerPlayMarket for reference.
type StarsTransactionPeerPlayMarket struct {
}

// StarsTransactionPeerPlayMarketTypeID is TL type id of StarsTransactionPeerPlayMarket.
const StarsTransactionPeerPlayMarketTypeID = 0x7b560a0b

// construct implements constructor of StarsTransactionPeerClass.
func ( StarsTransactionPeerPlayMarket) () StarsTransactionPeerClass { return & }

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

	_ StarsTransactionPeerClass = &StarsTransactionPeerPlayMarket{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *StarsTransactionPeerPlayMarket) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode starsTransactionPeerPlayMarket#7b560a0b as nil")
	}
	.PutID(StarsTransactionPeerPlayMarketTypeID)
	return .EncodeBare()
}

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

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

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

// StarsTransactionPeerPremiumBot represents TL type `starsTransactionPeerPremiumBot#250dbaf8`.
// Describes a Telegram Star¹ transaction made using @PremiumBot² (i.e. using the
// inputInvoiceStars³ flow described here »⁴).
//
// Links:
//  1. https://core.telegram.org/api/stars
//  2. https://t.me/premiumbot
//  3. https://core.telegram.org/constructor/inputInvoiceStars
//  4. https://core.telegram.org/api/stars#buying-or-gifting-stars
//
// See https://core.telegram.org/constructor/starsTransactionPeerPremiumBot for reference.
type StarsTransactionPeerPremiumBot struct {
}

// StarsTransactionPeerPremiumBotTypeID is TL type id of StarsTransactionPeerPremiumBot.
const StarsTransactionPeerPremiumBotTypeID = 0x250dbaf8

// construct implements constructor of StarsTransactionPeerClass.
func ( StarsTransactionPeerPremiumBot) () StarsTransactionPeerClass { return & }

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

	_ StarsTransactionPeerClass = &StarsTransactionPeerPremiumBot{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *StarsTransactionPeerPremiumBot) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode starsTransactionPeerPremiumBot#250dbaf8 as nil")
	}
	.PutID(StarsTransactionPeerPremiumBotTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *StarsTransactionPeerPremiumBot) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode starsTransactionPeerPremiumBot#250dbaf8 as nil")
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *StarsTransactionPeerPremiumBot) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode starsTransactionPeerPremiumBot#250dbaf8 to nil")
	}
	return nil
}

// StarsTransactionPeerFragment represents TL type `starsTransactionPeerFragment#e92fd902`.
// Describes a Telegram Star¹ transaction with Fragment², used when purchasing Telegram
// Stars through Fragment³.
//
// Links:
//  1. https://core.telegram.org/api/stars
//  2. https://fragment.com
//  3. https://fragment.com
//
// See https://core.telegram.org/constructor/starsTransactionPeerFragment for reference.
type StarsTransactionPeerFragment struct {
}

// StarsTransactionPeerFragmentTypeID is TL type id of StarsTransactionPeerFragment.
const StarsTransactionPeerFragmentTypeID = 0xe92fd902

// construct implements constructor of StarsTransactionPeerClass.
func ( StarsTransactionPeerFragment) () StarsTransactionPeerClass { return & }

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

	_ StarsTransactionPeerClass = &StarsTransactionPeerFragment{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *StarsTransactionPeerFragment) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode starsTransactionPeerFragment#e92fd902 as nil")
	}
	.PutID(StarsTransactionPeerFragmentTypeID)
	return .EncodeBare()
}

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

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

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

// StarsTransactionPeer represents TL type `starsTransactionPeer#d80da15d`.
// Describes a Telegram Star¹ transaction with another peer.
//
// Links:
//  1. https://core.telegram.org/api/stars
//
// See https://core.telegram.org/constructor/starsTransactionPeer for reference.
type StarsTransactionPeer struct {
	// The peer.
	Peer PeerClass
}

// StarsTransactionPeerTypeID is TL type id of StarsTransactionPeer.
const StarsTransactionPeerTypeID = 0xd80da15d

// construct implements constructor of StarsTransactionPeerClass.
func ( StarsTransactionPeer) () StarsTransactionPeerClass { return & }

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

	_ StarsTransactionPeerClass = &StarsTransactionPeer{}
)

func ( *StarsTransactionPeer) () bool {
	if  == nil {
		return true
	}
	if !(.Peer == nil) {
		return false
	}

	return true
}

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

// FillFrom fills StarsTransactionPeer from given interface.
func ( *StarsTransactionPeer) ( interface {
	() ( PeerClass)
}) {
	.Peer = .()
}

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

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

// TypeInfo returns info about TL type.
func ( *StarsTransactionPeer) () tdp.Type {
	 := tdp.Type{
		Name: "starsTransactionPeer",
		ID:   StarsTransactionPeerTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "Peer",
			SchemaName: "peer",
		},
	}
	return 
}

// Encode implements bin.Encoder.
func ( *StarsTransactionPeer) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode starsTransactionPeer#d80da15d as nil")
	}
	.PutID(StarsTransactionPeerTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *StarsTransactionPeer) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode starsTransactionPeer#d80da15d as nil")
	}
	if .Peer == nil {
		return fmt.Errorf("unable to encode starsTransactionPeer#d80da15d: field peer is nil")
	}
	if  := .Peer.Encode();  != nil {
		return fmt.Errorf("unable to encode starsTransactionPeer#d80da15d: field peer: %w", )
	}
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *StarsTransactionPeer) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode starsTransactionPeer#d80da15d to nil")
	}
	{
		,  := DecodePeer()
		if  != nil {
			return fmt.Errorf("unable to decode starsTransactionPeer#d80da15d: field peer: %w", )
		}
		.Peer = 
	}
	return nil
}

// GetPeer returns value of Peer field.
func ( *StarsTransactionPeer) () ( PeerClass) {
	if  == nil {
		return
	}
	return .Peer
}

// StarsTransactionPeerAds represents TL type `starsTransactionPeerAds#60682812`.
// Describes a Telegram Star¹ transaction used to pay for Telegram ads as specified here
// »².
//
// Links:
//  1. https://core.telegram.org/api/stars
//  2. https://core.telegram.org/api/stars#paying-for-ads
//
// See https://core.telegram.org/constructor/starsTransactionPeerAds for reference.
type StarsTransactionPeerAds struct {
}

// StarsTransactionPeerAdsTypeID is TL type id of StarsTransactionPeerAds.
const StarsTransactionPeerAdsTypeID = 0x60682812

// construct implements constructor of StarsTransactionPeerClass.
func ( StarsTransactionPeerAds) () StarsTransactionPeerClass { return & }

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

	_ StarsTransactionPeerClass = &StarsTransactionPeerAds{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *StarsTransactionPeerAds) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode starsTransactionPeerAds#60682812 as nil")
	}
	.PutID(StarsTransactionPeerAdsTypeID)
	return .EncodeBare()
}

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

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

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

// StarsTransactionPeerAPI represents TL type `starsTransactionPeerAPI#f9677aad`.
// Describes a Telegram Star¹ transaction used to pay for paid API usage, such as paid
// bot broadcasts².
//
// Links:
//  1. https://core.telegram.org/api/stars
//  2. https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once
//
// See https://core.telegram.org/constructor/starsTransactionPeerAPI for reference.
type StarsTransactionPeerAPI struct {
}

// StarsTransactionPeerAPITypeID is TL type id of StarsTransactionPeerAPI.
const StarsTransactionPeerAPITypeID = 0xf9677aad

// construct implements constructor of StarsTransactionPeerClass.
func ( StarsTransactionPeerAPI) () StarsTransactionPeerClass { return & }

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

	_ StarsTransactionPeerClass = &StarsTransactionPeerAPI{}
)

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

	return true
}

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

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

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

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

// Encode implements bin.Encoder.
func ( *StarsTransactionPeerAPI) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode starsTransactionPeerAPI#f9677aad as nil")
	}
	.PutID(StarsTransactionPeerAPITypeID)
	return .EncodeBare()
}

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

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

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

// StarsTransactionPeerClassName is schema name of StarsTransactionPeerClass.
const StarsTransactionPeerClassName = "StarsTransactionPeer"

// StarsTransactionPeerClass represents StarsTransactionPeer generic type.
//
// See https://core.telegram.org/type/StarsTransactionPeer for reference.
//
// Constructors:
//   - [StarsTransactionPeerUnsupported]
//   - [StarsTransactionPeerAppStore]
//   - [StarsTransactionPeerPlayMarket]
//   - [StarsTransactionPeerPremiumBot]
//   - [StarsTransactionPeerFragment]
//   - [StarsTransactionPeer]
//   - [StarsTransactionPeerAds]
//   - [StarsTransactionPeerAPI]
//
// Example:
//
//	g, err := tg.DecodeStarsTransactionPeer(buf)
//	if err != nil {
//	    panic(err)
//	}
//	switch v := g.(type) {
//	case *tg.StarsTransactionPeerUnsupported: // starsTransactionPeerUnsupported#95f2bfe4
//	case *tg.StarsTransactionPeerAppStore: // starsTransactionPeerAppStore#b457b375
//	case *tg.StarsTransactionPeerPlayMarket: // starsTransactionPeerPlayMarket#7b560a0b
//	case *tg.StarsTransactionPeerPremiumBot: // starsTransactionPeerPremiumBot#250dbaf8
//	case *tg.StarsTransactionPeerFragment: // starsTransactionPeerFragment#e92fd902
//	case *tg.StarsTransactionPeer: // starsTransactionPeer#d80da15d
//	case *tg.StarsTransactionPeerAds: // starsTransactionPeerAds#60682812
//	case *tg.StarsTransactionPeerAPI: // starsTransactionPeerAPI#f9677aad
//	default: panic(v)
//	}
type StarsTransactionPeerClass interface {
	bin.Encoder
	bin.Decoder
	bin.BareEncoder
	bin.BareDecoder
	construct() StarsTransactionPeerClass

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

// DecodeStarsTransactionPeer implements binary de-serialization for StarsTransactionPeerClass.
func ( *bin.Buffer) (StarsTransactionPeerClass, error) {
	,  := .PeekID()
	if  != nil {
		return nil, 
	}
	switch  {
	case StarsTransactionPeerUnsupportedTypeID:
		// Decoding starsTransactionPeerUnsupported#95f2bfe4.
		 := StarsTransactionPeerUnsupported{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode StarsTransactionPeerClass: %w", )
		}
		return &, nil
	case StarsTransactionPeerAppStoreTypeID:
		// Decoding starsTransactionPeerAppStore#b457b375.
		 := StarsTransactionPeerAppStore{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode StarsTransactionPeerClass: %w", )
		}
		return &, nil
	case StarsTransactionPeerPlayMarketTypeID:
		// Decoding starsTransactionPeerPlayMarket#7b560a0b.
		 := StarsTransactionPeerPlayMarket{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode StarsTransactionPeerClass: %w", )
		}
		return &, nil
	case StarsTransactionPeerPremiumBotTypeID:
		// Decoding starsTransactionPeerPremiumBot#250dbaf8.
		 := StarsTransactionPeerPremiumBot{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode StarsTransactionPeerClass: %w", )
		}
		return &, nil
	case StarsTransactionPeerFragmentTypeID:
		// Decoding starsTransactionPeerFragment#e92fd902.
		 := StarsTransactionPeerFragment{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode StarsTransactionPeerClass: %w", )
		}
		return &, nil
	case StarsTransactionPeerTypeID:
		// Decoding starsTransactionPeer#d80da15d.
		 := StarsTransactionPeer{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode StarsTransactionPeerClass: %w", )
		}
		return &, nil
	case StarsTransactionPeerAdsTypeID:
		// Decoding starsTransactionPeerAds#60682812.
		 := StarsTransactionPeerAds{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode StarsTransactionPeerClass: %w", )
		}
		return &, nil
	case StarsTransactionPeerAPITypeID:
		// Decoding starsTransactionPeerAPI#f9677aad.
		 := StarsTransactionPeerAPI{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode StarsTransactionPeerClass: %w", )
		}
		return &, nil
	default:
		return nil, fmt.Errorf("unable to decode StarsTransactionPeerClass: %w", bin.NewUnexpectedID())
	}
}

// StarsTransactionPeer boxes the StarsTransactionPeerClass providing a helper.
type StarsTransactionPeerBox struct {
	StarsTransactionPeer StarsTransactionPeerClass
}

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

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