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

// InputPasskeyResponseRegister represents TL type `inputPasskeyResponseRegister#3e63935c`.
// WebAuthn registration response used when registering a new passkey, see here »¹ for
// more info on the full flow.
// Generated from the AuthenticatorAttestationResponse¹ object.
//
// Links:
//  1. https://core.telegram.org/api/passkeys#creating-a-passkey
//  2. https://developer.mozilla.org/en-US/docs/Web/API/AuthenticatorAttestationResponse
//
// See https://core.telegram.org/constructor/inputPasskeyResponseRegister for reference.
type InputPasskeyResponseRegister struct {
	// Base64url-decoded clientDataJSON field of an AuthenticatorAttestationResponse¹,
	// wrapped in dataJSON²
	//
	// Links:
	//  1) https://developer.mozilla.org/en-US/docs/Web/API/AuthenticatorAttestationResponse
	//  2) https://core.telegram.org/constructor/dataJSON
	ClientData DataJSON
	// Base64url-decoded attestationObject field of an AuthenticatorAttestationResponse¹
	//
	// Links:
	//  1) https://developer.mozilla.org/en-US/docs/Web/API/AuthenticatorAttestationResponse
	AttestationData []byte
}

// InputPasskeyResponseRegisterTypeID is TL type id of InputPasskeyResponseRegister.
const InputPasskeyResponseRegisterTypeID = 0x3e63935c

// construct implements constructor of InputPasskeyResponseClass.
func ( InputPasskeyResponseRegister) () InputPasskeyResponseClass { return & }

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

	_ InputPasskeyResponseClass = &InputPasskeyResponseRegister{}
)

func ( *InputPasskeyResponseRegister) () bool {
	if  == nil {
		return true
	}
	if !(.ClientData.Zero()) {
		return false
	}
	if !(.AttestationData == nil) {
		return false
	}

	return true
}

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

// FillFrom fills InputPasskeyResponseRegister from given interface.
func ( *InputPasskeyResponseRegister) ( interface {
	() ( DataJSON)
	() ( []byte)
}) {
	.ClientData = .()
	.AttestationData = .()
}

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

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

// TypeInfo returns info about TL type.
func ( *InputPasskeyResponseRegister) () tdp.Type {
	 := tdp.Type{
		Name: "inputPasskeyResponseRegister",
		ID:   InputPasskeyResponseRegisterTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "ClientData",
			SchemaName: "client_data",
		},
		{
			Name:       "AttestationData",
			SchemaName: "attestation_data",
		},
	}
	return 
}

// Encode implements bin.Encoder.
func ( *InputPasskeyResponseRegister) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputPasskeyResponseRegister#3e63935c as nil")
	}
	.PutID(InputPasskeyResponseRegisterTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputPasskeyResponseRegister) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputPasskeyResponseRegister#3e63935c as nil")
	}
	if  := .ClientData.Encode();  != nil {
		return fmt.Errorf("unable to encode inputPasskeyResponseRegister#3e63935c: field client_data: %w", )
	}
	.PutBytes(.AttestationData)
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputPasskeyResponseRegister) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputPasskeyResponseRegister#3e63935c to nil")
	}
	{
		if  := .ClientData.Decode();  != nil {
			return fmt.Errorf("unable to decode inputPasskeyResponseRegister#3e63935c: field client_data: %w", )
		}
	}
	{
		,  := .Bytes()
		if  != nil {
			return fmt.Errorf("unable to decode inputPasskeyResponseRegister#3e63935c: field attestation_data: %w", )
		}
		.AttestationData = 
	}
	return nil
}

// GetClientData returns value of ClientData field.
func ( *InputPasskeyResponseRegister) () ( DataJSON) {
	if  == nil {
		return
	}
	return .ClientData
}

// GetAttestationData returns value of AttestationData field.
func ( *InputPasskeyResponseRegister) () ( []byte) {
	if  == nil {
		return
	}
	return .AttestationData
}

