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

// PaymentsSendStarsFormRequest represents TL type `payments.sendStarsForm#7998c914`.
// Make a payment using Telegram Stars, see here »¹ for more info.
//
// Links:
//  1. https://core.telegram.org/api/stars#using-stars
//
// See https://core.telegram.org/method/payments.sendStarsForm for reference.
type PaymentsSendStarsFormRequest struct {
	// Payment form ID
	FormID int64
	// Invoice
	Invoice InputInvoiceClass
}

// PaymentsSendStarsFormRequestTypeID is TL type id of PaymentsSendStarsFormRequest.
const PaymentsSendStarsFormRequestTypeID = 0x7998c914

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

func ( *PaymentsSendStarsFormRequest) () bool {
	if  == nil {
		return true
	}
	if !(.FormID == 0) {
		return false
	}
	if !(.Invoice == nil) {
		return false
	}

	return true
}

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

// FillFrom fills PaymentsSendStarsFormRequest from given interface.
func ( *PaymentsSendStarsFormRequest) ( interface {
	() ( int64)
	() ( InputInvoiceClass)
}) {
	.FormID = .()
	.Invoice = .()
}

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

// TypeName returns name of type in TL schema.
func (*PaymentsSendStarsFormRequest) () string {
	return "payments.sendStarsForm"
}

// TypeInfo returns info about TL type.
func ( *PaymentsSendStarsFormRequest) () tdp.Type {
	 := tdp.Type{
		Name: "payments.sendStarsForm",
		ID:   PaymentsSendStarsFormRequestTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "FormID",
			SchemaName: "form_id",
		},
		{
			Name:       "Invoice",
			SchemaName: "invoice",
		},
	}
	return 
}

// Encode implements bin.Encoder.
func ( *PaymentsSendStarsFormRequest) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode payments.sendStarsForm#7998c914 as nil")
	}
	.PutID(PaymentsSendStarsFormRequestTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *PaymentsSendStarsFormRequest) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode payments.sendStarsForm#7998c914 as nil")
	}
	.PutLong(.FormID)
	if .Invoice == nil {
		return fmt.Errorf("unable to encode payments.sendStarsForm#7998c914: field invoice is nil")
	}
	if  := .Invoice.Encode();  != nil {
		return fmt.Errorf("unable to encode payments.sendStarsForm#7998c914: field invoice: %w", )
	}
	return nil
}

// Decode implements bin.Decoder.
func ( *PaymentsSendStarsFormRequest) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode payments.sendStarsForm#7998c914 to nil")
	}
	if  := .ConsumeID(PaymentsSendStarsFormRequestTypeID);  != nil {
		return fmt.Errorf("unable to decode payments.sendStarsForm#7998c914: %w", )
	}
	return .DecodeBare()
}

// DecodeBare implements bin.BareDecoder.
func ( *PaymentsSendStarsFormRequest) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode payments.sendStarsForm#7998c914 to nil")
	}
	{
		,  := .Long()
		if  != nil {
			return fmt.Errorf("unable to decode payments.sendStarsForm#7998c914: field form_id: %w", )
		}
		.FormID = 
	}
	{
		,  := DecodeInputInvoice()
		if  != nil {
			return fmt.Errorf("unable to decode payments.sendStarsForm#7998c914: field invoice: %w", )
		}
		.Invoice = 
	}
	return nil
}

// GetFormID returns value of FormID field.
func ( *PaymentsSendStarsFormRequest) () ( int64) {
	if  == nil {
		return
	}
	return .FormID
}

// GetInvoice returns value of Invoice field.
func ( *PaymentsSendStarsFormRequest) () ( InputInvoiceClass) {
	if  == nil {
		return
	}
	return .Invoice
}

// PaymentsSendStarsForm invokes method payments.sendStarsForm#7998c914 returning error if any.
// Make a payment using Telegram Stars, see here »¹ for more info.
//
// Links:
//  1. https://core.telegram.org/api/stars#using-stars
//
// Possible errors:
//
//	406 API_GIFT_RESTRICTED_UPDATE_APP: Please update the app to access the gift API.
//	400 BALANCE_TOO_LOW: The transaction cannot be completed because the current Telegram Stars balance is too low.
//	403 BOT_ACCESS_FORBIDDEN: The specified method can be used over a business connection for some operations, but the specified query attempted an operation that is not allowed over a business connection.
//	400 BOT_INVOICE_INVALID: The specified invoice is invalid.
//	400 BUSINESS_CONNECTION_INVALID: The connection_id passed to the wrapping invokeWithBusinessConnection call is invalid.
//	400 FORM_EXPIRED: The form was generated more than 10 minutes ago and has expired, please re-generate it using payments.getPaymentForm and pass the new form_id.
//	400 FORM_ID_EMPTY: The specified form ID is empty.
//	400 FORM_SUBMIT_DUPLICATE: The same payment form was already submitted.  .
//	400 FORM_UNSUPPORTED: Please update your client.
//	400 GIFT_STARS_INVALID: The specified amount of stars is invalid.
//	400 MEDIA_ALREADY_PAID: You already paid for the specified media.
//	400 MONTH_INVALID: The number of months specified in inputInvoicePremiumGiftStars.months is invalid.
//	400 PEER_ID_INVALID: The provided peer id is invalid.
//	406 PRECHECKOUT_FAILED: Precheckout failed, a detailed and localized description for the error will be emitted via an updateServiceNotification as specified here ».
//	400 PURPOSE_INVALID: The specified payment purpose is invalid.
//	400 STARGIFT_ALREADY_UPGRADED: The specified gift was already upgraded to a collectible gift.
//	400 STARGIFT_NOT_FOUND: The specified gift was not found.
//	400 STARGIFT_OWNER_INVALID: You cannot transfer or sell a gift owned by another user.
//	400 STARGIFT_SLUG_INVALID: The specified gift slug is invalid.
//	400 STARGIFT_USAGE_LIMITED: The gift is sold out.
//	400 STARGIFT_USER_USAGE_LIMITED: You've reached the starGift.limited_per_user limit, you can't buy any more gifts of this type.
//	406 STARS_FORM_AMOUNT_MISMATCH: The form amount has changed, please fetch the new form using payments.getPaymentForm and restart the process.
//	400 TO_ID_INVALID: The specified to_id of the passed inputInvoiceStarGiftResale or inputInvoiceStarGiftTransfer is invalid.
//	400 USER_ID_INVALID: The provided user ID is invalid.
//
// See https://core.telegram.org/method/payments.sendStarsForm for reference.
func ( *Client) ( context.Context,  *PaymentsSendStarsFormRequest) (PaymentsPaymentResultClass, error) {
	var  PaymentsPaymentResultBox

	if  := .rpc.Invoke(, , &);  != nil {
		return nil, 
	}
	return .PaymentResult, nil
}