package common

import (
	"fmt"

	"github.com/jinzhu/copier"
)

func Copy[T any](src *T, deepCopy bool) (*T, error) {
	if src == nil {
		return nil, fmt.Errorf("copy source cannot be nil")
	}
	var dst T
	if deepCopy {
		err := copier.CopyWithOption(&dst, src, copier.Option{DeepCopy: true, IgnoreEmpty: true})
		if err != nil {
			return nil, err
		}
	} else {
		err := copier.Copy(&dst, src)
		if err != nil {
			return nil, err
		}
	}
	return &dst, nil
}
