From fbbd0398c9cd6e7ce3ab3f3e4bfc7d9d340be3cc Mon Sep 17 00:00:00 2001 From: Carlos A Saavedra Date: Fri, 1 Nov 2024 04:24:53 -0500 Subject: [PATCH] adding support for quick pointer conversion (#38) * adding support for quick pointer convertion * function comment update --- pointers.go | 22 ++++++++++++++++++++++ pointers_test.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 pointers.go create mode 100644 pointers_test.go diff --git a/pointers.go b/pointers.go new file mode 100644 index 0000000..dc5c7e2 --- /dev/null +++ b/pointers.go @@ -0,0 +1,22 @@ +package underscore + +// Convert values to pointers +// +// Instead of: +// v := "value" +// MyPointerVar = &v +// +// Or +// v1 := "value1" +// v2 := 100 +// +// obj := Obj{ +// Field1: &v, +// Field2: &v2, +// } +// +// Use: +// MyPointerVar = ToPointer("value") +func ToPointer[T any](in T) *T { + return &in +} diff --git a/pointers_test.go b/pointers_test.go new file mode 100644 index 0000000..be36bde --- /dev/null +++ b/pointers_test.go @@ -0,0 +1,45 @@ +package underscore_test + +import ( + "reflect" + "testing" + + u "github.com/rjNemo/underscore" + "github.com/stretchr/testify/assert" +) + +func TestPointers(t *testing.T) { + variable := 123 + var object struct{} + + cases := []struct { + value any + expected bool + }{ + { + value: u.ToPointer("myValue"), + expected: true, + }, + { + value: u.ToPointer(variable), + expected: true, + }, + { + value: &variable, + expected: true, + }, + { + value: nil, + expected: false, + }, + { + value: u.ToPointer(object), + expected: true, + }, + } + + for _, c := range cases { + got := (reflect.ValueOf(c.value).Kind() == reflect.Ptr) + assert.Equal(t, c.expected, got) + } +}