typeregistry

package module
v0.0.4 Latest Latest
Warning

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

Go to latest
Published: Oct 27, 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:

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 gets the long Type name of a Go value contained in i. If i is a pointer it dereferences it prefixing resulting string with a "*" for each level until it reaches concrete type for which it appends the type path constructed as "PkgPath/TypeName". e.g. "***github.com/vedranvuk/typeregistry/typeregistry.Registry".

GetLongTypeName is used by Register function to generate the type name. Name for retrieval of types registered by Register should be generated by this function.

Types

type Registry

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

Registry is a Go type registry.

func New

func New() *Registry

New creates 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 its' reflect.Type name 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 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