add mapper package
This commit is contained in:
parent
06f3247b08
commit
bf79e97462
44
internal/mapper/mapper.go
Normal file
44
internal/mapper/mapper.go
Normal 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])
|
||||
}
|
53
internal/mapper/mapper_test.go
Normal file
53
internal/mapper/mapper_test.go
Normal 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)
|
||||
}
|
Loading…
Reference in New Issue
Block a user