// Code generated by gotdgen, DO NOT EDIT.

package tdapi

import (
	"context"
	"errors"
	"fmt"
	"sort"
	"strings"

	"go.uber.org/multierr"

	"go.mau.fi/mautrix-telegram/pkg/gotd/bin"
	"go.mau.fi/mautrix-telegram/pkg/gotd/tdjson"
	"go.mau.fi/mautrix-telegram/pkg/gotd/tdp"
	"go.mau.fi/mautrix-telegram/pkg/gotd/tgerr"
)

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

// LanguagePackStringValueOrdinary represents TL type `languagePackStringValueOrdinary#f124a660`.
type LanguagePackStringValueOrdinary struct {
	// String value
	Value string
}

// LanguagePackStringValueOrdinaryTypeID is TL type id of LanguagePackStringValueOrdinary.
const LanguagePackStringValueOrdinaryTypeID = 0xf124a660

// construct implements constructor of LanguagePackStringValueClass.
func (l LanguagePackStringValueOrdinary) construct() LanguagePackStringValueClass { return &l }

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

	_ LanguagePackStringValueClass = &LanguagePackStringValueOrdinary{}
)

func (l *LanguagePackStringValueOrdinary) Zero() bool {
	if l == nil {
		return true
	}
	if !(l.Value == "") {
		return false
	}

	return true
}

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

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

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

// TypeInfo returns info about TL type.
func (l *LanguagePackStringValueOrdinary) TypeInfo() tdp.Type {
	typ := tdp.Type{
		Name: "languagePackStringValueOrdinary",
		ID:   LanguagePackStringValueOrdinaryTypeID,
	}
	if l == nil {
		typ.Null = true
		return typ
	}
	typ.Fields = []tdp.Field{
		{
			Name:       "Value",
			SchemaName: "value",
		},
	}
	return typ
}

// Encode implements bin.Encoder.
func (l *LanguagePackStringValueOrdinary) Encode(b *bin.Buffer) error {
	if l == nil {
		return fmt.Errorf("can't encode languagePackStringValueOrdinary#f124a660 as nil")
	}
	b.PutID(LanguagePackStringValueOrdinaryTypeID)
	return l.EncodeBare(b)
}

// EncodeBare implements bin.BareEncoder.
func (l *LanguagePackStringValueOrdinary) EncodeBare(b *bin.Buffer) error {
	if l == nil {
		return fmt.Errorf("can't encode languagePackStringValueOrdinary#f124a660 as nil")
	}
	b.PutString(l.Value)
	return nil
}

// Decode implements bin.Decoder.
func (l *LanguagePackStringValueOrdinary) Decode(b *bin.Buffer) error {
	if l == nil {
		return fmt.Errorf("can't decode languagePackStringValueOrdinary#f124a660 to nil")
	}
	if err := b.ConsumeID(LanguagePackStringValueOrdinaryTypeID); err != nil {
		return fmt.Errorf("unable to decode languagePackStringValueOrdinary#f124a660: %w", err)
	}
	return l.DecodeBare(b)
}

// DecodeBare implements bin.BareDecoder.
func (l *LanguagePackStringValueOrdinary) DecodeBare(b *bin.Buffer) error {
	if l == nil {
		return fmt.Errorf("can't decode languagePackStringValueOrdinary#f124a660 to nil")
	}
	{
		value, err := b.String()
		if err != nil {
			return fmt.Errorf("unable to decode languagePackStringValueOrdinary#f124a660: field value: %w", err)
		}
		l.Value = value
	}
	return nil
}

// EncodeTDLibJSON implements tdjson.TDLibEncoder.
func (l *LanguagePackStringValueOrdinary) EncodeTDLibJSON(b tdjson.Encoder) error {
	if l == nil {
		return fmt.Errorf("can't encode languagePackStringValueOrdinary#f124a660 as nil")
	}
	b.ObjStart()
	b.PutID("languagePackStringValueOrdinary")
	b.Comma()
	b.FieldStart("value")
	b.PutString(l.Value)
	b.Comma()
	b.StripComma()
	b.ObjEnd()
	return nil
}

