You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: tl_chat_boost_gen.go
    path of file: ./repos/td/tdapi
    
    the code of the file until where you have to start completion: // Code generated by gotdgen, DO NOT EDIT.

package tdapi

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

	"go.uber.org/multierr"

	"github.com/gotd/td/bin"
	"github.com/gotd/td/tdjson"
	"github.com/gotd/td/tdp"
	"github.com/gotd/td/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{}
)

// ChatBoost represents TL type `chatBoost#96bfccb2`.
type ChatBoost struct {
	// Unique identifier of the boost
	ID string
	// The number of identical boosts applied
	Count int32
	// Source of the boost
	Source ChatBoostSourceClass
	// Point in time (Unix timestamp) when the chat was boosted
	StartDate int32
	// Point in time (Unix timestamp) when the boost will expire
	ExpirationDate int32
}

// ChatBoostTypeID is TL type id of ChatBoost.
const ChatBoostTypeID = 0x96bfccb2

// Ensuring interfaces in compile-time for ChatBoost.
var (
	_ bin.Encoder     = &ChatBoost{}
	_ bin.Decoder     = &ChatBoost{}
	_ bin.BareEncoder = &C
    
func (c *ChatBoost) DecodeTDLibJSON(b tdjson.Decoder) error {
	if c == nil {
		return fmt.Errorf("can't decode chatBoost#96bfccb2 to nil")
	}

	return b.Obj(func(b tdjson.Decoder, key []byte) error {
		switch string(key) {
		case tdjson.TypeField:
			if err := b.ConsumeID("chatBoost"); err != nil {
				return fmt.Errorf("unable to decode chatBoost#96bfccb2: %w", err)
			}
		case "id":
			value, err := b.String()
			if err != nil {
				return fmt.Errorf("unable to decode chatBoost#96bfccb2: field id: %w", err)
			}
			c.ID = value
		case "count":
			value, err := b.Int32()
			if err != nil {
				return fmt.Errorf("unable to decode chatBoost#96bfccb2: field count: %w", err)
			}
			c.Count = value
		case "source":
			value, err := DecodeTDLibJSONChatBoostSource(b)
			if err != nil {
				return fmt.Errorf("unable to decode chatBoost#96bfccb2: field source: %w", err)
			}
			c.Source = value
		case "start_date":
			value, err := b.Int32()
			if err != nil {
				return fmt.Errorf("unable to decode chatBoost#96bfccb2: field start_date: %w", err)
			}
			c.StartDate = value
		case "expiration_date":
			value, err := b.Int32()
			if err != nil {
				return fmt.Errorf("unable to decode chatBoost#96bfccb2: field expiration_date: %w", err)
			}
			c.ExpirationDate = value
		default:
			return b.Skip()
		}
		return nil
	})
}