Ctrl K
ComunidadGuías…

common/copy.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package common

import (
	"bytes"
	"encoding/json"
	"fmt"

	"github.com/jinzhu/copier"
)

func DeepCopy[T any](src *T) (*T, error) {
	if src == nil {
		return nil, fmt.Errorf("copy source cannot be nil")
	}
	var dst T
	err := copier.CopyWithOption(&dst, src, copier.Option{
		DeepCopy: true, IgnoreEmpty: true,
		Converters: []copier.TypeConverter{{
			SrcType: json.RawMessage{},
			DstType: json.RawMessage{},
			Fn: func(src any) (any, error) {
				// Copy raw JSON in bulk while retaining independent storage for
				// request mutation and retries, instead of reflecting over each byte.
				return json.RawMessage(bytes.Clone(src.(json.RawMessage))), nil
			},
		}},
	})
	if err != nil {
		return nil, err
	}
	return &dst, nil
}