add mapper package
Some checks are pending
Lint / golangci-lint (push) Waiting to run
Declarative Tests / test (push) Waiting to run
Declarative Tests / build-fedora (push) Waiting to run
Declarative Tests / build-ubuntu-focal (push) Waiting to run

This commit is contained in:
Matthew Rich 2024-08-17 18:14:54 -07:00
parent 06f3247b08
commit bf79e97462
2 changed files with 97 additions and 0 deletions

44
internal/mapper/mapper.go Normal file
View File

@ -0,0 +1,44 @@
// Copyright 2024 Matthew Rich <matthewrich.conf@gmail.com>. All rights reserved.
package mapper
type Store[Key comparable, Value any] map[Key]Value
func (m Store[Key, Value]) Get(key Key) (Value, bool) {
v, ok := m[key]
return v, ok
}
func (m Store[Key, Value]) Has(key Key) (ok bool) {
_, ok = m[key]
return
}
func (m Store[Key, Value]) Set(key Key, value Value) {
m[key] = value
}
type Mapper interface {
Get(key string) (any, bool)
Has(key string) (bool)
Set(key string, value any)
}
type Getter[Key comparable, Value comparable] interface {
Get(key Key) (Value, bool)
Has(key Key) (bool)
}
type Map[Key comparable, Value comparable] interface {
Get(key Key) (Value, bool)
Has(key Key) (bool)
Set(key Key, value Value)
}
func New[Key comparable, Value comparable]() Store[Key, Value] {
return make(Store[Key, Value])
}
func NewString[Value comparable]() Store[string, Value] {
return make(Store[string, Value])
}

View File

@ -0,0 +1,53 @@
// Copyright 2024 Matthew Rich <matthewrich.conf@gmail.com>. All rights reserved.
package mapper
import (
"github.com/stretchr/testify/assert"
"testing"
)
func TestNewMapper(t *testing.T) {
testMapper := New[string, int]()
assert.NotNil(t, testMapper)
}
func TestMapperGet(t *testing.T) {
testMapper := New[string, int]()
assert.NotNil(t, testMapper)
testMapper["foo"] = 3
v, exists := testMapper.Get("foo")
assert.True(t, exists)
assert.Equal(t, 3, v)
}
func TestMapperInterface(t *testing.T) {
var testInterface Map[string, int]
testMapper := New[string, int]()
assert.NotNil(t, testMapper)
testMapper["foo"] = 3
testInterface = testMapper
v, exists := testInterface.Get("foo")
assert.True(t, exists)
assert.Equal(t, 3, v)
}
func TestMapperMissing(t *testing.T) {
testMapper := New[string, int]()
assert.NotNil(t, testMapper)
testMapper["foo"] = 3
_, exists := testMapper.Get("bar")
assert.False(t, exists)
}
func TestNewStringMapper(t *testing.T) {
testMapper := NewString[int]()
assert.NotNil(t, testMapper)
testMapper["bar"] = 10
v, exists := testMapper.Get("bar")
assert.True(t, exists)
assert.Equal(t, 10, v)
}