// DecodeTDLibJSON implements tdjson.TDLibDecoder.
func (l *LanguagePackStringValueOrdinary) DecodeTDLibJSON(b tdjson.Decoder) error {
	if l == nil {
		return fmt.Errorf("can't decode languagePackStringValueOrdinary#f124a660 to nil")
	}

	return b.Obj(func(b tdjson.Decoder, key []byte) error {
		switch string(key) {
		case tdjson.TypeField:
			if err := b.ConsumeID("languagePackStringValueOrdinary"); err != nil {
				return fmt.Errorf("unable to decode languagePackStringValueOrdinary#f124a660: %w", err)
			}
		case "value":
			value, err := b.String()
			if err != nil {
				return fmt.Errorf("unable to decode languagePackStringValueOrdinary#f124a660: field value: %w", err)
			}
			l.Value = value
		default:
			return b.Skip()
		}
		return nil
	})
}

// GetValue returns value of Value field.
func (l *LanguagePackStringValueOrdinary) GetValue() (value string) {
	if l == nil {
		return
	}
	return l.Value
}

// LanguagePackStringValuePluralized represents TL type `languagePackStringValuePluralized#71a812c5`.
type LanguagePackStringValuePluralized struct {
	// Value for zero objects
	ZeroValue string
	// Value for one object
	OneValue string
	// Value for two objects
	TwoValue string
	// Value for few objects
	FewValue string
	// Value for many objects
	ManyValue string
	// Default value
	OtherValue string
}

// LanguagePackStringValuePluralizedTypeID is TL type id of LanguagePackStringValuePluralized.
const LanguagePackStringValuePluralizedTypeID = 0x71a812c5

// construct implements constructor of LanguagePackStringValueClass.
func (l LanguagePackStringValuePluralized) construct() LanguagePackStringValueClass { return &l }

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

	_ LanguagePackStringValueClass = &LanguagePackStringValuePluralized{}
)

func (l *LanguagePackStringValuePluralized) Zero() bool {
	if l == nil {
		return true
	}
	if !(l.ZeroValue == "") {
		return false
	}
	if !(l.OneValue == "") {
		return false
	}
	if !(l.TwoValue == "") {
		return false
	}
	if !(l.FewValue == "") {
		return false
	}
	if !(l.ManyValue == "") {
		return false
	}
	if !(l.OtherValue == "") {
		return false
	}

	return true
}

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

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

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

// TypeInfo returns info about TL type.
func (l *LanguagePackStringValuePluralized) TypeInfo() tdp.Type {
	typ := tdp.Type{
		Name: "languagePackStringValuePluralized",
		ID:   LanguagePackStringValuePluralizedTypeID,
	}
	if l == nil {
		typ.Null = true
		return typ
	}
	typ.Fields = []tdp.Field{
		{
			Name:       "ZeroValue",
			SchemaName: "zero_value",
		},
		{
			Name:       "OneValue",
			SchemaName: "one_value",
		},
		{
			Name:       "TwoValue",
			SchemaName: "two_value",
		},
		{
			Name:       "FewValue",
			SchemaName: "few_value",
		},
		{
			Name:       "ManyValue",
			SchemaName: "many_value",
		},
		{
			Name:       "OtherValue",
			SchemaName: "other_value",
		},
	}
	return typ
}

// Encode implements bin.Encoder.
func (l *LanguagePackStringValuePluralized) Encode(b *bin.Buffer) error {
	if l == nil {
		return fmt.Errorf("can't encode languagePackStringValuePluralized#71a812c5 as nil")
	}
	b.PutID(LanguagePackStringValuePluralizedTypeID)
	return l.EncodeBare(b)
}

// EncodeBare implements bin.BareEncoder.
func (l *LanguagePackStringValuePluralized) EncodeBare(b *bin.Buffer) error {
	if l == nil {
		return fmt.Errorf("can't encode languagePackStringValuePluralized#71a812c5 as nil")
	}
	b.PutString(l.ZeroValue)
	b.PutString(l.OneValue)
	b.PutString(l.TwoValue)
	b.PutString(l.FewValue)
	b.PutString(l.ManyValue)
	b.PutString(l.OtherValue)
	return nil
}