// InputPasskeyResponseLogin represents TL type `inputPasskeyResponseLogin#c31fc14a`.
// WebAuthn authentication response used when logging in with a passkey, see here »¹
// for more info on the full flow.
// Generated from the AuthenticatorAssertionResponse¹ object.
//
// Links:
//  1. https://core.telegram.org/api/passkeys#logging-in-with-a-passkey
//  2. https://developer.mozilla.org/en-US/docs/Web/API/AuthenticatorAssertionResponse
//
// See https://core.telegram.org/constructor/inputPasskeyResponseLogin for reference.
type InputPasskeyResponseLogin struct {
	// Base64url-decoded clientDataJSON field of an AuthenticatorAssertionResponse¹, wrapped
	// in dataJSON²
	//
	// Links:
	//  1) https://developer.mozilla.org/en-US/docs/Web/API/AuthenticatorAssertionResponse
	//  2) https://core.telegram.org/constructor/dataJSON
	ClientData DataJSON
	// Base64url-decoded authenticatorData field of an AuthenticatorAssertionResponse¹
	//
	// Links:
	//  1) https://developer.mozilla.org/en-US/docs/Web/API/AuthenticatorAssertionResponse
	AuthenticatorData []byte
	// Base64url-decoded signature field of an AuthenticatorAssertionResponse¹
	//
	// Links:
	//  1) https://developer.mozilla.org/en-US/docs/Web/API/AuthenticatorAssertionResponse
	Signature []byte
	// Base64url-decoded userHandle field of an AuthenticatorAssertionResponse¹. The user
	// handle specified by the server is in <dc_id>:<user_id> format.
	//
	// Links:
	//  1) https://developer.mozilla.org/en-US/docs/Web/API/AuthenticatorAssertionResponse
	UserHandle string
}

// InputPasskeyResponseLoginTypeID is TL type id of InputPasskeyResponseLogin.
const InputPasskeyResponseLoginTypeID = 0xc31fc14a

// construct implements constructor of InputPasskeyResponseClass.
func ( InputPasskeyResponseLogin) () InputPasskeyResponseClass { return & }

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

	_ InputPasskeyResponseClass = &InputPasskeyResponseLogin{}
)

func ( *InputPasskeyResponseLogin) () bool {
	if  == nil {
		return true
	}
	if !(.ClientData.Zero()) {
		return false
	}
	if !(.AuthenticatorData == nil) {
		return false
	}
	if !(.Signature == nil) {
		return false
	}
	if !(.UserHandle == "") {
		return false
	}

	return true
}

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

// FillFrom fills InputPasskeyResponseLogin from given interface.
func ( *InputPasskeyResponseLogin) ( interface {
	() ( DataJSON)
	() ( []byte)
	() ( []byte)
	() ( string)
}) {
	.ClientData = .()
	.AuthenticatorData = .()
	.Signature = .()
	.UserHandle = .()
}

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

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

// TypeInfo returns info about TL type.
func ( *InputPasskeyResponseLogin) () tdp.Type {
	 := tdp.Type{
		Name: "inputPasskeyResponseLogin",
		ID:   InputPasskeyResponseLoginTypeID,
	}
	if  == nil {
		.Null = true
		return 
	}
	.Fields = []tdp.Field{
		{
			Name:       "ClientData",
			SchemaName: "client_data",
		},
		{
			Name:       "AuthenticatorData",
			SchemaName: "authenticator_data",
		},
		{
			Name:       "Signature",
			SchemaName: "signature",
		},
		{
			Name:       "UserHandle",
			SchemaName: "user_handle",
		},
	}
	return 
}

// Encode implements bin.Encoder.
func ( *InputPasskeyResponseLogin) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputPasskeyResponseLogin#c31fc14a as nil")
	}
	.PutID(InputPasskeyResponseLoginTypeID)
	return .EncodeBare()
}

// EncodeBare implements bin.BareEncoder.
func ( *InputPasskeyResponseLogin) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't encode inputPasskeyResponseLogin#c31fc14a as nil")
	}
	if  := .ClientData.Encode();  != nil {
		return fmt.Errorf("unable to encode inputPasskeyResponseLogin#c31fc14a: field client_data: %w", )
	}
	.PutBytes(.AuthenticatorData)
	.PutBytes(.Signature)
	.PutString(.UserHandle)
	return nil
}

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

