adapters API

adapters

package

API reference for the adapters package.

S
struct

Registry

Registry provides a generic, thread-safe registry for pluggable adapters.

pkg/adapters/registry.go:14-18
type Registry struct

Example

r := adapters.NewRegistry[Store]()
r.Register("memory", NewMemoryStore())
r.SetDefault("memory")

Fields

Name Type Description
adapters map[string]T
defaultName string
mu sync.RWMutex
F
function

NewRegistry

NewRegistry creates an empty adapter registry.

Returns

*Registry[T]
pkg/adapters/registry.go:21-25
func NewRegistry[T any]() *Registry[T]

{
	return &Registry[T]{
		adapters: make(map[string]T),
	}
}
S
struct

mockTransport

pkg/adapters/registry_test.go:7-9
type mockTransport struct

Fields

Name Type Description
Name string
F
function

TestRegistry_RegisterAndGet

Parameters

pkg/adapters/registry_test.go:11-23
func TestRegistry_RegisterAndGet(t *testing.T)

{
	r := NewRegistry[*mockTransport]()
	tr := &mockTransport{Name: "http"}
	r.Register("http", tr)

	got, ok := r.Get("http")
	if !ok {
		t.Fatal("expected to find 'http'")
	}
	if got.Name != "http" {
		t.Errorf("got %q, want %q", got.Name, "http")
	}
}
F
function

TestRegistry_Has

Parameters

pkg/adapters/registry_test.go:25-35
func TestRegistry_Has(t *testing.T)

{
	r := NewRegistry[string]()
	r.Register("exists", "value")

	if !r.Has("exists") {
		t.Error("Has should return true")
	}
	if r.Has("missing") {
		t.Error("Has should return false for missing")
	}
}
F
function

TestRegistry_Default

Parameters

pkg/adapters/registry_test.go:37-47
func TestRegistry_Default(t *testing.T)

{
	r := NewRegistry[string]()
	r.Register("http", "HTTP Transport")
	r.Register("grpc", "gRPC Transport")
	r.SetDefault("http")

	got := r.Default()
	if got != "HTTP Transport" {
		t.Errorf("got %q, want %q", got, "HTTP Transport")
	}
}
F
function

TestRegistry_DefaultOr

Parameters

pkg/adapters/registry_test.go:49-64
func TestRegistry_DefaultOr(t *testing.T)

{
	r := NewRegistry[string]()

	got := r.DefaultOr("fallback")
	if got != "fallback" {
		t.Errorf("got %q, want %q", got, "fallback")
	}

	r.Register("main", "Main")
	r.SetDefault("main")

	got = r.DefaultOr("fallback")
	if got != "Main" {
		t.Errorf("got %q, want %q", got, "Main")
	}
}
F
function

TestRegistry_Default_Panic

Parameters

pkg/adapters/registry_test.go:66-76
func TestRegistry_Default_Panic(t *testing.T)

{
	r := NewRegistry[string]()

	defer func() {
		if recover() == nil {
			t.Error("Default should panic when no default set")
		}
	}()

	r.Default()
}
F
function

TestRegistry_Names

Parameters

pkg/adapters/registry_test.go:78-88
func TestRegistry_Names(t *testing.T)

{
	r := NewRegistry[int]()
	r.Register("a", 1)
	r.Register("b", 2)
	r.Register("c", 3)

	names := r.Names()
	if len(names) != 3 {
		t.Errorf("got %d names, want 3", len(names))
	}
}
F
function

TestRegistry_Remove

Parameters

pkg/adapters/registry_test.go:90-107
func TestRegistry_Remove(t *testing.T)

{
	r := NewRegistry[string]()
	r.Register("key", "value")
	r.SetDefault("key")

	r.Remove("key")

	if r.Has("key") {
		t.Error("key should be removed")
	}

	defer func() {
		if recover() == nil {
			t.Error("Default should panic after removing default")
		}
	}()
	r.Default()
}
F
function

TestRegistry_Clear

Parameters

pkg/adapters/registry_test.go:109-120
func TestRegistry_Clear(t *testing.T)

{
	r := NewRegistry[int]()
	r.Register("a", 1)
	r.Register("b", 2)
	r.SetDefault("a")

	r.Clear()

	if len(r.Names()) != 0 {
		t.Error("Clear should remove all adapters")
	}
}
F
function

TestRegistry_MustGet_Panic

Parameters

pkg/adapters/registry_test.go:122-132
func TestRegistry_MustGet_Panic(t *testing.T)

{
	r := NewRegistry[string]()

	defer func() {
		if recover() == nil {
			t.Error("MustGet should panic for missing key")
		}
	}()

	r.MustGet("missing")
}