You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
1.1 KiB

  1. package gentools
  2. func ApplyUpdate[T any](dst *T, value *T) {
  3. if value != nil {
  4. *dst = *value
  5. }
  6. }
  7. func ApplyUpdatePtr[T any](dst **T, value *T) {
  8. if value != nil {
  9. *dst = ShallowCopy(value)
  10. }
  11. }
  12. func ApplyUpdateSlice[T any](dst *[]T, value []T) {
  13. if value != nil {
  14. *dst = append([]T{}, value...)
  15. }
  16. }
  17. func ApplyUpdateNonZero[T comparable](dst *T, value *T) {
  18. var zero T
  19. if value != nil && *value != zero {
  20. *dst = *value
  21. }
  22. }
  23. func ApplyUpdateNilZero[T comparable](dst **T, value *T) {
  24. if value != nil {
  25. var zero T
  26. if *value == zero {
  27. *dst = nil
  28. } else {
  29. valueCopy := *value
  30. *dst = &valueCopy
  31. }
  32. }
  33. }
  34. func ApplyMapUpdate[K comparable, V any](dst *map[K]V, src map[K]*V) {
  35. if *dst == nil {
  36. dst = &map[K]V{}
  37. }
  38. for key, value := range src {
  39. if value != nil {
  40. (*dst)[key] = *value
  41. } else {
  42. delete(*dst, key)
  43. }
  44. }
  45. }
  46. func ApplyUpdateMapNilZero[K comparable, V comparable](dst *map[K]V, src map[K]V) {
  47. var zero V
  48. if *dst == nil {
  49. dst = &map[K]V{}
  50. }
  51. for key, value := range src {
  52. if value != zero {
  53. (*dst)[key] = value
  54. } else {
  55. delete(*dst, key)
  56. }
  57. }
  58. }