// Decode implements bin.Decoder.
func (l *LanguagePackStringValuePluralized) Decode(b *bin.Buffer) error {
	if l == nil {
		return fmt.Errorf("can't decode languagePackStringValuePluralized#71a812c5 to nil")
	}
	if err := b.ConsumeID(LanguagePackStringValuePluralizedTypeID); err != nil {
		return fmt.Errorf("unable to decode languagePackStringValuePluralized#71a812c5: %w", err)
	}
	return l.DecodeBare(b)
}

// DecodeBare implements bin.BareDecoder.
func (l *LanguagePackStringValuePluralized) DecodeBare(b *bin.Buffer) error {
	if l == nil {
		return fmt.Errorf("can't decode languagePackStringValuePluralized#71a812c5 to nil")
	}
	{
		value, err := b.String()
		if err != nil {
			return fmt.Errorf("unable to decode languagePackStringValuePluralized#71a812c5: field zero_value: %w", err)
		}
		l.ZeroValue = value
	}
	{
		value, err := b.String()
		if err != nil {
			return fmt.Errorf("unable to decode languagePackStringValuePluralized#71a812c5: field one_value: %w", err)
		}
		l.OneValue = value
	}
	{
		value, err := b.String()
		if err != nil {
			return fmt.Errorf("unable to decode languagePackStringValuePluralized#71a812c5: field two_value: %w", err)
		}
		l.TwoValue = value
	}
	{
		value, err := b.String()
		if err != nil {
			return fmt.Errorf("unable to decode languagePackStringValuePluralized#71a812c5: field few_value: %w", err)
		}
		l.FewValue = value
	}
	{
		value, err := b.String()
		if err != nil {
			return fmt.Errorf("unable to decode languagePackStringValuePluralized#71a812c5: field many_value: %w", err)
		}
		l.ManyValue = value
	}
	{
		value, err := b.String()
		if err != nil {
			return fmt.Errorf("unable to decode languagePackStringValuePluralized#71a812c5: field other_value: %w", err)
		}
		l.OtherValue = value
	}
	return nil
}

// EncodeTDLibJSON implements tdjson.TDLibEncoder.
func (l *LanguagePackStringValuePluralized) EncodeTDLibJSON(b tdjson.Encoder) error {
	if l == nil {
		return fmt.Errorf("can't encode languagePackStringValuePluralized#71a812c5 as nil")
	}
	b.ObjStart()
	b.PutID("languagePackStringValuePluralized")
	b.Comma()
	b.FieldStart("zero_value")
	b.PutString(l.ZeroValue)
	b.Comma()
	b.FieldStart("one_value")
	b.PutString(l.OneValue)
	b.Comma()
	b.FieldStart("two_value")
	b.PutString(l.TwoValue)
	b.Comma()
	b.FieldStart("few_value")
	b.PutString(l.FewValue)
	b.Comma()
	b.FieldStart("many_value")
	b.PutString(l.ManyValue)
	b.Comma()
	b.FieldStart("other_value")
	b.PutString(l.OtherValue)
	b.Comma()
	b.StripComma()
	b.ObjEnd()
	return nil
}

