factory

package
v0.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 1, 2026 License: MIT Imports: 5 Imported by: 0

Documentation

Overview

Package factory is a generic self-registering registry: register values (or constructors that produce values) under string keys; look them up by key. Solves the "every package re-implements a registry" duplication across kit/predicates, kit/sampling, kit/milestones, kit/mcp, etc.

Two flavours via the same struct shape:

  • Registry[T] — instance registry: register a T, retrieve by key.
  • Builders[P,T] — constructor registry: register a func(P)(T,error), invoke by key with parameters.

Thread-safe writes; lock-free reads after Freeze() (the common init-once / lookup-many pattern).

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrDuplicate = errors.New("factory: key already registered")
	ErrFrozen    = errors.New("factory: registry is frozen")
	ErrNotFound  = errors.New("factory: key not found")
)

Errors surfaced by the registries.

Functions

This section is empty.

Types

type Builder

type Builder[P, T any] func(params P) (T, error)

Builder is a constructor function registered in Builders.

type Builders

type Builders[P, T any] struct {
	// contains filtered or unexported fields
}

Builders stores constructor functions keyed by string. Use when the produced value depends on caller-supplied parameters.

func NewBuilders

func NewBuilders[P, T any]() *Builders[P, T]

NewBuilders constructs an empty Builders registry.

func (*Builders[P, T]) Build

func (b *Builders[P, T]) Build(key Key, params P) (T, error)

Build invokes the registered builder for key with params.

func (*Builders[P, T]) Freeze

func (b *Builders[P, T]) Freeze()

Freeze disables further registration.

func (*Builders[P, T]) Has

func (b *Builders[P, T]) Has(key Key) bool

Has reports whether key is registered.

func (*Builders[P, T]) Keys

func (b *Builders[P, T]) Keys() []Key

Keys returns the registered keys, sorted ascending.

func (*Builders[P, T]) MustRegister

func (b *Builders[P, T]) MustRegister(key Key, fn Builder[P, T])

MustRegister panics on error.

func (*Builders[P, T]) Register

func (b *Builders[P, T]) Register(key Key, fn Builder[P, T]) error

Register stores fn under key.

type Key

type Key = string

Key is the identifier under which entries are stored.

type Registry

type Registry[T any] struct {
	// contains filtered or unexported fields
}

Registry stores values of T keyed by string.

func New

func New[T any]() *Registry[T]

New constructs an empty Registry.

func (*Registry[T]) Freeze

func (r *Registry[T]) Freeze()

Freeze disables further registration; subsequent Get calls bypass the lock entirely. Idempotent.

func (*Registry[T]) Get

func (r *Registry[T]) Get(key Key) (T, bool)

Get returns the value under key.

func (*Registry[T]) IsFrozen

func (r *Registry[T]) IsFrozen() bool

IsFrozen reports the freeze flag.

func (*Registry[T]) Keys

func (r *Registry[T]) Keys() []Key

Keys returns the registered keys, sorted ascending.

func (*Registry[T]) MustRegister

func (r *Registry[T]) MustRegister(key Key, value T)

MustRegister panics on error. For init-time use.

func (*Registry[T]) Register

func (r *Registry[T]) Register(key Key, value T) error

Register stores value under key. Returns ErrDuplicate if key is already present, ErrFrozen if the registry has been frozen.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL