diff --git a/structs/structs.go b/structs/structs.go index fb09db0ce..e5cf212aa 100644 --- a/structs/structs.go +++ b/structs/structs.go @@ -5,3 +5,13 @@ package structs // func MapStruct(srcSt, dstSt any) { // // TODO // } + +// IsExported field name on struct +func IsExported(fieldName string) bool { + return fieldName[0] >= 'A' && fieldName[0] <= 'Z' +} + +// IsUnexported field name on struct +func IsUnexported(fieldName string) bool { + return !IsExported(fieldName) +} diff --git a/structs/structs_test.go b/structs/structs_test.go index 8eda595b4..cb351c4f2 100644 --- a/structs/structs_test.go +++ b/structs/structs_test.go @@ -1 +1,25 @@ package structs_test + +import ( + "testing" + + "github.com/gookit/goutil/structs" + "github.com/gookit/goutil/testutil/assert" +) + +func TestIsExported(t *testing.T) { + assert.True(t, structs.IsExported("Name")) + assert.True(t, structs.IsExported("Abc12")) + assert.True(t, structs.IsExported("A")) + assert.False(t, structs.IsExported("name")) + assert.False(t, structs.IsExported("_name")) + assert.False(t, structs.IsExported("abc12")) + assert.False(t, structs.IsExported("123abcd")) + + assert.False(t, structs.IsUnexported("Name")) + assert.False(t, structs.IsUnexported("Abc12")) + assert.True(t, structs.IsUnexported("name")) + assert.True(t, structs.IsUnexported("_name")) + assert.True(t, structs.IsUnexported("abc12")) + assert.True(t, structs.IsUnexported("123abcd")) +}