Compare commits

..

6 commits

Author SHA1 Message Date
25913bbf9f
Merge pull request #2 from wneessen/remove-redundant-get
Some checks failed
Codecov workflow / run (push) Failing after 3s
golangci-lint / lint (push) Failing after 3s
REUSE Compliance Check / test (push) Failing after 2s
Remove redundant Get() method
2024-09-01 21:17:50 +02:00
1150734ab0
Remove redundant Get() method
The Get() method was simply an alias for the Value() method and did not add any functionality. This simplification makes the code cleaner and reduces unnecessary duplication, improving maintainability.
2024-09-01 21:14:46 +02:00
b11f8257d8
Merge pull request #1 from wneessen/add_uint_tpes
Add uint types
2024-09-01 19:52:07 +02:00
89d0a3f00e
Add comprehensive nil type JSON unmarshal tests
This commit restructures and extends the JSON unmarshal tests for nil types to cover more data types, including boolean, byte slice, float32, float64, int, int64, string, and various unsigned integers. Each test ensures proper handling of value retrieval, nil checks, and reset behavior, enhancing the robustness of the unmarshal functionality.
2024-09-01 19:48:57 +02:00
63c28cbb9e
Add nullable unsigned integer types
Introduced new types: NilUInt, NilUInt8, NilUInt16, NilUInt32, and NilUInt64 to support nullable unsigned integers. This enhancement aligns with existing nullable types for better consistency and flexibility.
2024-09-01 19:24:45 +02:00
65168ce50b
Downgrade Go version to 1.18
This change updates the Go version in go.mod from 1.23 to 1.18. It ensures compatibility with the current development environment and resolves any version-specific issues.```
2024-09-01 19:23:55 +02:00
3 changed files with 343 additions and 81 deletions

2
go.mod
View file

@ -4,4 +4,4 @@
module github.com/wneessen/niljson module github.com/wneessen/niljson
go 1.23 go 1.18

View file

@ -19,11 +19,6 @@ func (v *Variable[T]) Value() T {
return v.value return v.value
} }
// Get is an alias method for Value()
func (v *Variable[T]) Get() T {
return v.Value()
}
// NotNil returns true when a Variable is not nil // NotNil returns true when a Variable is not nil
func (v *Variable[T]) NotNil() bool { func (v *Variable[T]) NotNil() bool {
return v.notNil return v.notNil
@ -53,6 +48,21 @@ type NilInt = Variable[int]
// NilInt64 is an int64 type that can be nil // NilInt64 is an int64 type that can be nil
type NilInt64 = Variable[int64] type NilInt64 = Variable[int64]
// NilUInt is an uint type that can be nil
type NilUInt = Variable[uint]
// NilUInt8 is an uint8 type that can be nil
type NilUInt8 = Variable[uint8]
// NilUInt16 is an uint16 type that can be nil
type NilUInt16 = Variable[uint16]
// NilUInt32 is an uint32 type that can be nil
type NilUInt32 = Variable[uint32]
// NilUInt64 is an uint64 type that can be nil
type NilUInt64 = Variable[uint64]
// NilFloat32 is an float32 type that can be nil // NilFloat32 is an float32 type that can be nil
type NilFloat32 = Variable[float32] type NilFloat32 = Variable[float32]

View file

@ -12,102 +12,354 @@ import (
"testing" "testing"
) )
func TestVariable_UnmarshalJSON(t *testing.T) { var jsonBytes = []byte(
jsonBytes := []byte(`{"string":"test", "int":123, "int64": 12345678901234, "float32": 1.6, `{
"float64":123.456, "nil":null, "bool":true, "bytes": "Ynl0ZXM="}`) "bool": true,
"bytes": "Ynl0ZXM=",
"float32": 1.6,
"float64": 123.456,
"int": 123,
"int64": 12345678901234,
"nilvalue": null,
"string": "test",
"uint": 1,
"uint8": 2,
"uint16": 3,
"uint32": 4,
"uint64": 5
}`)
func TestVariable_UnmarshalJSON_Boolean(t *testing.T) {
type JSONType struct { type JSONType struct {
Bool NilBoolean `json:"bool"` Value NilBoolean `json:"bool"`
ByteSlice NilByteSlice `json:"bytes"` NilValue NilBoolean `json:"nilvalue,omitempty"`
Float32 NilFloat32 `json:"float32"`
Float64 NilFloat64 `json:"float64"`
Int NilInt `json:"int"`
Int64 NilInt64 `json:"int64"`
NullString NilString `json:"nil"`
String NilString `json:"string"`
} }
var jt JSONType var jt JSONType
if err := json.Unmarshal(jsonBytes, &jt); err != nil { if err := json.Unmarshal(jsonBytes, &jt); err != nil {
t.Errorf("failed to unmarshal json with nil types: %v", err) t.Errorf("failed to unmarshal json with nil types: %s", err)
} }
if jt.Bool.IsNil() { if jt.Value.IsNil() {
t.Errorf("expected not nil bool") t.Errorf("expected value, but got nil")
} }
if jt.ByteSlice.IsNil() { if jt.NilValue.NotNil() {
t.Errorf("expected not nil byte slice") t.Errorf("expected nil, but got value")
} }
if jt.Float32.IsNil() { if !jt.Value.Value() {
t.Errorf("expected not nil float32") t.Errorf("expected value to be true, got %t", jt.Value.Value())
}
if jt.Float64.IsNil() {
t.Errorf("expected not nil float64")
}
if jt.Int.IsNil() {
t.Errorf("expected not nil int")
}
if jt.Int64.IsNil() {
t.Errorf("expected not nil int64")
}
if jt.String.IsNil() {
t.Errorf("expected not nil string")
}
if jt.NullString.NotNil() {
t.Errorf("expected nil string")
} }
if !jt.Bool.Value() { jt.Value.Reset()
t.Errorf("expected bool to be true, got %t", jt.Bool.Value()) if jt.Value.NotNil() {
t.Errorf("expected value to be nil after reset")
} }
if !bytes.Equal(jt.ByteSlice.Value(), []byte("bytes")) { }
t.Errorf("expected byte slice to be %q, got %q", "bytes", jt.ByteSlice.Value())
} func TestVariable_UnmarshalJSON_ByteSlice(t *testing.T) {
if jt.Float32.Value() != 1.6 { type JSONType struct {
t.Errorf("expected float64 to be 1.6, got %f", jt.Float32.Value()) Value NilByteSlice `json:"bytes"`
} NilValue NilBoolean `json:"nilvalue,omitempty"`
if jt.Float64.Value() != 123.456 {
t.Errorf("expected float64 to be 123.456, got %f", jt.Float64.Value())
}
if jt.Int.Value() != 123 {
t.Errorf("expected int to be 123, got %d", jt.Int.Value())
}
if jt.Int64.Value() != 12345678901234 {
t.Errorf("expected int to be 12345678901234, got %d", jt.Int64.Value())
}
if jt.String.Value() != "test" {
t.Errorf("expected string to be 'test', got %s", jt.String.Value())
} }
if jt.String.Get() != "test" { var jt JSONType
t.Errorf("expected string to be 'test', got %s", jt.String.Get()) if err := json.Unmarshal(jsonBytes, &jt); err != nil {
t.Errorf("failed to unmarshal json with nil types: %s", err)
} }
jt.Bool.Reset() if jt.Value.IsNil() {
if jt.Bool.NotNil() { t.Errorf("expected value, but got nil")
t.Errorf("expected bool to be nil after reset")
} }
jt.ByteSlice.Reset() if jt.NilValue.NotNil() {
if jt.ByteSlice.NotNil() { t.Errorf("expected nil, but got value")
t.Errorf("expected byte slice to be nil after reset")
} }
jt.Float32.Reset() if !bytes.Equal(jt.Value.Value(), []byte("bytes")) {
if jt.Float32.NotNil() { t.Errorf("expected value to be %q, got %q", "bytes", jt.Value.Value())
t.Errorf("expected float32 to be nil after reset")
} }
jt.Float64.Reset()
if jt.Float64.NotNil() { jt.Value.Reset()
t.Errorf("expected float64 to be nil after reset") if jt.Value.NotNil() {
t.Errorf("expected value to be nil after reset")
} }
jt.Int.Reset() }
if jt.Int.NotNil() {
t.Errorf("expected int to be nil after reset") func TestVariable_UnmarshalJSON_Float32(t *testing.T) {
type JSONType struct {
Value NilFloat32 `json:"float32"`
NilValue NilBoolean `json:"nilvalue,omitempty"`
} }
jt.Int64.Reset() expected := float32(1.6)
if jt.Int64.NotNil() {
t.Errorf("expected int64 to be nil after reset") var jt JSONType
if err := json.Unmarshal(jsonBytes, &jt); err != nil {
t.Errorf("failed to unmarshal json with nil types: %s", err)
} }
jt.String.Reset()
if jt.String.NotNil() { if jt.Value.IsNil() {
t.Errorf("expected string to be nil after reset") t.Errorf("expected value, but got nil")
}
if jt.NilValue.NotNil() {
t.Errorf("expected nil, but got value")
}
if jt.Value.Value() != expected {
t.Errorf("expected value to be %f, got %f", expected, jt.Value.Value())
}
jt.Value.Reset()
if jt.Value.NotNil() {
t.Errorf("expected value to be nil after reset")
}
}
func TestVariable_UnmarshalJSON_Float64(t *testing.T) {
type JSONType struct {
Value NilFloat64 `json:"float64"`
NilValue NilBoolean `json:"nilvalue,omitempty"`
}
expected := 123.456
var jt JSONType
if err := json.Unmarshal(jsonBytes, &jt); err != nil {
t.Errorf("failed to unmarshal json with nil types: %s", err)
}
if jt.Value.IsNil() {
t.Errorf("expected value, but got nil")
}
if jt.NilValue.NotNil() {
t.Errorf("expected nil, but got value")
}
if jt.Value.Value() != expected {
t.Errorf("expected value to be %f, got %f", expected, jt.Value.Value())
}
jt.Value.Reset()
if jt.Value.NotNil() {
t.Errorf("expected value to be nil after reset")
}
}
func TestVariable_UnmarshalJSON_Int(t *testing.T) {
type JSONType struct {
Value NilInt `json:"int"`
NilValue NilBoolean `json:"nilvalue,omitempty"`
}
expected := 123
var jt JSONType
if err := json.Unmarshal(jsonBytes, &jt); err != nil {
t.Errorf("failed to unmarshal json with nil types: %s", err)
}
if jt.Value.IsNil() {
t.Errorf("expected value, but got nil")
}
if jt.NilValue.NotNil() {
t.Errorf("expected nil, but got value")
}
if jt.Value.Value() != expected {
t.Errorf("expected value to be %d, got %d", expected, jt.Value.Value())
}
jt.Value.Reset()
if jt.Value.NotNil() {
t.Errorf("expected value to be nil after reset")
}
}
func TestVariable_UnmarshalJSON_Int64(t *testing.T) {
type JSONType struct {
Value NilInt64 `json:"int64"`
NilValue NilBoolean `json:"nilvalue,omitempty"`
}
expected := int64(12345678901234)
var jt JSONType
if err := json.Unmarshal(jsonBytes, &jt); err != nil {
t.Errorf("failed to unmarshal json with nil types: %s", err)
}
if jt.Value.IsNil() {
t.Errorf("expected value, but got nil")
}
if jt.NilValue.NotNil() {
t.Errorf("expected nil, but got value")
}
if jt.Value.Value() != expected {
t.Errorf("expected value to be %d, got %d", expected, jt.Value.Value())
}
jt.Value.Reset()
if jt.Value.NotNil() {
t.Errorf("expected value to be nil after reset")
}
}
func TestVariable_UnmarshalJSON_String(t *testing.T) {
type JSONType struct {
Value NilString `json:"string"`
NilValue NilBoolean `json:"nilvalue,omitempty"`
}
expected := "test"
var jt JSONType
if err := json.Unmarshal(jsonBytes, &jt); err != nil {
t.Errorf("failed to unmarshal json with nil types: %s", err)
}
if jt.Value.IsNil() {
t.Errorf("expected value, but got nil")
}
if jt.NilValue.NotNil() {
t.Errorf("expected nil, but got value")
}
if jt.Value.Value() != expected {
t.Errorf("expected value to be %s, got %s", expected, jt.Value.Value())
}
jt.Value.Reset()
if jt.Value.NotNil() {
t.Errorf("expected value to be nil after reset")
}
}
func TestVariable_UnmarshalJSON_UInt(t *testing.T) {
type JSONType struct {
Value NilUInt `json:"uint"`
NilValue NilBoolean `json:"nilvalue,omitempty"`
}
expected := uint(1)
var jt JSONType
if err := json.Unmarshal(jsonBytes, &jt); err != nil {
t.Errorf("failed to unmarshal json with nil types: %s", err)
}
if jt.Value.IsNil() {
t.Errorf("expected value, but got nil")
}
if jt.NilValue.NotNil() {
t.Errorf("expected nil, but got value")
}
if jt.Value.Value() != expected {
t.Errorf("expected value to be %d, got %d", expected, jt.Value.Value())
}
jt.Value.Reset()
if jt.Value.NotNil() {
t.Errorf("expected value to be nil after reset")
}
}
func TestVariable_UnmarshalJSON_UInt8(t *testing.T) {
type JSONType struct {
Value NilUInt8 `json:"uint8"`
NilValue NilBoolean `json:"nilvalue,omitempty"`
}
expected := uint8(2)
var jt JSONType
if err := json.Unmarshal(jsonBytes, &jt); err != nil {
t.Errorf("failed to unmarshal json with nil types: %s", err)
}
if jt.Value.IsNil() {
t.Errorf("expected value, but got nil")
}
if jt.NilValue.NotNil() {
t.Errorf("expected nil, but got value")
}
if jt.Value.Value() != expected {
t.Errorf("expected value to be %d, got %d", expected, jt.Value.Value())
}
jt.Value.Reset()
if jt.Value.NotNil() {
t.Errorf("expected value to be nil after reset")
}
}
func TestVariable_UnmarshalJSON_UInt16(t *testing.T) {
type JSONType struct {
Value NilUInt16 `json:"uint16"`
NilValue NilBoolean `json:"nilvalue,omitempty"`
}
expected := uint16(3)
var jt JSONType
if err := json.Unmarshal(jsonBytes, &jt); err != nil {
t.Errorf("failed to unmarshal json with nil types: %s", err)
}
if jt.Value.IsNil() {
t.Errorf("expected value, but got nil")
}
if jt.NilValue.NotNil() {
t.Errorf("expected nil, but got value")
}
if jt.Value.Value() != expected {
t.Errorf("expected value to be %d, got %d", expected, jt.Value.Value())
}
jt.Value.Reset()
if jt.Value.NotNil() {
t.Errorf("expected value to be nil after reset")
}
}
func TestVariable_UnmarshalJSON_UInt32(t *testing.T) {
type JSONType struct {
Value NilUInt32 `json:"uint32"`
NilValue NilBoolean `json:"nilvalue,omitempty"`
}
expected := uint32(4)
var jt JSONType
if err := json.Unmarshal(jsonBytes, &jt); err != nil {
t.Errorf("failed to unmarshal json with nil types: %s", err)
}
if jt.Value.IsNil() {
t.Errorf("expected value, but got nil")
}
if jt.NilValue.NotNil() {
t.Errorf("expected nil, but got value")
}
if jt.Value.Value() != expected {
t.Errorf("expected value to be %d, got %d", expected, jt.Value.Value())
}
jt.Value.Reset()
if jt.Value.NotNil() {
t.Errorf("expected value to be nil after reset")
}
}
func TestVariable_UnmarshalJSON_UInt64(t *testing.T) {
type JSONType struct {
Value NilUInt64 `json:"uint64"`
NilValue NilBoolean `json:"nilvalue,omitempty"`
}
expected := uint64(5)
var jt JSONType
if err := json.Unmarshal(jsonBytes, &jt); err != nil {
t.Errorf("failed to unmarshal json with nil types: %s", err)
}
if jt.Value.IsNil() {
t.Errorf("expected value, but got nil")
}
if jt.NilValue.NotNil() {
t.Errorf("expected nil, but got value")
}
if jt.Value.Value() != expected {
t.Errorf("expected value to be %d, got %d", expected, jt.Value.Value())
}
jt.Value.Reset()
if jt.Value.NotNil() {
t.Errorf("expected value to be nil after reset")
} }
} }