1
0
mirror of https://github.com/go-task/task.git synced 2025-03-19 21:17:46 +02:00
task/internal/deepcopy/deepcopy.go

36 lines
569 B
Go
Raw Normal View History

package deepcopy
2022-10-02 05:45:27 +00:00
type Copier[T any] interface {
DeepCopy() T
}
2022-10-02 05:45:27 +00:00
func Slice[T any](orig []T) []T {
2022-10-02 05:45:27 +00:00
if orig == nil {
return nil
}
c := make([]T, len(orig))
for i, v := range orig {
if copyable, ok := any(v).(Copier[T]); ok {
c[i] = copyable.DeepCopy()
} else {
c[i] = v
}
}
2022-10-02 05:45:27 +00:00
return c
}
func Map[K comparable, V any](orig map[K]V) map[K]V {
2022-10-02 05:45:27 +00:00
if orig == nil {
return nil
}
c := make(map[K]V, len(orig))
for k, v := range orig {
if copyable, ok := any(v).(Copier[V]); ok {
c[k] = copyable.DeepCopy()
} else {
c[k] = v
}
2022-10-02 05:45:27 +00:00
}
return c
}