// DecodeTDLibJSON implements tdjson.TDLibDecoder.
func (l *LanguagePackStringValuePluralized) DecodeTDLibJSON(b tdjson.Decoder) error {
	if l == nil {
		return fmt.Errorf("can't decode languagePackStringValuePluralized#71a812c5 to nil")
	}

	return b.Obj(func(b tdjson.Decoder, key []byte) error {
		switch string(key) {
		case tdjson.TypeField:
			if err := b.ConsumeID("languagePackStringValuePluralized"); err != nil {
				return fmt.Errorf("unable to decode languagePackStringValuePluralized#71a812c5: %w", err)
			}
		case "zero_value":
			value, err := b.String()
			if err != nil {
				return fmt.Errorf("unable to decode languagePackStringValuePluralized#71a812c5: field zero_value: %w", err)
			}
			l.ZeroValue = value
		case "one_value":
			value, err := b.String()
			if err != nil {
				return fmt.Errorf("unable to decode languagePackStringValuePluralized#71a812c5: field one_value: %w", err)
			}
			l.OneValue = value
		case "two_value":
			value, err := b.String()
			if err != nil {
				return fmt.Errorf("unable to decode languagePackStringValuePluralized#71a812c5: field two_value: %w", err)
			}
			l.TwoValue = value
		case "few_value":
			value, err := b.String()
			if err != nil {
				return fmt.Errorf("unable to decode languagePackStringValuePluralized#71a812c5: field few_value: %w", err)
			}
			l.FewValue = value
		case "many_value":
			value, err := b.String()
			if err != nil {
				return fmt.Errorf("unable to decode languagePackStringValuePluralized#71a812c5: field many_value: %w", err)
			}
			l.ManyValue = value
		case "other_value":
			value, err := b.String()
			if err != nil {
				return fmt.Errorf("unable to decode languagePackStringValuePluralized#71a812c5: field other_value: %w", err)
			}
			l.OtherValue = value
		default:
			return b.Skip()
		}
		return nil
	})
}

// GetZeroValue returns value of ZeroValue field.
func (l *LanguagePackStringValuePluralized) GetZeroValue() (value string) {
	if l == nil {
		return
	}
	return l.ZeroValue
}

// GetOneValue returns value of OneValue field.
func (l *LanguagePackStringValuePluralized) GetOneValue() (value string) {
	if l == nil {
		return
	}
	return l.OneValue
}

// GetTwoValue returns value of TwoValue field.
func (l *LanguagePackStringValuePluralized) GetTwoValue() (value string) {
	if l == nil {
		return
	}
	return l.TwoValue
}

// GetFewValue returns value of FewValue field.
func (l *LanguagePackStringValuePluralized) GetFewValue() (value string) {
	if l == nil {
		return
	}
	return l.FewValue
}

// GetManyValue returns value of ManyValue field.
func (l *LanguagePackStringValuePluralized) GetManyValue() (value string) {
	if l == nil {
		return
	}
	return l.ManyValue
}

// GetOtherValue returns value of OtherValue field.
func (l *LanguagePackStringValuePluralized) GetOtherValue() (value string) {
	if l == nil {
		return
	}
	return l.OtherValue
}

// LanguagePackStringValueDeleted represents TL type `languagePackStringValueDeleted#6d5cb6fa`.
type LanguagePackStringValueDeleted struct {
}

// LanguagePackStringValueDeletedTypeID is TL type id of LanguagePackStringValueDeleted.
const LanguagePackStringValueDeletedTypeID = 0x6d5cb6fa

// construct implements constructor of LanguagePackStringValueClass.
func (l LanguagePackStringValueDeleted) construct() LanguagePackStringValueClass { return &l }

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

	_ LanguagePackStringValueClass = &LanguagePackStringValueDeleted{}
)

func (l *LanguagePackStringValueDeleted) Zero() bool {
	if l == nil {
		return true
	}

	return true
}

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

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

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

// TypeInfo returns info about TL type.
func (l *LanguagePackStringValueDeleted) TypeInfo() tdp.Type {
	typ := tdp.Type{
		Name: "languagePackStringValueDeleted",
		ID:   LanguagePackStringValueDeletedTypeID,
	}
	if l == nil {
		typ.Null = true
		return typ
	}
	typ.Fields = []tdp.Field{}
	return typ
}

// Encode implements bin.Encoder.
func (l *LanguagePackStringValueDeleted) Encode(b *bin.Buffer) error {
	if l == nil {
		return fmt.Errorf("can't encode languagePackStringValueDeleted#6d5cb6fa as nil")
	}
	b.PutID(LanguagePackStringValueDeletedTypeID)
	return l.EncodeBare(b)
}

// EncodeBare implements bin.BareEncoder.
func (l *LanguagePackStringValueDeleted) EncodeBare(b *bin.Buffer) error {
	if l == nil {
		return fmt.Errorf("can't encode languagePackStringValueDeleted#6d5cb6fa as nil")
	}
	return nil
}