// DecodeBare implements bin.BareDecoder.
func ( *InputPasskeyResponseLogin) ( *bin.Buffer) error {
	if  == nil {
		return fmt.Errorf("can't decode inputPasskeyResponseLogin#c31fc14a to nil")
	}
	{
		if  := .ClientData.Decode();  != nil {
			return fmt.Errorf("unable to decode inputPasskeyResponseLogin#c31fc14a: field client_data: %w", )
		}
	}
	{
		,  := .Bytes()
		if  != nil {
			return fmt.Errorf("unable to decode inputPasskeyResponseLogin#c31fc14a: field authenticator_data: %w", )
		}
		.AuthenticatorData = 
	}
	{
		,  := .Bytes()
		if  != nil {
			return fmt.Errorf("unable to decode inputPasskeyResponseLogin#c31fc14a: field signature: %w", )
		}
		.Signature = 
	}
	{
		,  := .String()
		if  != nil {
			return fmt.Errorf("unable to decode inputPasskeyResponseLogin#c31fc14a: field user_handle: %w", )
		}
		.UserHandle = 
	}
	return nil
}

// GetClientData returns value of ClientData field.
func ( *InputPasskeyResponseLogin) () ( DataJSON) {
	if  == nil {
		return
	}
	return .ClientData
}

// GetAuthenticatorData returns value of AuthenticatorData field.
func ( *InputPasskeyResponseLogin) () ( []byte) {
	if  == nil {
		return
	}
	return .AuthenticatorData
}

// GetSignature returns value of Signature field.
func ( *InputPasskeyResponseLogin) () ( []byte) {
	if  == nil {
		return
	}
	return .Signature
}

// GetUserHandle returns value of UserHandle field.
func ( *InputPasskeyResponseLogin) () ( string) {
	if  == nil {
		return
	}
	return .UserHandle
}

// InputPasskeyResponseClassName is schema name of InputPasskeyResponseClass.
const InputPasskeyResponseClassName = "InputPasskeyResponse"

// InputPasskeyResponseClass represents InputPasskeyResponse generic type.
//
// See https://core.telegram.org/type/InputPasskeyResponse for reference.
//
// Constructors:
//   - [InputPasskeyResponseRegister]
//   - [InputPasskeyResponseLogin]
//
// Example:
//
//	g, err := tg.DecodeInputPasskeyResponse(buf)
//	if err != nil {
//	    panic(err)
//	}
//	switch v := g.(type) {
//	case *tg.InputPasskeyResponseRegister: // inputPasskeyResponseRegister#3e63935c
//	case *tg.InputPasskeyResponseLogin: // inputPasskeyResponseLogin#c31fc14a
//	default: panic(v)
//	}
type InputPasskeyResponseClass interface {
	bin.Encoder
	bin.Decoder
	bin.BareEncoder
	bin.BareDecoder
	construct() InputPasskeyResponseClass

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

	// Base64url-decoded clientDataJSON field of an AuthenticatorAttestationResponse¹,
	// wrapped in dataJSON²
	//
	// Links:
	//  1) https://developer.mozilla.org/en-US/docs/Web/API/AuthenticatorAttestationResponse
	//  2) https://core.telegram.org/constructor/dataJSON
	GetClientData() (value DataJSON)
}

// DecodeInputPasskeyResponse implements binary de-serialization for InputPasskeyResponseClass.
func ( *bin.Buffer) (InputPasskeyResponseClass, error) {
	,  := .PeekID()
	if  != nil {
		return nil, 
	}
	switch  {
	case InputPasskeyResponseRegisterTypeID:
		// Decoding inputPasskeyResponseRegister#3e63935c.
		 := InputPasskeyResponseRegister{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode InputPasskeyResponseClass: %w", )
		}
		return &, nil
	case InputPasskeyResponseLoginTypeID:
		// Decoding inputPasskeyResponseLogin#c31fc14a.
		 := InputPasskeyResponseLogin{}
		if  := .Decode();  != nil {
			return nil, fmt.Errorf("unable to decode InputPasskeyResponseClass: %w", )
		}
		return &, nil
	default:
		return nil, fmt.Errorf("unable to decode InputPasskeyResponseClass: %w", bin.NewUnexpectedID())
	}
}

// InputPasskeyResponse boxes the InputPasskeyResponseClass providing a helper.
type InputPasskeyResponseBox struct {
	InputPasskeyResponse InputPasskeyResponseClass
}

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

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