Documentation
¶
Index ¶
- Constants
- Variables
- func AddItem(itemType reflect.Type, item interface{}) error
- func GetItem[T any](d Discovery, itemType reflect.Type) (T, error)
- func GetRequiredItem[T any](d Discovery, itemType reflect.Type) T
- func InitializeDiscovery() error
- func Resolve[T any](d Discovery, mapping ResolverMapping) T
- type AOItemResolver
- type AOResolver
- type AOResolverMapping
- type BaseItemResolver
- func (r *BaseItemResolver) AddAOMapping(mapping AOResolverMapping)
- func (r *BaseItemResolver) AddAOMappings(mappings []AOResolverMapping)
- func (r *BaseItemResolver) AddMapping(mapping ResolverMapping)
- func (r *BaseItemResolver) AddMappings(mappings []ResolverMapping)
- func (r *BaseItemResolver) AddMappingsVar(mappings ...ResolverMapping)
- func (r *BaseItemResolver) GetAOMappings(itemType reflect.Type) (result []AOResolverMapping, ok bool)
- func (r *BaseItemResolver) GetMapping(itemType reflect.Type) (ResolverMapping, bool)
- func (r *BaseItemResolver) ResolveItem(d Discovery, itemType reflect.Type) (interface{}, error)
- func (r *BaseItemResolver) ResolveMapping(d Discovery, mapping ResolverMapping) (interface{}, error)
- func (r *BaseItemResolver) WrapAO(d Discovery, itemType reflect.Type, item interface{}) (result interface{}, err error)
- type Discovery
- func CreateSuperDiscovery(resolver ItemResolver) Discovery
- func GetDefaultDiscovery() Discovery
- func GetDefaultDiscoveryOrPanic() Discovery
- func GetOrCreateDefaultDiscovery(resolver ItemResolver) Discovery
- func NewDiscovery(resolver ItemResolver) Discovery
- func NewDiscoveryWithBase(baseD Discovery, resolver ItemResolver) Discovery
- func SetDefaultDiscovery(d Discovery) Discovery
- type ItemDiscovery
- func (d *ItemDiscovery) AddItem(itemType reflect.Type, item interface{}) error
- func (d *ItemDiscovery) GetItem(itemType reflect.Type) (interface{}, error)
- func (d *ItemDiscovery) GetItemWithOptions(itemType reflect.Type, options ResolveOptions) (interface{}, error)
- func (d *ItemDiscovery) GetRequiredItem(itemType reflect.Type) interface{}
- func (d *ItemDiscovery) GetRequiredItemWithOptions(itemType reflect.Type, options ResolveOptions) (interface{}, error)
- func (d *ItemDiscovery) GetResolver() ItemResolver
- func (d *ItemDiscovery) HasItem(itemType reflect.Type) bool
- func (d *ItemDiscovery) RemoveItem(itemType reflect.Type)
- func (d *ItemDiscovery) WrapAO(itemType reflect.Type, item interface{}) (interface{}, error)
- type ItemDiscoveryManagement
- type ItemResolver
- type ResolveOptions
- type Resolver
- type ResolverMapping
Constants ¶
const ( // ErrItemNotFoundID represents a service that cannot be found because // there is no mapping, or existing service item ErrItemNotFoundID = "discovery/item/notfound" // ErrItemNotResolvedID represents a service that has a mapping but // failed to resolve ErrItemNotResolvedID = "discovery/item/resolve/failed" // ErrItemNotItemTypeID represent an item that does not implement // the specified item type ErrItemNotItemTypeID = "discovery/item/must-be-item-type" // ErrCircularResolveDependencyID indicates a circular dependency between // items ErrCircularResolveDependencyID = "discovery/item/resolve/circular" )
Variables ¶
var ( ErrItemNotFound = errors.NewErrorTemplate( ErrItemNotFoundID, "item '%s' not found", http.StatusInternalServerError, false) ErrItemNotResolved = errors.NewErrorTemplate( ErrItemNotResolvedID, "item '%s' not resolved: %s", http.StatusInternalServerError, false) ErrItemNotItemType = errors.NewErrorTemplate( ErrItemNotItemTypeID, "item does not implement type %s", http.StatusInternalServerError, false) ErrCircularResolveDependency = errors.NewErrorTemplate( ErrCircularResolveDependencyID, "item type %s has a circular resolve dependency", http.StatusInternalServerError, false) )
var ItemDiscoveryManagementType = reflect.TypeOf((*ItemDiscoveryManagement)(nil)).Elem()
ItemDiscoveryManagementType is the reflected type of ItemDiscoveryManagement
var ItemResolverType = reflect.TypeOf((*ItemResolver)(nil)).Elem()
ItemResolverType is the reflected type of ItemResolver
Functions ¶
func AddItem ¶
AddItem is a helper method for adding an item to default discovery
Notes If default discovery has not been assigned, it is created With a default resolver.
func InitializeDiscovery ¶
func InitializeDiscovery() error
func Resolve ¶
func Resolve[T any](d Discovery, mapping ResolverMapping) T
Types ¶
type AOItemResolver ¶
type AOItemResolver interface { GetAOMappings(itemType reflect.Type) ([]AOResolverMapping, bool) AddAOMapping(mapping AOResolverMapping) AddAOMappings(mapping []AOResolverMapping) WrapAO(d Discovery, itemType reflect.Type, item interface{}) (interface{}, error) }
AOItemResolver provides the ability to add and retrieve AO mappings
type AOResolver ¶
AOResolver is the signature for a function that resolves a wrapper for another item
type AOResolverMapping ¶
type AOResolverMapping struct { Type reflect.Type Creator AOResolver }
AOResolverMapping binds an item wrapper (AO) with a function that can instance it
type BaseItemResolver ¶
type BaseItemResolver struct {
// contains filtered or unexported fields
}
BaseItemResolver provides item creation mappings
func NewBaseItemResolver ¶
func NewBaseItemResolver() *BaseItemResolver
NewBaseItemResolver creates an instance of BaseItemResolver
func (*BaseItemResolver) AddAOMapping ¶
func (r *BaseItemResolver) AddAOMapping(mapping AOResolverMapping)
AddAOMapping adds an AOMapping to the AOItemResolver
func (*BaseItemResolver) AddAOMappings ¶
func (r *BaseItemResolver) AddAOMappings(mappings []AOResolverMapping)
AddAOMappings adds a collection of AOMapping to the AOItemResolver
func (*BaseItemResolver) AddMapping ¶
func (r *BaseItemResolver) AddMapping(mapping ResolverMapping)
AddMapping adds a ResolverMapping to the BaseItemResolver
func (*BaseItemResolver) AddMappings ¶
func (r *BaseItemResolver) AddMappings(mappings []ResolverMapping)
AddMappings adds an [] of ResolverMapping's to the BaseItemResolver
func (*BaseItemResolver) AddMappingsVar ¶
func (r *BaseItemResolver) AddMappingsVar(mappings ...ResolverMapping)
AddMappingsVar adds a variadic list of ResolverMapping's to the BaseItemResolver
func (*BaseItemResolver) GetAOMappings ¶
func (r *BaseItemResolver) GetAOMappings(itemType reflect.Type) (result []AOResolverMapping, ok bool)
GetAOMappings returns an []AOMapping for itemType, if available
func (*BaseItemResolver) GetMapping ¶
func (r *BaseItemResolver) GetMapping(itemType reflect.Type) (ResolverMapping, bool)
GetMapping returns a ResolverMapping for itemType, if available
func (*BaseItemResolver) ResolveItem ¶
func (r *BaseItemResolver) ResolveItem(d Discovery, itemType reflect.Type) (interface{}, error)
ResolveItem returns an instance of itemType via its creator
func (*BaseItemResolver) ResolveMapping ¶
func (r *BaseItemResolver) ResolveMapping(d Discovery, mapping ResolverMapping) (interface{}, error)
type Discovery ¶
type Discovery interface { HasItem(itemType reflect.Type) bool GetItem(itemType reflect.Type) (interface{}, error) GetRequiredItem(itemType reflect.Type) interface{} GetItemWithOptions(itemType reflect.Type, options ResolveOptions) (interface{}, error) GetRequiredItemWithOptions(itemType reflect.Type, options ResolveOptions) (interface{}, error) // WrapAO can be used to resolve an AO item wrapper when an item is NOT // automatically wrapped because the item is created directly and NOT via discovery WrapAO(itemType reflect.Type, item interface{}) (interface{}, error) }
Discovery is the primary interface for finding/acquiring items via discovery
func CreateSuperDiscovery ¶
func CreateSuperDiscovery(resolver ItemResolver) Discovery
CreateSuperDiscovery creates a new discovery that "super classes" the default discovery
Params resolver - optional ItemResolver
func GetDefaultDiscovery ¶
func GetDefaultDiscovery() Discovery
GetDefaultDiscovery returns the value for the default discovery
func GetDefaultDiscoveryOrPanic ¶
func GetDefaultDiscoveryOrPanic() Discovery
GetDefaultDiscoveryOrPanic returns the value for the default discovery and panics if the default discovery has not been set
func GetOrCreateDefaultDiscovery ¶
func GetOrCreateDefaultDiscovery(resolver ItemResolver) Discovery
GetOrCreateDefaultDiscovery gets the current default discovery, creating it if it has not been set
Params resolver - optional ItemResolver Notes This code avoids race conditions that could occur if two entities attempt to create the default discover concurrently
func NewDiscovery ¶
func NewDiscovery(resolver ItemResolver) Discovery
NewDiscovery creates a new ItemDiscovery typed as Discovery
Params resolver - optional ItemResolver Notes resolver is the item resolver used by discovery. if not specified, an instance of BaseItemResolver is created for use This constructor is more technically correct then NewItemDiscovery which returns *ItemDiscovery
func NewDiscoveryWithBase ¶
func NewDiscoveryWithBase(baseD Discovery, resolver ItemResolver) Discovery
NewDiscoveryWithBase creates a new ItemDiscovery typed as Discovery with a base Discovery
Params resolver - optional ItemResolver Notes resolver is the item resolver used by discovery. if not specified, an instance of BaseItemResolver is created for use This constructor is more technically correct then NewItemDiscoveryWithBase which returns *ItemDiscovery
func SetDefaultDiscovery ¶
SetDefaultDiscovery stores the default discovery
type ItemDiscovery ¶
type ItemDiscovery struct {
// contains filtered or unexported fields
}
ItemDiscovery is the default implementation of Discovery and NamedDiscovery
func NewItemDiscovery ¶
func NewItemDiscovery(resolver ItemResolver) *ItemDiscovery
NewItemDiscovery creates and instance of ItemDiscovery
Params resolver - optional ItemResolver Notes resolver is the item resolver used by discovery. if not specified, an instance of BaseItemResolver is created for use This constructor is considered *deprecated*. Prefer NewDiscovery
func NewItemDiscoveryWithBase ¶
func NewItemDiscoveryWithBase(baseD Discovery, resolver ItemResolver) *ItemDiscovery
NewItemDiscoveryWithBase creates and instance of ItemDiscovery with a base Discovery
Notes resolver is the item resolver used by discovery. if not specified, an instance of BaseItemResolver is created for use This constructor is considered *deprecated*. Prefer NewDiscoveryWithBase
func (*ItemDiscovery) AddItem ¶
func (d *ItemDiscovery) AddItem(itemType reflect.Type, item interface{}) error
AddItem adds an item for discovery by type
func (*ItemDiscovery) GetItem ¶
func (d *ItemDiscovery) GetItem(itemType reflect.Type) (interface{}, error)
func (*ItemDiscovery) GetItemWithOptions ¶
func (d *ItemDiscovery) GetItemWithOptions(itemType reflect.Type, options ResolveOptions) (interface{}, error)
func (*ItemDiscovery) GetRequiredItem ¶
func (d *ItemDiscovery) GetRequiredItem(itemType reflect.Type) interface{}
func (*ItemDiscovery) GetRequiredItemWithOptions ¶
func (d *ItemDiscovery) GetRequiredItemWithOptions(itemType reflect.Type, options ResolveOptions) (interface{}, error)
func (*ItemDiscovery) GetResolver ¶
func (d *ItemDiscovery) GetResolver() ItemResolver
GetResolver returns the resolver being used for Discovery
func (*ItemDiscovery) RemoveItem ¶
func (d *ItemDiscovery) RemoveItem(itemType reflect.Type)
RemoveItem removes an item from discovery by type
type ItemDiscoveryManagement ¶
type ItemDiscoveryManagement interface { GetResolver() ItemResolver AddItem(itemType reflect.Type, item interface{}) error RemoveItem(itemType reflect.Type) }
ItemDiscoveryManagement provides the ability to add and remove discovery items
type ItemResolver ¶
type ItemResolver interface { ResolveItem(d Discovery, itemType reflect.Type) (interface{}, error) ResolveMapping(d Discovery, mapping ResolverMapping) (interface{}, error) AddMapping(mapping ResolverMapping) AddMappingsVar(mappings ...ResolverMapping) AddMappings(mapping []ResolverMapping) }
ItemResolver is used during discovery to attempt to resolve an item that
has not been previously resolved, or when the InstanceItem option is specified
func GetDefaultResolver ¶
func GetDefaultResolver() ItemResolver
GetDefaultResolver returns the resolver for default discovery
type ResolveOptions ¶
type ResolveOptions int
ResolveOptions represents flag values used by Discovery
const ( // RoNone represents no resolve options RoNone ResolveOptions = 0 // RoDontResolve is used to indicate that the item should not be automatically resolved RoDontResolve ResolveOptions = 1 << 0 // RoInstanceItem is used to indicate that the item should be created for exclusive // use by the caller, and not shared with other callers RoInstanceItem ResolveOptions = 1 << 1 // RoUseAOItem is used to indicate that a mapped AO implementation should be used to wrap // the requested item (if and only if the call results in a resolution) RoUseAOItem ResolveOptions = 1 << 2 )
type ResolverMapping ¶
ResolverMapping binds an item type with a function tha can instance it