// Decode implements bin.Decoder.
func (l *LanguagePackStringValueDeleted) Decode(b *bin.Buffer) error {
	if l == nil {
		return fmt.Errorf("can't decode languagePackStringValueDeleted#6d5cb6fa to nil")
	}
	if err := b.ConsumeID(LanguagePackStringValueDeletedTypeID); err != nil {
		return fmt.Errorf("unable to decode languagePackStringValueDeleted#6d5cb6fa: %w", err)
	}
	return l.DecodeBare(b)
}

// DecodeBare implements bin.BareDecoder.
func (l *LanguagePackStringValueDeleted) DecodeBare(b *bin.Buffer) error {
	if l == nil {
		return fmt.Errorf("can't decode languagePackStringValueDeleted#6d5cb6fa to nil")
	}
	return nil
}

// EncodeTDLibJSON implements tdjson.TDLibEncoder.
func (l *LanguagePackStringValueDeleted) EncodeTDLibJSON(b tdjson.Encoder) error {
	if l == nil {
		return fmt.Errorf("can't encode languagePackStringValueDeleted#6d5cb6fa as nil")
	}
	b.ObjStart()
	b.PutID("languagePackStringValueDeleted")
	b.Comma()
	b.StripComma()
	b.ObjEnd()
	return nil
}

// DecodeTDLibJSON implements tdjson.TDLibDecoder.
func (l *LanguagePackStringValueDeleted) DecodeTDLibJSON(b tdjson.Decoder) error {
	if l == nil {
		return fmt.Errorf("can't decode languagePackStringValueDeleted#6d5cb6fa to nil")
	}

	return b.Obj(func(b tdjson.Decoder, key []byte) error {
		switch string(key) {
		case tdjson.TypeField:
			if err := b.ConsumeID("languagePackStringValueDeleted"); err != nil {
				return fmt.Errorf("unable to decode languagePackStringValueDeleted#6d5cb6fa: %w", err)
			}
		default:
			return b.Skip()
		}
		return nil
	})
}

// LanguagePackStringValueClassName is schema name of LanguagePackStringValueClass.
const LanguagePackStringValueClassName = "LanguagePackStringValue"

// LanguagePackStringValueClass represents LanguagePackStringValue generic type.
//
// Example:
//
//	g, err := tdapi.DecodeLanguagePackStringValue(buf)
//	if err != nil {
//	    panic(err)
//	}
//	switch v := g.(type) {
//	case *tdapi.LanguagePackStringValueOrdinary: // languagePackStringValueOrdinary#f124a660
//	case *tdapi.LanguagePackStringValuePluralized: // languagePackStringValuePluralized#71a812c5
//	case *tdapi.LanguagePackStringValueDeleted: // languagePackStringValueDeleted#6d5cb6fa
//	default: panic(v)
//	}
type LanguagePackStringValueClass interface {
	bin.Encoder
	bin.Decoder
	bin.BareEncoder
	bin.BareDecoder
	construct() LanguagePackStringValueClass

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

	EncodeTDLibJSON(b tdjson.Encoder) error
	DecodeTDLibJSON(b tdjson.Decoder) error
}

// DecodeLanguagePackStringValue implements binary de-serialization for LanguagePackStringValueClass.
func DecodeLanguagePackStringValue(buf *bin.Buffer) (LanguagePackStringValueClass, error) {
	id, err := buf.PeekID()
	if err != nil {
		return nil, err
	}
	switch id {
	case LanguagePackStringValueOrdinaryTypeID:
		// Decoding languagePackStringValueOrdinary#f124a660.
		v := LanguagePackStringValueOrdinary{}
		if err := v.Decode(buf); err != nil {
			return nil, fmt.Errorf("unable to decode LanguagePackStringValueClass: %w", err)
		}
		return &v, nil
	case LanguagePackStringValuePluralizedTypeID:
		// Decoding languagePackStringValuePluralized#71a812c5.
		v := LanguagePackStringValuePluralized{}
		if err := v.Decode(buf); err != nil {
			return nil, fmt.Errorf("unable to decode LanguagePackStringValueClass: %w", err)
		}
		return &v, nil
	case LanguagePackStringValueDeletedTypeID:
		// Decoding languagePackStringValueDeleted#6d5cb6fa.
		v := LanguagePackStringValueDeleted{}
		if err := v.Decode(buf); err != nil {
			return nil, fmt.Errorf("unable to decode LanguagePackStringValueClass: %w", err)
		}
		return &v, nil
	default:
		return nil, fmt.Errorf("unable to decode LanguagePackStringValueClass: %w", bin.NewUnexpectedID(id))
	}
}

