From 8cf194fe59fbb34f5dc4bcf3b1a97f271bd83c59 Mon Sep 17 00:00:00 2001 From: Onur Cinar Date: Tue, 13 Jun 2023 20:39:26 -0700 Subject: [PATCH] Check required is added. (#4) --- .github/workflows/go.yml | 2 +- check_required.go | 19 +++++++ check_required_test.go | 104 +++++++++++++++++++++++++++++++++++++++ checker.go | 12 +++++ 4 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 check_required.go create mode 100644 check_required_test.go diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index c7a86ac..0204827 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -19,7 +19,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v3 with: - go-version: 1.20 + go-version: 1.20.5 - name: Go vet run: go vet ./... diff --git a/check_required.go b/check_required.go new file mode 100644 index 0000000..9de4f7d --- /dev/null +++ b/check_required.go @@ -0,0 +1,19 @@ +package checker + +import "reflect" + +const ResultRequired Result = "REQUIRED" + +func checkRequired(value reflect.Value) Result { + if value.IsZero() { + return ResultRequired + } + + k := value.Kind() + + if (k == reflect.Array || k == reflect.Map || k == reflect.Slice) && value.Len() == 0 { + return ResultRequired + } + + return ResultValid +} diff --git a/check_required_test.go b/check_required_test.go new file mode 100644 index 0000000..d7ddaa0 --- /dev/null +++ b/check_required_test.go @@ -0,0 +1,104 @@ +package checker + +import ( + "reflect" + "testing" +) + +func TestCheckRequiredValidString(t *testing.T) { + s := "valid" + + if checkRequired(reflect.ValueOf(s)) != ResultValid { + t.Fail() + } +} + +func TestCheckRequiredUninitializedString(t *testing.T) { + var s string + + if checkRequired(reflect.ValueOf(s)) != ResultRequired { + t.Fail() + } +} + +func TestCheckRequiredEmptyString(t *testing.T) { + s := "" + + if checkRequired(reflect.ValueOf(s)) != ResultRequired { + t.Fail() + } +} + +func TestCheckRequiredUninitializedNumber(t *testing.T) { + var n int + + if checkRequired(reflect.ValueOf(n)) != ResultRequired { + t.Fail() + } +} + +func TestCheckRequiredValidSlice(t *testing.T) { + s := []int{1} + + if checkRequired(reflect.ValueOf(s)) != ResultValid { + t.Fail() + } +} + +func TestCheckRequiredUninitializedSlice(t *testing.T) { + var s []int + + if checkRequired(reflect.ValueOf(s)) != ResultRequired { + t.Fail() + } +} + +func TestCheckRequiredEmptySlice(t *testing.T) { + s := make([]int, 0) + + if checkRequired(reflect.ValueOf(s)) != ResultRequired { + t.Fail() + } +} + +func TestCheckRequiredValidArray(t *testing.T) { + s := [1]int{1} + + if checkRequired(reflect.ValueOf(s)) != ResultValid { + t.Fail() + } +} + +func TestCheckRequiredEmptyArray(t *testing.T) { + s := [1]int{} + + if checkRequired(reflect.ValueOf(s)) != ResultRequired { + t.Fail() + } +} + +func TestCheckRequiredValidMap(t *testing.T) { + m := map[string]string{ + "a": "b", + } + + if checkRequired(reflect.ValueOf(m)) != ResultValid { + t.Fail() + } +} + +func TestCheckRequiredUninitializedMap(t *testing.T) { + var m map[string]string + + if checkRequired(reflect.ValueOf(m)) != ResultRequired { + t.Fail() + } +} + +func TestCheckRequiredEmptyMap(t *testing.T) { + m := map[string]string{} + + if checkRequired(reflect.ValueOf(m)) != ResultRequired { + t.Fail() + } +} diff --git a/checker.go b/checker.go index aafb226..bada92d 100644 --- a/checker.go +++ b/checker.go @@ -1,2 +1,14 @@ // Package checker is a Go library for validating user input through struct tags. package checker + +// Result is a unique textual identifier for the mistake. +type Result string + +// ResultValid result indicates that the user input is valid. +const ResultValid Result = "VALID" + +// Mistake provides the field where the mistake was made and a result for the mistake. +type Mistake struct { + Field string + Result Result +}