typeregistry

package module
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Nov 12, 2020 License: MIT Imports: 4 Imported by: 1

README

typeregistry

Package typeregistry implements a simple type registry that maps go types to, optionally, custom names.

New instances of registered types are later instantiated using reflect by type name.

Example

// Registering a type by name.

func main() {
	type Test struct {
		Name string
	}

	reg := New()
	mytype := &Test{}

	reg.RegisterNamed("foo", mytype)

	intf, err := reg.GetInterface("foo")
	if err != nil {
		panic("fail")
	}
	mynewtype, ok := intf.(*Test)
	if ok {
		mynewtype.Name = "bar"
	}
}

Full API consists of following:

GetLongTypeName(i interface{}) string
Register(v interface{}) error
RegisterNamed(name string, v interface{}) error
Unregister(name string) error
GetType(name string) (reflect.Type, error)
GetValue(name string) (reflect.Value, error)
GetInterface(name string) (interface{}, error)
RegisteredNames() []string

License

See included LICENSE file.

Documentation

Overview

Package typeregistry implements a simple type registry.

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrTypeRegistry is the base typeregistry error.
	ErrTypeRegistry = errorex.New("typeregistry")
	// ErrNotFound is returned when a type was not found in the registry.
	ErrNotFound = ErrTypeRegistry.WrapFormat("entry '%s' not found")
	// ErrDuplicateEntry is returned when registering a type that is already
	// registered.
	ErrDuplicateEntry = ErrTypeRegistry.WrapFormat("entry '%s' already exists")
	// ErrInvalidParam is returned when an invalid parameter was passed to
	// a registration method.
	ErrInvalidParam = ErrTypeRegistry.Wrap("invalid parameter")
)

Functions

func GetLongTypeName added in v0.0.3

func GetLongTypeName(i interface{}) (r string)

GetLongTypeName generates a long Type name from a Go value contained in i thet is constructed of pointer dereferene token for each pointer level of i, package path if the type was not predeclared or is an alias and the type name as returned by reflect.Value.Type().String(). For example: ***Registry => "***github.com/vedranvuk/typeregistry/typeregistry.Registry".

It is used to generate a type name for values registered by this package.

Types

type Registry

type Registry struct {
	// contains filtered or unexported fields
}

Registry is a simple Go type registry. Safe for concurrent use, no panic.

Types can be registered under auto-generated or custom type names then retrieved under those names as a reflect Type, Value or an Interface.

func New

func New() *Registry

New returns a new *Registry instance.

func (*Registry) GetInterface

func (r *Registry) GetInterface(name string) (interface{}, error)

GetInterface returns an interface to a new reflect.Value of reflect.Type registered under specified name or an error.

func (*Registry) GetType

func (r *Registry) GetType(name string) (reflect.Type, error)

GetType returns a registered reflect.Type specified by name or an error.

func (*Registry) GetValue

func (r *Registry) GetValue(name string) (reflect.Value, error)

GetValue returns a new reflect.Value of reflect.Type registered under specified name or an error.

func (*Registry) Register

func (r *Registry) Register(v interface{}) error

Register registers a reflect.Type of value specified by v under a name generated by GetLongTypeName or returns an error.

func (*Registry) RegisterNamed

func (r *Registry) RegisterNamed(name string, v interface{}) error

RegisterNamed registers a reflect.Type of value specified by v under specified name, which cannot be empty, or returns an error.

func (*Registry) RegisteredNames

func (r *Registry) RegisteredNames() []string

RegisteredNames returns a slice of registered type names.

func (*Registry) Unregister

func (r *Registry) Unregister(name string) error

Unregister unregisters a reflect.Type registered under specified name or returns an error.

Jump to

Keyboard shortcuts

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