// DecodeTDLibJSONLanguagePackStringValue implements binary de-serialization for LanguagePackStringValueClass.
func DecodeTDLibJSONLanguagePackStringValue(buf tdjson.Decoder) (LanguagePackStringValueClass, error) {
	id, err := buf.FindTypeID()
	if err != nil {
		return nil, err
	}
	switch id {
	case "languagePackStringValueOrdinary":
		// Decoding languagePackStringValueOrdinary#f124a660.
		v := LanguagePackStringValueOrdinary{}
		if err := v.DecodeTDLibJSON(buf); err != nil {
			return nil, fmt.Errorf("unable to decode LanguagePackStringValueClass: %w", err)
		}
		return &v, nil
	case "languagePackStringValuePluralized":
		// Decoding languagePackStringValuePluralized#71a812c5.
		v := LanguagePackStringValuePluralized{}
		if err := v.DecodeTDLibJSON(buf); err != nil {
			return nil, fmt.Errorf("unable to decode LanguagePackStringValueClass: %w", err)
		}
		return &v, nil
	case "languagePackStringValueDeleted":
		// Decoding languagePackStringValueDeleted#6d5cb6fa.
		v := LanguagePackStringValueDeleted{}
		if err := v.DecodeTDLibJSON(buf); err != nil {
			return nil, fmt.Errorf("unable to decode LanguagePackStringValueClass: %w", err)
		}
		return &v, nil
	default:
		return nil, fmt.Errorf("unable to decode LanguagePackStringValueClass: %w", tdjson.NewUnexpectedID(id))
	}
}

// LanguagePackStringValue boxes the LanguagePackStringValueClass providing a helper.
type LanguagePackStringValueBox struct {
	LanguagePackStringValue LanguagePackStringValueClass
}

// Decode implements bin.Decoder for LanguagePackStringValueBox.
func (b *LanguagePackStringValueBox) Decode(buf *bin.Buffer) error {
	if b == nil {
		return fmt.Errorf("unable to decode LanguagePackStringValueBox to nil")
	}
	v, err := DecodeLanguagePackStringValue(buf)
	if err != nil {
		return fmt.Errorf("unable to decode boxed value: %w", err)
	}
	b.LanguagePackStringValue = v
	return nil
}

// Encode implements bin.Encode for LanguagePackStringValueBox.
func (b *LanguagePackStringValueBox) Encode(buf *bin.Buffer) error {
	if b == nil || b.LanguagePackStringValue == nil {
		return fmt.Errorf("unable to encode LanguagePackStringValueClass as nil")
	}
	return b.LanguagePackStringValue.Encode(buf)
}

// DecodeTDLibJSON implements bin.Decoder for LanguagePackStringValueBox.
func (b *LanguagePackStringValueBox) DecodeTDLibJSON(buf tdjson.Decoder) error {
	if b == nil {
		return fmt.Errorf("unable to decode LanguagePackStringValueBox to nil")
	}
	v, err := DecodeTDLibJSONLanguagePackStringValue(buf)
	if err != nil {
		return fmt.Errorf("unable to decode boxed value: %w", err)
	}
	b.LanguagePackStringValue = v
	return nil
}

// EncodeTDLibJSON implements bin.Encode for LanguagePackStringValueBox.
func (b *LanguagePackStringValueBox) EncodeTDLibJSON(buf tdjson.Encoder) error {
	if b == nil || b.LanguagePackStringValue == nil {
		return fmt.Errorf("unable to encode LanguagePackStringValueClass as nil")
	}
	return b.LanguagePackStringValue.EncodeTDLibJSON(buf)
}
