miruken

package module
v0.17.0 Latest Latest
Warning

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

Go to latest
Published: Jan 22, 2023 License: MIT Imports: 15 Imported by: 13

README

Miruken

Core Miruken

Documentation

Index

Constants

View Source
const (
	FilterStage              = 0
	FilterStageLogging       = 10
	FilterStateAuthorization = 30
	FilterStageValidation    = 50
)

Filter stage priorities.

View Source
const (
	FormatDirectionNone FormatDirection = 0
	FormatDirectionTo   FormatDirection = 1 << iota
	FormatDirectionFrom

	FormatRuleEquals     FormatRule = 0
	FormatRuleStartsWith FormatRule = 1 << iota
	FormatRuleEndsWith
	FormatRulePattern
)

Variables

View Source
var (
	ErrBiMissingCallback = errors.New("bivariant: missing callback argument")
	ErrBiMissingReturn   = errors.New("bivariant: must have a return value")
)
View Source
var (
	ErrConResultsExceeded = errors.New("contravariant: cannot accept more than 2 results")
	ErrConMissingCallback = errors.New("contravariant: missing callback argument")
)
View Source
var (
	ErrCovResultsExceeded = errors.New("covariant: cannot accept more than 2 results")
	ErrCovMissingReturn   = errors.New("covariant: must have a return value")
)
View Source
var (
	ErrInvalidFormat         = errors.New("invalid format tag")
	ErrEmptyFormatIdentifier = errors.New("empty format identifier")
)
View Source
var (
	Handled           = HandleResult{true, false, nil}
	HandledAndStop    = HandleResult{true, true, nil}
	NotHandled        = HandleResult{false, false, nil}
	NotHandledAndStop = HandleResult{false, true, nil}
)
View Source
var AncestorAxis = Axis(TraverseAncestor)
View Source
var ChildAxis = Axis(TraverseChild)
View Source
var DescendantAxis = Axis(TraverseDescendant)
View Source
var DescendantReverseAxis = Axis(TraverseDescendantReverse)
View Source
var (
	ErrNameMissing = errors.New("the Named constraint requires a non-empty `name:[name]` tag")
)
View Source
var RootAxis = Axis(TraverseRoot)
View Source
var SelfAxis = Axis(TraverseSelf)
View Source
var SelfOrAncestorAxis = Axis(TraverseSelfOrAncestor)
View Source
var SelfOrChildAxis = Axis(TraverseSelfOrChild)
View Source
var SelfOrDescendantAxis = Axis(TraverseSelfOrDescendant)
View Source
var SelfOrDescendantReverseAxis = Axis(TraverseSelfOrDescendant)
View Source
var SelfOrSiblingAxis = Axis(TraverseSelfOrSibling)
View Source
var SelfSiblingOrAncestorAxis = Axis(TraverseSelfSiblingOrAncestor)
View Source
var SiblingAxis = Axis(TraverseSibling)

Functions

func Batch added in v0.10.0

func Batch(
	handler Handler,
	configure func(Handler),
	tags ...any,
) *promise.Promise[[]any]

func BatchAsync added in v0.10.0

func BatchAsync[T any](
	handler Handler,
	configure func(Handler) *promise.Promise[T],
	tags ...any,
) *promise.Promise[[]any]

func BatchTag added in v0.10.0

func BatchTag[T any](
	handler Handler,
	configure func(Handler),
) *promise.Promise[[]any]

func BatchTagAsync added in v0.10.0

func BatchTagAsync[T any, E any](
	handler Handler,
	configure func(Handler) *promise.Promise[T],
) *promise.Promise[[]any]

func CoerceResult added in v0.10.0

func CoerceResult[T any](
	callback Callback,
	target *T,
) (t T, tp *promise.Promise[T], _ error)

func CoerceResults added in v0.10.0

func CoerceResults[T any](
	callback Callback,
	target *[]T,
) (t []T, tp *promise.Promise[[]T], _ error)

func CoerceSlice added in v0.11.0

func CoerceSlice(
	slice reflect.Value,
	elemTyp reflect.Type,
) (reflect.Value, bool)

CoerceSlice attempts to upcast the elements of a slice and return the newly promoted slice and true if successful. If elemType is nil, the most specific type will be inferred.

func Command added in v0.10.0

func Command(
	handler Handler,
	callback any,
	constraints ...any,
) (pv *promise.Promise[Void], err error)

Command invokes a callback with no results. returns an empty promise if execution is asynchronous.

func CommandAll added in v0.10.0

func CommandAll(
	handler Handler,
	callback any,
	constraints ...any,
) (pv *promise.Promise[Void], err error)

CommandAll invokes a callback on all with no results. returns an empty promise if execution is asynchronous.

func CompleteResult added in v0.10.0

func CompleteResult(
	callback Callback,
) (*promise.Promise[Void], error)

func CompleteResults added in v0.10.0

func CompleteResults(
	callback Callback,
) (*promise.Promise[Void], error)

func CopyIndirect

func CopyIndirect(src any, target any)

CopyIndirect copies the contents of src into the source pointer or reflect.Value.

func CopySliceIndirect

func CopySliceIndirect(src []any, target any)

CopySliceIndirect copies the contents of src slice into the source pointer or reflect.Value.

func Create

func Create[T any](
	handler Handler,
	constraints ...any,
) (T, *promise.Promise[T], error)

func CreateAll

func CreateAll[T any](
	handler Handler,
	constraints ...any,
) (t []T, tp *promise.Promise[[]T], err error)

func CreateKey added in v0.11.0

func CreateKey[T any](
	handler Handler,
	key any,
	constraints ...any,
) (t T, tp *promise.Promise[T], err error)

func DynNext

func DynNext(
	filter Filter,
	next Next,
	ctx HandleContext,
	provider FilterProvider,
) (out []any, po *promise.Promise[[]any], err error)

func Execute added in v0.10.0

func Execute[T any](
	handler Handler,
	callback any,
	constraints ...any,
) (t T, tp *promise.Promise[T], err error)

Execute executes a callback with results. returns the results or promise if execution is asynchronous.

func ExecuteAll added in v0.10.0

func ExecuteAll[T any](
	handler Handler,
	callback any,
	constraints ...any,
) (t []T, tp *promise.Promise[[]T], err error)

ExecuteAll executes a callback on all and collects the results. returns the results or promise if execution is asynchronous.

func GetBatch added in v0.10.0

func GetBatch[TB batching](handler Handler, tags ...any) TB

func GetOptions

func GetOptions(handler Handler, target any) bool

func IsNil

func IsNil(val any) bool

IsNil determine if the val is typed or untyped nil.

func IsStruct

func IsStruct(val any) bool

func MakeCaller added in v0.3.0

func MakeCaller(fun any) (func(Handler) []reflect.Value, error)

func Map

func Map[T any](
	handler Handler,
	source any,
	constraints ...any,
) (t T, tp *promise.Promise[T], err error)

func MapAll

func MapAll[T any](
	handler Handler,
	source any,
	constraints ...any,
) (t []T, _ *promise.Promise[[]T], _ error)

func MapInto added in v0.5.0

func MapInto[T any](
	handler Handler,
	source any,
	target *T,
	constraints ...any,
) (tp *promise.Promise[T], err error)

func MapKey added in v0.11.0

func MapKey[T any](
	handler Handler,
	key any,
	constraints ...any,
) (t T, tp *promise.Promise[T], err error)

func MergeOptions

func MergeOptions(from, into any) bool

func Resolve

func Resolve[T any](
	handler Handler,
	constraints ...any,
) (T, *promise.Promise[T], error)

func ResolveAll

func ResolveAll[T any](
	handler Handler,
	constraints ...any,
) (t []T, tp *promise.Promise[[]T], err error)

func ResolveKey added in v0.11.0

func ResolveKey[T any](
	handler Handler,
	key any,
	constraints ...any,
) (t T, tp *promise.Promise[T], err error)

func TargetSliceValue

func TargetSliceValue(target any) reflect.Value

TargetSliceValue validates the interface contains a non-nil typed slice pointer and return reflect.Value.

func TargetValue

func TargetValue(target any) reflect.Value

TargetValue validates the interface contains a non-nil typed pointer and return reflect.Value.

func TraverseAxis

func TraverseAxis(
	node Traversing,
	axis TraversingAxis,
	visitor TraversalVisitor,
) error

TraverseAxis traverses a node over an axis.

func TraverseLevelOrder

func TraverseLevelOrder(
	node Traversing,
	visitor TraversalVisitor,
) error

TraverseLevelOrder traverse the node using level-order algorithm.

func TraversePostOrder

func TraversePostOrder(
	node Traversing,
	visitor TraversalVisitor,
) error

TraversePostOrder traverse the node using post-order algorithm.

func TraversePreOrder

func TraversePreOrder(
	node Traversing,
	visitor TraversalVisitor,
) error

TraversePreOrder traverse the node using pre-order algorithm.

func TraverseReverseLevelOrder

func TraverseReverseLevelOrder(
	node Traversing,
	visitor TraversalVisitor,
) error

TraverseReverseLevelOrder traverse the node using reverse level-order algorithm.

func TypeOf

func TypeOf[T any]() reflect.Type

TypeOf returns reflect.Type of generic argument.

func ValueAs

func ValueAs[T any](v reflect.Value) (r T)

ValueAs returns the value of v As the type T. It panics if the value isn't assignable to T.

Types

type AcceptPromiseResultFunc added in v0.10.0

type AcceptPromiseResultFunc func(
	pa *promise.Promise[any],
) *promise.Promise[any]

AcceptPromiseResultFunc adjusts promise callback results.

type AcceptResultFunc

type AcceptResultFunc func(
	result any,
	composer Handler,
) HandleResult

AcceptResultFunc accepts or rejects callback results.

type Batched added in v0.10.0

type Batched[T any] struct {
	Source   T
	Callback Callback
}

Batched wraps a Callback participating in a batch operation.

type Binding

type Binding interface {
	Filtered
	Key() any
	Strict() bool
	SkipFilters() bool
	Metadata() []any
	Invoke(
		ctx HandleContext,
		initArgs ...any,
	) ([]any, *promise.Promise[[]any], error)
}

Binding connects a Callback to a handler.

type BindingConstraint

type BindingConstraint interface {
	Required() bool
	Require(metadata *BindingMetadata)
	Matches(metadata *BindingMetadata) bool
}

BindingConstraint manages BindingMetadata assertions.

func WithConstraintProvider added in v0.5.0

func WithConstraintProvider[T ConstraintInitialize](provider T) BindingConstraint

type BindingGroup added in v0.10.0

type BindingGroup struct{}

BindingGroup marks bindings that aggregate one or more binding metadata.

func (BindingGroup) DefinesBindingGroup added in v0.10.0

func (d BindingGroup) DefinesBindingGroup()

type BindingMetadata

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

BindingMetadata is a key/value container.

func ApplyConstraints

func ApplyConstraints(
	scope BindingScope,
	constraints ...any,
) *BindingMetadata

func (*BindingMetadata) Get

func (b *BindingMetadata) Get(key any) (any, bool)

func (*BindingMetadata) Has

func (b *BindingMetadata) Has(key any) bool

func (*BindingMetadata) IsEmpty

func (b *BindingMetadata) IsEmpty() bool

func (*BindingMetadata) MergeInto

func (b *BindingMetadata) MergeInto(other *BindingMetadata)

func (*BindingMetadata) Name

func (b *BindingMetadata) Name() string

func (*BindingMetadata) Set

func (b *BindingMetadata) Set(key any, val any)

func (*BindingMetadata) SetName

func (b *BindingMetadata) SetName(name string)

type BindingReducer

type BindingReducer func(
	binding Binding,
	result HandleResult,
) (HandleResult, bool)

BindingReducer aggregates Binding results.

type BindingScope

type BindingScope interface {
	Metadata() *BindingMetadata
}

BindingScope is a BindingMetadata container.

type BivariantPolicy

type BivariantPolicy struct {
	FilteredScope
	// contains filtered or unexported fields
}

BivariantPolicy matches related input and output values.

func (*BivariantPolicy) AcceptResults

func (p *BivariantPolicy) AcceptResults(
	results []any,
) (any, HandleResult)

func (*BivariantPolicy) IsVariantKey

func (p *BivariantPolicy) IsVariantKey(
	key any,
) (variant bool, unknown bool)

func (*BivariantPolicy) Less

func (p *BivariantPolicy) Less(
	binding, otherBinding Binding,
) bool

func (*BivariantPolicy) MatchesKey

func (p *BivariantPolicy) MatchesKey(
	key, otherKey any,
	invariant bool,
) (matches bool, exact bool)

func (*BivariantPolicy) NewFuncBinding added in v0.3.0

func (p *BivariantPolicy) NewFuncBinding(
	fun reflect.Value,
	spec *policySpec,
	key any,
) (Binding, error)

func (*BivariantPolicy) NewMethodBinding

func (p *BivariantPolicy) NewMethodBinding(
	method reflect.Method,
	spec *policySpec,
	key any,
) (Binding, error)

func (*BivariantPolicy) Strict added in v0.10.0

func (p *BivariantPolicy) Strict() bool

type Builder

type Builder interface {
	BuildUp(handler Handler) Handler
}

Builder augments a Handler.

func CallWith added in v0.7.0

func CallWith(semantics SemanticFlags) Builder

func ComposeBuilders

func ComposeBuilders(builder Builder, builders ...Builder) Builder

func PipeBuilders

func PipeBuilders(builder Builder, builders ...Builder) Builder

func ProvideFilters added in v0.7.0

func ProvideFilters(providers ...FilterProvider) Builder

func UseFilters added in v0.7.0

func UseFilters(filters ...Filter) Builder

type BuilderFunc

type BuilderFunc func(Handler) Handler
var (
	FromScope                   = Qualifier[Scoped]{}
	PublishFromRoot BuilderFunc = func(handler Handler) Handler {
		if context, _, err := Resolve[*Context](handler); err != nil {
			panic("the root context could not be found")
		} else {
			return Publish.BuildUp(context.Root())
		}
	}
)
var (
	DisableFilters BuilderFunc = func(handler Handler) Handler {
		return BuildUp(handler, disableFilters)
	}

	EnableFilters BuilderFunc = func(handler Handler) Handler {
		return BuildUp(handler, enableFilters)
	}
)
var NoBatch BuilderFunc = func(handler Handler) Handler {
	if IsNil(handler) {
		panic("handler cannot be nil")
	}
	return &noBatchHandler{handler}
}

func Axis added in v0.7.0

func Axis(axis TraversingAxis) BuilderFunc

func Options added in v0.7.0

func Options(options any) BuilderFunc

func Reentrant added in v0.7.0

func Reentrant(filter FilterFunc) BuilderFunc

func With

func With(values ...any) BuilderFunc

func (BuilderFunc) BuildUp added in v0.7.0

func (f BuilderFunc) BuildUp(
	handler Handler,
) Handler

type Callback

type Callback interface {
	Key() any
	Source() any
	Policy() Policy
	ResultCount() int
	Result(many bool) (any, *promise.Promise[any])
	SetResult(result any)
	ReceiveResult(
		result any,
		strict bool,
		composer Handler,
	) HandleResult
	Metadata() *BindingMetadata
}

Callback represents any intention.

type CallbackArg added in v0.4.0

type CallbackArg struct{}

CallbackArg returns the raw callback.

type CallbackBase

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

CallbackBase is abstract Callback implementation.

func (*CallbackBase) AddResult

func (c *CallbackBase) AddResult(
	result any,
	composer Handler,
) HandleResult

func (*CallbackBase) Metadata added in v0.11.0

func (c *CallbackBase) Metadata() *BindingMetadata

func (*CallbackBase) ReceiveResult

func (c *CallbackBase) ReceiveResult(
	result any,
	strict bool,
	composer Handler,
) HandleResult

func (*CallbackBase) Result

func (c *CallbackBase) Result(
	many bool,
) (any, *promise.Promise[any])

func (*CallbackBase) ResultCount added in v0.7.0

func (c *CallbackBase) ResultCount() int

func (*CallbackBase) SetAcceptPromiseResult added in v0.10.0

func (c *CallbackBase) SetAcceptPromiseResult(
	accept AcceptPromiseResultFunc,
)

func (*CallbackBase) SetAcceptResult added in v0.7.0

func (c *CallbackBase) SetAcceptResult(
	accept AcceptResultFunc,
)

func (*CallbackBase) SetResult

func (c *CallbackBase) SetResult(result any)

func (*CallbackBase) Source added in v0.4.0

func (c *CallbackBase) Source() any

type CallbackBuilder

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

CallbackBuilder builds common CallbackBase.

func (*CallbackBuilder) CallbackBase

func (b *CallbackBuilder) CallbackBase() CallbackBase

func (*CallbackBuilder) WithConstraints added in v0.11.0

func (b *CallbackBuilder) WithConstraints(
	constraints ...any,
) *CallbackBuilder

type CallbackGuard

type CallbackGuard interface {
	CanDispatch(
		handler any,
		binding Binding,
	) (reset func(), approved bool)
}

CallbackGuard detects and prevents circular Callback dispatch.

type CallbackSemantics

type CallbackSemantics struct {
	Composition
	// contains filtered or unexported fields
}

CallbackSemantics captures semantic options

func GetSemantics

func GetSemantics(handler Handler) *CallbackSemantics

func (*CallbackSemantics) CanBatch added in v0.10.0

func (c *CallbackSemantics) CanBatch() bool

func (*CallbackSemantics) CanFilter

func (c *CallbackSemantics) CanFilter() bool

func (*CallbackSemantics) CanInfer

func (c *CallbackSemantics) CanInfer() bool

func (*CallbackSemantics) HasOption

func (c *CallbackSemantics) HasOption(options SemanticFlags) bool

func (*CallbackSemantics) IsSpecified

func (c *CallbackSemantics) IsSpecified(options SemanticFlags) bool

func (*CallbackSemantics) MergeInto

func (c *CallbackSemantics) MergeInto(semantics *CallbackSemantics)

func (*CallbackSemantics) SetOption

func (c *CallbackSemantics) SetOption(options SemanticFlags, enabled bool)

type CancelledError added in v0.10.0

type CancelledError struct {
	Message string
	Reason  error
}

CancelledError reports a cancelled operation.

func (*CancelledError) Error added in v0.10.0

func (e *CancelledError) Error() string

func (*CancelledError) Unwrap added in v0.10.0

func (e *CancelledError) Unwrap() error

type ChildContextEndedObserver

type ChildContextEndedObserver interface {
	ChildContextEnded(childCtx *Context, reason any)
}

ChildContextEndedObserver reports child Context ended.

type ChildContextEndedObserverFunc

type ChildContextEndedObserverFunc func(ctx *Context, reason any)

func (ChildContextEndedObserverFunc) ChildContextEnded

func (f ChildContextEndedObserverFunc) ChildContextEnded(
	ctx *Context,
	reason any,
)

type ChildContextEndingObserver

type ChildContextEndingObserver interface {
	ChildContextEnding(childCtx *Context, reason any)
}

ChildContextEndingObserver reports child Context is ending.

type ChildContextEndingObserverFunc

type ChildContextEndingObserverFunc func(ctx *Context, reason any)

func (ChildContextEndingObserverFunc) ChildContextEnding

func (f ChildContextEndingObserverFunc) ChildContextEnding(
	ctx *Context,
	reason any,
)

type CompletePipelineFunc

type CompletePipelineFunc func(
	HandleContext,
) ([]any, *promise.Promise[[]any], error)

type Composition

type Composition struct {
	Trampoline
}

func (*Composition) Dispatch

func (c *Composition) Dispatch(
	handler any,
	greedy bool,
	composer Handler,
) HandleResult

type ConfigureHandlerDescriptorFactory added in v0.7.0

type ConfigureHandlerDescriptorFactory func(builder *HandlerDescriptorFactoryBuilder)

func (ConfigureHandlerDescriptorFactory) Configure added in v0.7.0

type ConstraintBuilder

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

ConstraintBuilder is a fluent builder for BindingMetadata.

func (*ConstraintBuilder) Metadata

func (b *ConstraintBuilder) Metadata() (metadata *BindingMetadata)

func (*ConstraintBuilder) Named

func (b *ConstraintBuilder) Named(
	name string,
) *ConstraintBuilder

func (*ConstraintBuilder) WithConstraint

func (b *ConstraintBuilder) WithConstraint(
	constraint BindingConstraint,
) *ConstraintBuilder

func (*ConstraintBuilder) WithMetadata

func (b *ConstraintBuilder) WithMetadata(
	metadata BindingMetadata,
) *ConstraintBuilder

type ConstraintBuilderFunc added in v0.11.0

type ConstraintBuilderFunc func(*ConstraintBuilder)

ConstraintBuilderFunc configures a ConstraintBuilder.

type ConstraintInitialize added in v0.5.0

type ConstraintInitialize interface {
	BindingConstraint
	Init() error
}

ConstraintInitialize defines generic contract for providers.

type ConstraintProvider

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

ConstraintProvider is a FilterProvider for constraints.

func (*ConstraintProvider) Constraints

func (c *ConstraintProvider) Constraints() []BindingConstraint

func (*ConstraintProvider) Filters

func (c *ConstraintProvider) Filters(
	binding Binding,
	callback any,
	composer Handler,
) ([]Filter, error)

func (*ConstraintProvider) Required

func (c *ConstraintProvider) Required() bool

type ConstructorBinder

type ConstructorBinder interface {
	NewConstructorBinding(
		handlerType reflect.Type,
		constructor *reflect.Method,
		spec *policySpec,
	) (Binding, error)
}

ConstructorBinder creates a constructor binding to `handlerType`.

type ConstructorBinding added in v0.12.0

type ConstructorBinding struct {
	FilteredScope
	// contains filtered or unexported fields
}

ConstructorBinding customizes the construction of `handlerType`.

func (*ConstructorBinding) Invoke added in v0.12.0

func (b *ConstructorBinding) Invoke(
	ctx HandleContext,
	initArgs ...any,
) ([]any, *promise.Promise[[]any], error)

func (*ConstructorBinding) Key added in v0.12.0

func (b *ConstructorBinding) Key() any

func (*ConstructorBinding) Metadata added in v0.12.0

func (b *ConstructorBinding) Metadata() []any

func (*ConstructorBinding) SkipFilters added in v0.12.0

func (b *ConstructorBinding) SkipFilters() bool

func (*ConstructorBinding) Strict added in v0.12.0

func (b *ConstructorBinding) Strict() bool

type Context

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

A Context represents the scope at a give point in time. It has a beginning and an end and can handle callbacks As well As notify observers of lifecycle changes. In addition, it maintains parent-child relationships and thus can form a graph.

func NewContext

func NewContext(handlers ...any) *Context

func (*Context) AddHandlers

func (m *Context) AddHandlers(
	handlers ...any,
) *mutableHandlers

func (*Context) Children

func (c *Context) Children() []Traversing

func (*Context) Dispose

func (c *Context) Dispose()

func (*Context) End

func (c *Context) End(reason any)

func (*Context) Handle

func (c *Context) Handle(
	callback any,
	greedy bool,
	composer Handler,
) HandleResult

func (*Context) HandleAxis

func (c *Context) HandleAxis(
	axis TraversingAxis,
	callback any,
	greedy bool,
	composer Handler,
) HandleResult

func (*Context) Handlers added in v0.10.0

func (m *Context) Handlers() []any

func (*Context) HasChildren

func (c *Context) HasChildren() bool

func (*Context) InsertHandlers

func (m *Context) InsertHandlers(
	index int,
	handlers ...any,
) *mutableHandlers

func (*Context) NewChild

func (c *Context) NewChild() *Context

func (*Context) Observe

func (c *Context) Observe(observer ContextObserver) Disposable

func (*Context) Parent

func (c *Context) Parent() Traversing

func (*Context) RemoveHandlers

func (m *Context) RemoveHandlers(
	handlers ...any,
) *mutableHandlers

func (*Context) Root

func (c *Context) Root() *Context

func (*Context) State

func (c *Context) State() ContextState

func (*Context) Store

func (c *Context) Store(values ...any) *Context

func (*Context) SuppressDispatch added in v0.3.0

func (m *Context) SuppressDispatch()

func (*Context) Traverse

func (c *Context) Traverse(
	axis TraversingAxis,
	visitor TraversalVisitor,
) error

func (*Context) Unwind

func (c *Context) Unwind(reason any) *Context

func (*Context) UnwindToRoot

func (c *Context) UnwindToRoot(reason any) *Context

type ContextChangedObserver

type ContextChangedObserver interface {
	ContextChanged(
		contextual Contextual,
		oldCtx *Context,
		newCtx *Context)
}

ContextChangedObserver reports a Context changed.

type ContextChangedObserverFunc

type ContextChangedObserverFunc func(
	contextual Contextual,
	oldCtx *Context,
	newCtx *Context)

func (ContextChangedObserverFunc) ContextChanged

func (f ContextChangedObserverFunc) ContextChanged(
	contextual Contextual,
	oldCtx *Context,
	newCtx *Context,
)

type ContextChangingObserver

type ContextChangingObserver interface {
	ContextChanging(
		contextual Contextual,
		oldCtx *Context,
		newCtx **Context)
}

ContextChangingObserver reports a Context is changing.

type ContextChangingObserverFunc

type ContextChangingObserverFunc func(
	contextual Contextual,
	oldCtx *Context,
	newCtx **Context)

func (ContextChangingObserverFunc) ContextChanging

func (f ContextChangingObserverFunc) ContextChanging(
	contextual Contextual,
	oldCtx *Context,
	newCtx **Context,
)

type ContextEndedObserver

type ContextEndedObserver interface {
	ContextEnded(ctx *Context, reason any)
}

ContextEndedObserver reports Context ended.

type ContextEndedObserverFunc

type ContextEndedObserverFunc func(ctx *Context, reason any)

func (ContextEndedObserverFunc) ContextEnded

func (f ContextEndedObserverFunc) ContextEnded(
	ctx *Context,
	reason any,
)

type ContextEndingObserver

type ContextEndingObserver interface {
	ContextEnding(ctx *Context, reason any)
}

ContextEndingObserver reports Context is ending.

type ContextEndingObserverFunc

type ContextEndingObserverFunc func(ctx *Context, reason any)

func (ContextEndingObserverFunc) ContextEnding

func (f ContextEndingObserverFunc) ContextEnding(
	ctx *Context,
	reason any,
)

type ContextObserver

type ContextObserver = interface{}

ContextObserver is a generic Context observer.

type ContextReason

type ContextReason uint

ContextReason identifies the cause for the notification.

const (
	ContextAlreadyEnded ContextReason = iota
	ContextUnwinded
	ContextDisposed
)

type ContextState

type ContextState uint

ContextState represents the state of a Context.

const (
	ContextActive ContextState = iota
	ContextEnding
	ContextEnded
)

type Contextual

type Contextual interface {
	Context() *Context
	SetContext(ctx *Context)
	Observe(observer ContextObserver) Disposable
}

Contextual represents anything with a Context.

type ContextualBase

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

func (*ContextualBase) ChangeContext

func (c *ContextualBase) ChangeContext(
	contextual Contextual,
	ctx *Context,
)

func (*ContextualBase) Context

func (c *ContextualBase) Context() *Context

func (*ContextualBase) EndContext

func (c *ContextualBase) EndContext()

func (*ContextualBase) Observe

func (c *ContextualBase) Observe(
	observer ContextObserver,
) Disposable

type ContravariantPolicy

type ContravariantPolicy struct {
	FilteredScope
}

ContravariantPolicy matches related input values.

func (*ContravariantPolicy) AcceptResults

func (p *ContravariantPolicy) AcceptResults(
	results []any,
) (result any, accepted HandleResult)

func (*ContravariantPolicy) IsVariantKey

func (p *ContravariantPolicy) IsVariantKey(
	key any,
) (variant bool, unknown bool)

func (*ContravariantPolicy) Less

func (p *ContravariantPolicy) Less(
	binding, otherBinding Binding,
) bool

func (*ContravariantPolicy) MatchesKey

func (p *ContravariantPolicy) MatchesKey(
	key, otherKey any,
	invariant bool,
) (matches bool, exact bool)

func (*ContravariantPolicy) NewFuncBinding added in v0.3.0

func (p *ContravariantPolicy) NewFuncBinding(
	fun reflect.Value,
	spec *policySpec,
	key any,
) (Binding, error)

func (*ContravariantPolicy) NewMethodBinding

func (p *ContravariantPolicy) NewMethodBinding(
	method reflect.Method,
	spec *policySpec,
	key any,
) (Binding, error)

func (*ContravariantPolicy) Strict added in v0.10.0

func (p *ContravariantPolicy) Strict() bool

type CovariantPolicy

type CovariantPolicy struct {
	FilteredScope
}

CovariantPolicy matches related output values.

func (*CovariantPolicy) AcceptResults

func (p *CovariantPolicy) AcceptResults(
	results []any,
) (result any, accepted HandleResult)

func (*CovariantPolicy) IsVariantKey

func (p *CovariantPolicy) IsVariantKey(
	key any,
) (variant bool, unknown bool)

func (*CovariantPolicy) Less

func (p *CovariantPolicy) Less(
	binding, otherBinding Binding,
) bool

func (*CovariantPolicy) MatchesKey

func (p *CovariantPolicy) MatchesKey(
	key, otherKey any,
	invariant bool,
) (matches bool, exact bool)

func (*CovariantPolicy) NewFuncBinding added in v0.3.0

func (p *CovariantPolicy) NewFuncBinding(
	fun reflect.Value,
	spec *policySpec,
	key any,
) (Binding, error)

func (*CovariantPolicy) NewMethodBinding

func (p *CovariantPolicy) NewMethodBinding(
	method reflect.Method,
	spec *policySpec,
	key any,
) (Binding, error)

func (*CovariantPolicy) Strict added in v0.10.0

func (p *CovariantPolicy) Strict() bool

type Creates

type Creates struct {
	CallbackBase
	// contains filtered or unexported fields
}

Creates instances covariantly.

func (*Creates) Dispatch

func (c *Creates) Dispatch(
	handler any,
	greedy bool,
	composer Handler,
) HandleResult

func (*Creates) Key

func (c *Creates) Key() any

func (*Creates) Policy

func (c *Creates) Policy() Policy

type CreatesBuilder

type CreatesBuilder struct {
	CallbackBuilder
	// contains filtered or unexported fields
}

CreatesBuilder builds Creates callbacks.

func (*CreatesBuilder) NewCreation

func (b *CreatesBuilder) NewCreation() *Creates

func (*CreatesBuilder) WithKey added in v0.11.0

func (b *CreatesBuilder) WithKey(
	key any,
) *CreatesBuilder

type DependencyArg

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

DependencyArg is a parameter resolved at runtime.

func (DependencyArg) Metadata added in v0.9.0

func (d DependencyArg) Metadata() []any

func (DependencyArg) Optional

func (d DependencyArg) Optional() bool

func (DependencyArg) Promise added in v0.10.0

func (d DependencyArg) Promise() bool

func (DependencyArg) Strict

func (d DependencyArg) Strict() bool

type DependencyResolver

type DependencyResolver interface {
	Resolve(
		typ reflect.Type,
		dep DependencyArg,
		ctx HandleContext,
	) (reflect.Value, *promise.Promise[reflect.Value], error)
}

DependencyResolver defines how an argument value is retrieved.

type DiKey

type DiKey struct {
	In  any
	Out any
}

DiKey represents a key with input and output parts.

type Disposable

type Disposable interface {
	Dispose()
}

type DisposableFunc

type DisposableFunc func()

func (DisposableFunc) Dispose

func (f DisposableFunc) Dispose()

type Feature added in v0.3.0

type Feature interface {
	Install(setup *SetupBuilder) error
}

Feature encapsulates custom setup.

type FeatureFunc added in v0.3.0

type FeatureFunc func(setup *SetupBuilder) error

func GroupFeatures added in v0.16.0

func GroupFeatures(features ...Feature) FeatureFunc

GroupFeatures combines one or more Feature's into a single Feature.

func (FeatureFunc) Install added in v0.3.0

func (f FeatureFunc) Install(setup *SetupBuilder) error

type Filter

type Filter interface {
	Order() int
	Next(
		next Next,
		ctx HandleContext,
		provider FilterProvider,
	) ([]any, *promise.Promise[[]any], error)
}

Filter defines a middleware step in a pipeline.

type FilterFunc

type FilterFunc func(
	callback any,
	greedy bool,
	composer Handler,
	proceed ProceedFunc,
) HandleResult

FilterFunc defines a function that can intercept a callback.

func (FilterFunc) BuildUp added in v0.7.0

func (f FilterFunc) BuildUp(handler Handler) Handler

type FilterInstanceProvider

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

FilterInstanceProvider provides existing Filters.

func NewFilterInstanceProvider

func NewFilterInstanceProvider(
	required bool,
	filters ...Filter,
) *FilterInstanceProvider

func (*FilterInstanceProvider) Filters

func (f *FilterInstanceProvider) Filters(
	binding Binding,
	callback any,
	composer Handler,
) ([]Filter, error)

func (*FilterInstanceProvider) Required

func (f *FilterInstanceProvider) Required() bool

type FilterOptions

type FilterOptions struct {
	Providers   []FilterProvider
	SkipFilters Option[bool]
}

FilterOptions are used to control Filter processing.

type FilterProvider

type FilterProvider interface {
	Required() bool
	Filters(
		binding Binding,
		callback any,
		composer Handler,
	) ([]Filter, error)
}

FilterProvider provides one or more Filter's.

type Filtered

type Filtered interface {
	Filters() []FilterProvider
	AddFilters(providers ...FilterProvider)
	RemoveFilters(providers ...FilterProvider)
	RemoveAllFilters()
}

Filtered is a container of Filters.

type FilteredScope

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

FilteredScope implements a container of Filters.

func (*FilteredScope) AddFilters

func (f *FilteredScope) AddFilters(providers ...FilterProvider)

func (*FilteredScope) Filters

func (f *FilteredScope) Filters() []FilterProvider

func (*FilteredScope) RemoveAllFilters

func (f *FilteredScope) RemoveAllFilters()

func (*FilteredScope) RemoveFilters

func (f *FilteredScope) RemoveFilters(providers ...FilterProvider)

type Format

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

Format is a BindingConstraint for applying formatting.

func From added in v0.11.0

func From(format string) *Format

From maps from a format.

func To added in v0.11.0

func To(format string) *Format

To maps to a format.

func (*Format) Direction added in v0.11.0

func (f *Format) Direction() FormatDirection

func (*Format) Identifier added in v0.11.0

func (f *Format) Identifier() string

func (*Format) InitWithTag

func (f *Format) InitWithTag(tag reflect.StructTag) error

func (*Format) Matches

func (f *Format) Matches(metadata *BindingMetadata) bool

func (*Format) Merge

func (f *Format) Merge(constraint BindingConstraint) bool

func (*Format) Require

func (f *Format) Require(metadata *BindingMetadata)

func (*Format) Required added in v0.12.0

func (f *Format) Required() bool

func (*Format) Rule added in v0.11.0

func (f *Format) Rule() FormatRule

type FormatDirection added in v0.11.0

type FormatDirection uint8

FormatDirection indicates direction of formatting.

type FormatRule added in v0.11.0

type FormatRule uint8

FormatRule describes how to interpret the format.

type FromOptions

type FromOptions struct{}

FromOptions is a DependencyResolver that binds options to an argument.

func (FromOptions) Resolve

func (o FromOptions) Resolve(
	typ reflect.Type,
	dep DependencyArg,
	ctx HandleContext,
) (options reflect.Value, _ *promise.Promise[reflect.Value], err error)

func (FromOptions) Validate

func (o FromOptions) Validate(
	typ reflect.Type,
	dep DependencyArg,
) error

type FuncBinder added in v0.3.0

type FuncBinder interface {
	NewFuncBinding(
		fun reflect.Value,
		spec *policySpec,
		key any,
	) (Binding, error)
}

FuncBinder creates a binding to a function.

type FuncBinding added in v0.12.0

type FuncBinding struct {
	FilteredScope
	// contains filtered or unexported fields
}

FuncBinding models a `key` Binding to a function.

func (*FuncBinding) Invoke added in v0.12.0

func (b *FuncBinding) Invoke(
	ctx HandleContext,
	initArgs ...any,
) ([]any, *promise.Promise[[]any], error)

func (*FuncBinding) Key added in v0.12.0

func (b *FuncBinding) Key() any

func (*FuncBinding) Metadata added in v0.12.0

func (b *FuncBinding) Metadata() []any

func (*FuncBinding) SkipFilters added in v0.12.0

func (b *FuncBinding) SkipFilters() bool

func (*FuncBinding) Strict added in v0.12.0

func (b *FuncBinding) Strict() bool

type FuncBindingError added in v0.3.0

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

FuncBindingError reports a failed function binding.

func (*FuncBindingError) Error added in v0.3.0

func (e *FuncBindingError) Error() string

func (*FuncBindingError) Func added in v0.3.0

func (e *FuncBindingError) Func() reflect.Value

func (*FuncBindingError) Unwrap added in v0.3.0

func (e *FuncBindingError) Unwrap() error

type HandleContext

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

HandleContext contain all the information about handling a Callback.

func (HandleContext) Binding

func (h HandleContext) Binding() Binding

func (HandleContext) Callback

func (h HandleContext) Callback() Callback

func (HandleContext) Composer

func (h HandleContext) Composer() Handler

func (HandleContext) Greedy added in v0.4.0

func (h HandleContext) Greedy() bool

func (HandleContext) Handler added in v0.5.0

func (h HandleContext) Handler() any

type HandleResult

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

HandleResult describes the result of an operation.

func DispatchCallback

func DispatchCallback(
	handler any,
	callback any,
	greedy bool,
	composer Handler,
) HandleResult

func DispatchPolicy

func DispatchPolicy(
	handler any,
	callback Callback,
	greedy bool,
	composer Handler,
) HandleResult

func (HandleResult) And

func (r HandleResult) And(other HandleResult) HandleResult

func (HandleResult) AndBlock added in v0.7.0

func (r HandleResult) AndBlock(other HandleResult) HandleResult

func (HandleResult) Error

func (r HandleResult) Error() error

func (HandleResult) IsError

func (r HandleResult) IsError() bool

func (HandleResult) IsHandled

func (r HandleResult) IsHandled() bool

func (HandleResult) Or

func (HandleResult) OrBlock added in v0.7.0

func (r HandleResult) OrBlock(block HandleResultBlock) HandleResult

func (HandleResult) Otherwise

func (r HandleResult) Otherwise(
	block HandleResultBlock,
) HandleResult

func (HandleResult) OtherwiseHandledIf

func (r HandleResult) OtherwiseHandledIf(
	handled bool,
) HandleResult

func (HandleResult) OtherwiseIf

func (r HandleResult) OtherwiseIf(
	condition bool,
	block HandleResultBlock,
) HandleResult

func (HandleResult) ShouldStop

func (r HandleResult) ShouldStop() bool

func (HandleResult) Then

func (r HandleResult) Then(
	block HandleResultBlock,
) HandleResult

func (HandleResult) ThenIf

func (r HandleResult) ThenIf(
	condition bool,
	block HandleResultBlock,
) HandleResult

func (HandleResult) WithError

func (r HandleResult) WithError(err error) HandleResult

func (HandleResult) WithoutError

func (r HandleResult) WithoutError() HandleResult

type HandleResultBlock

type HandleResultBlock func() HandleResult

HandleResultBlock provides another HandleResult.

type Handler

type Handler interface {
	Handle(
		callback any,
		greedy bool,
		composer Handler,
	) HandleResult
}

Handler is the uniform metaphor for processing.

func AddHandlers

func AddHandlers(
	parent Handler,
	handlers ...any,
) Handler

func BuildUp added in v0.7.0

func BuildUp(handler Handler, builders ...Builder) Handler

func NewProvider

func NewProvider(value any) Handler

func ToHandler

func ToHandler(handler any) Handler

type HandlerAxis

type HandlerAxis interface {
	Handler
	HandleAxis(
		axis TraversingAxis,
		callback any,
		greedy bool,
		composer Handler,
	) HandleResult
}

HandlerAxis extends Handler with traversal.

type HandlerDescriptor

type HandlerDescriptor struct {
	FilteredScope
	// contains filtered or unexported fields
}

HandlerDescriptor describes the Binding's of a Handler.

func (*HandlerDescriptor) Dispatch

func (d *HandlerDescriptor) Dispatch(
	policy Policy,
	handler any,
	callback Callback,
	greedy bool,
	composer Handler,
	guard CallbackGuard,
) (result HandleResult)

type HandlerDescriptorError

type HandlerDescriptorError struct {
	Reason error
	// contains filtered or unexported fields
}

HandlerDescriptorError reports a failed HandlerDescriptor.

func (*HandlerDescriptorError) Error

func (e *HandlerDescriptorError) Error() string

func (*HandlerDescriptorError) HandlerSpec added in v0.3.0

func (e *HandlerDescriptorError) HandlerSpec() HandlerSpec

func (*HandlerDescriptorError) Unwrap

func (e *HandlerDescriptorError) Unwrap() error

type HandlerDescriptorFactory

type HandlerDescriptorFactory interface {
	HandlerDescriptorProvider
	MakeHandlerSpec(spec any) HandlerSpec
	RegisterHandler(spec any) (*HandlerDescriptor, bool, error)
}

HandlerDescriptorFactory registers HandlerDescriptor's.

func GetHandlerDescriptorFactory

func GetHandlerDescriptorFactory(
	handler Handler,
) HandlerDescriptorFactory

func NewMutableHandlerDescriptorFactory

func NewMutableHandlerDescriptorFactory(
	opts ...HandlerDescriptorFactoryOption,
) HandlerDescriptorFactory

type HandlerDescriptorFactoryBuilder added in v0.7.0

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

HandlerDescriptorFactoryBuilder build the HandlerDescriptorFactory.

func (*HandlerDescriptorFactoryBuilder) AddBindingBuilders added in v0.7.0

func (b *HandlerDescriptorFactoryBuilder) AddBindingBuilders(
	parsers ...bindingParser,
) *HandlerDescriptorFactoryBuilder

func (*HandlerDescriptorFactoryBuilder) Build added in v0.7.0

func (*HandlerDescriptorFactoryBuilder) SetObserver added in v0.7.0

type HandlerDescriptorFactoryOption added in v0.7.0

type HandlerDescriptorFactoryOption interface {
	Configure(builder *HandlerDescriptorFactoryBuilder)
}

type HandlerDescriptorObserver added in v0.7.0

type HandlerDescriptorObserver interface {
	NotifyHandlerBinding(
		descriptor *HandlerDescriptor,
		binding Binding,
	)
}

HandlerDescriptorObserver observes HandlerDescriptor Binding's.

type HandlerDescriptorProvider

type HandlerDescriptorProvider interface {
	DescriptorOf(spec any) *HandlerDescriptor
}

HandlerDescriptorProvider returns Handler descriptors.

type HandlerDescriptorVisitorFunc

type HandlerDescriptorVisitorFunc func(*HandlerDescriptor, Binding)

func (HandlerDescriptorVisitorFunc) NotifyHandlerBinding added in v0.7.0

func (f HandlerDescriptorVisitorFunc) NotifyHandlerBinding(
	descriptor *HandlerDescriptor,
	binding Binding,
)

type HandlerFuncSpec added in v0.4.0

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

HandlerFuncSpec represents Handler function specifications.

func (HandlerFuncSpec) Func added in v0.4.0

func (s HandlerFuncSpec) Func() reflect.Value

func (HandlerFuncSpec) String added in v0.4.0

func (s HandlerFuncSpec) String() string

type HandlerSpec added in v0.3.0

type HandlerSpec interface {
	// contains filtered or unexported methods
}

HandlerSpec manages a category of HandlerDescriptor's.

type HandlerTypeSpec added in v0.3.0

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

HandlerTypeSpec represents Handler type specifications.

func (HandlerTypeSpec) Name added in v0.3.0

func (s HandlerTypeSpec) Name() string

func (HandlerTypeSpec) String added in v0.3.0

func (s HandlerTypeSpec) String() string

func (HandlerTypeSpec) Type added in v0.3.0

func (s HandlerTypeSpec) Type() reflect.Type

type Handles

type Handles struct {
	CallbackBase
	// contains filtered or unexported fields
}

Handles callbacks contravariantly.

func (*Handles) CanBatch added in v0.10.0

func (h *Handles) CanBatch() bool

func (*Handles) CanDispatch

func (h *Handles) CanDispatch(
	handler any,
	binding Binding,
) (reset func(), approved bool)

func (*Handles) CanFilter

func (h *Handles) CanFilter() bool

func (*Handles) CanInfer

func (h *Handles) CanInfer() bool

func (*Handles) Dispatch

func (h *Handles) Dispatch(
	handler any,
	greedy bool,
	composer Handler,
) HandleResult

func (*Handles) Key

func (h *Handles) Key() any

func (*Handles) Policy

func (h *Handles) Policy() Policy

func (*Handles) Source added in v0.4.0

func (h *Handles) Source() any

type HandlesBuilder

type HandlesBuilder struct {
	CallbackBuilder
	// contains filtered or unexported fields
}

HandlesBuilder builds Handles callbacks.

func (*HandlesBuilder) NewHandles

func (b *HandlesBuilder) NewHandles() *Handles

func (*HandlesBuilder) WithCallback

func (b *HandlesBuilder) WithCallback(
	callback any,
) *HandlesBuilder

type KeyValues

type KeyValues map[any]any

KeyValues is an alias for key/value map.

type Late added in v0.11.0

type Late struct {
	Value any
}

Late is a container for late Binding results.

type Lifestyle

type Lifestyle struct{}

Lifestyle provides common lifestyle functionality.

func (*Lifestyle) Order

func (l *Lifestyle) Order() int

type LifestyleProvider

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

LifestyleProvider is a FilterProvider of lifestyles.

func (*LifestyleProvider) AppliesTo

func (l *LifestyleProvider) AppliesTo(
	callback Callback,
) bool

func (*LifestyleProvider) Filters

func (l *LifestyleProvider) Filters(
	binding Binding,
	callback any,
	composer Handler,
) ([]Filter, error)

func (*LifestyleProvider) Required

func (l *LifestyleProvider) Required() bool

func (*LifestyleProvider) SetFilters

func (l *LifestyleProvider) SetFilters(filters ...Filter)

type Maps

type Maps struct {
	CallbackBase
	// contains filtered or unexported fields
}

Maps callbacks bivariantly.

func (*Maps) Dispatch

func (m *Maps) Dispatch(
	handler any,
	greedy bool,
	composer Handler,
) HandleResult

func (*Maps) Key

func (m *Maps) Key() any

func (*Maps) Policy

func (m *Maps) Policy() Policy

func (*Maps) Source

func (m *Maps) Source() any

func (*Maps) Target

func (m *Maps) Target() any

type MapsBuilder

type MapsBuilder struct {
	CallbackBuilder
	// contains filtered or unexported fields
}

MapsBuilder builds Maps callbacks.

func (*MapsBuilder) FromSource

func (b *MapsBuilder) FromSource(
	source any,
) *MapsBuilder

func (*MapsBuilder) NewMaps

func (b *MapsBuilder) NewMaps() *Maps

func (*MapsBuilder) ToTarget

func (b *MapsBuilder) ToTarget(
	target any,
) *MapsBuilder

func (*MapsBuilder) WithKey added in v0.11.0

func (b *MapsBuilder) WithKey(
	key any,
) *MapsBuilder

type Metadata

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

Metadata matches against kev/value pairs.

func (*Metadata) InitWithMetadata

func (m *Metadata) InitWithMetadata(
	metadata KeyValues,
) error

func (*Metadata) InitWithTag

func (m *Metadata) InitWithTag(
	tag reflect.StructTag,
) (err error)

func (*Metadata) Matches

func (m *Metadata) Matches(metadata *BindingMetadata) bool

func (*Metadata) Require

func (m *Metadata) Require(metadata *BindingMetadata)

type MethodBinder

type MethodBinder interface {
	NewMethodBinding(
		method reflect.Method,
		spec *policySpec,
		key any,
	) (Binding, error)
}

MethodBinder creates a binding a method.

type MethodBinding added in v0.12.0

type MethodBinding struct {
	FilteredScope
	// contains filtered or unexported fields
}

MethodBinding models a `key` Binding to a method.

func (*MethodBinding) Invoke added in v0.12.0

func (b *MethodBinding) Invoke(
	ctx HandleContext,
	initArgs ...any,
) ([]any, *promise.Promise[[]any], error)

func (*MethodBinding) Key added in v0.12.0

func (b *MethodBinding) Key() any

func (*MethodBinding) Metadata added in v0.12.0

func (b *MethodBinding) Metadata() []any

func (*MethodBinding) Method added in v0.12.0

func (b *MethodBinding) Method() reflect.Method

func (*MethodBinding) SkipFilters added in v0.12.0

func (b *MethodBinding) SkipFilters() bool

func (*MethodBinding) Strict added in v0.12.0

func (b *MethodBinding) Strict() bool

type MethodBindingError

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

MethodBindingError reports a failed method binding.

func (*MethodBindingError) Error

func (e *MethodBindingError) Error() string

func (*MethodBindingError) Method

func (e *MethodBindingError) Method() reflect.Method

func (*MethodBindingError) Unwrap

func (e *MethodBindingError) Unwrap() error

type Named

type Named string

Named matches against a name.

func (*Named) InitWithTag

func (n *Named) InitWithTag(tag reflect.StructTag) error

func (*Named) Matches

func (n *Named) Matches(metadata *BindingMetadata) bool

func (*Named) Name

func (n *Named) Name() string

func (*Named) Require

func (n *Named) Require(metadata *BindingMetadata)

func (*Named) Required added in v0.12.0

func (n *Named) Required() bool

type Next

type Next func(
	composer Handler,
	proceed bool,
) ([]any, *promise.Promise[[]any], error)

Next advances to the next step in a pipeline.

func (Next) Abort

func (n Next) Abort() ([]any, *promise.Promise[[]any], error)

func (Next) Fail added in v0.10.0

func (n Next) Fail(err error) ([]any, *promise.Promise[[]any], error)

func (Next) Handle added in v0.10.0

func (n Next) Handle(
	callback any,
	greedy bool,
	composer Handler,
) ([]any, *promise.Promise[[]any], error)

func (Next) Pipe added in v0.10.0

func (n Next) Pipe() ([]any, *promise.Promise[[]any], error)

func (Next) PipeAwait added in v0.10.0

func (n Next) PipeAwait() []any

func (Next) PipeComposer added in v0.10.0

func (n Next) PipeComposer(
	composer Handler,
) ([]any, *promise.Promise[[]any], error)

func (Next) PipeComposerAwait added in v0.10.0

func (n Next) PipeComposerAwait(
	composer Handler,
) []any

type NotHandledError

type NotHandledError struct {
	Callback any
}

NotHandledError reports a failed callback.

func (*NotHandledError) Error

func (e *NotHandledError) Error() string

type Option added in v0.11.0

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

Option should be used in option structs if unset values cannot be distinguished from Zero values.

func Set added in v0.11.0

func Set[T any](val T) Option[T]

Set creates a new Option set to val.

func (*Option[T]) MergeFrom added in v0.11.0

func (o *Option[T]) MergeFrom(option any) bool

func (*Option[T]) Set added in v0.11.0

func (o *Option[T]) Set() bool

func (*Option[T]) SetValue added in v0.11.0

func (o *Option[T]) SetValue(val T)

func (*Option[T]) Value added in v0.11.0

func (o *Option[T]) Value() T

func (*Option[T]) ValueOrDefault added in v0.11.0

func (o *Option[T]) ValueOrDefault(val T) T

type Optional

type Optional struct{}

Optional marks a dependency not required.

type Policy

type Policy interface {
	Filtered
	Strict() bool
	Less(binding, otherBinding Binding) bool
	IsVariantKey(key any) (bool, bool)
	MatchesKey(key, otherKey any, invariant bool) (bool, bool)
	AcceptResults(results []any) (any, HandleResult)
}

Policy manages behaviors and callback Binding's.

type PolicyDispatch

type PolicyDispatch interface {
	DispatchPolicy(
		policy Policy,
		callback Callback,
		greedy bool,
		composer Handler,
	) HandleResult
}

PolicyDispatch customizes Callback Policy dispatch.

type Predicate

type Predicate[T any] func(T) bool

Predicate represents a generic selector.

func CombinePredicates

func CombinePredicates[T any](
	predicate Predicate[T],
	predicates ...Predicate[T],
) Predicate[T]

type ProceedFunc added in v0.7.0

type ProceedFunc func() HandleResult

ProceedFunc calls the next filter in the pipeline.

type Provides

type Provides struct {
	CallbackBase
	// contains filtered or unexported fields
}

Provides results covariantly.

func (*Provides) Binding

func (p *Provides) Binding() Binding

func (*Provides) CanDispatch

func (p *Provides) CanDispatch(
	handler any,
	binding Binding,
) (reset func(), approved bool)

func (*Provides) Dispatch

func (p *Provides) Dispatch(
	handler any,
	greedy bool,
	composer Handler,
) (result HandleResult)

func (*Provides) Key

func (p *Provides) Key() any

func (*Provides) Owner added in v0.11.0

func (p *Provides) Owner() any

func (*Provides) Parent

func (p *Provides) Parent() *Provides

func (*Provides) Policy

func (p *Provides) Policy() Policy

func (*Provides) Resolve

func (p *Provides) Resolve(
	handler Handler,
	many bool,
) (any, *promise.Promise[any], error)

type ProvidesBuilder

type ProvidesBuilder struct {
	CallbackBuilder
	// contains filtered or unexported fields
}

ProvidesBuilder builds Provides callbacks.

func (*ProvidesBuilder) ForOwner added in v0.11.0

func (b *ProvidesBuilder) ForOwner(
	owner any,
) *ProvidesBuilder

func (*ProvidesBuilder) NewProvides

func (b *ProvidesBuilder) NewProvides() *Provides

func (*ProvidesBuilder) Provides

func (b *ProvidesBuilder) Provides() Provides

func (*ProvidesBuilder) WithKey

func (b *ProvidesBuilder) WithKey(
	key any,
) *ProvidesBuilder

func (*ProvidesBuilder) WithParent

func (b *ProvidesBuilder) WithParent(
	parent *Provides,
) *ProvidesBuilder

type Qualifier

type Qualifier[T any] struct{}

Qualifier matches against a type.

func (Qualifier[T]) Matches added in v0.5.0

func (q Qualifier[T]) Matches(metadata *BindingMetadata) bool

func (Qualifier[T]) Require added in v0.5.0

func (q Qualifier[T]) Require(metadata *BindingMetadata)

func (Qualifier[T]) Required added in v0.12.0

func (q Qualifier[T]) Required() bool

type RejectedError

type RejectedError struct {
	Callback any
}

RejectedError reports a rejected callback.

func (*RejectedError) Error

func (e *RejectedError) Error() string

type Resolves added in v0.10.0

type Resolves struct {
	Provides
	// contains filtered or unexported fields
}

func (*Resolves) Callback added in v0.10.0

func (r *Resolves) Callback() Callback

func (*Resolves) CanDispatch added in v0.10.0

func (r *Resolves) CanDispatch(
	handler any,
	binding Binding,
) (reset func(), approved bool)

func (*Resolves) Succeeded added in v0.10.0

func (r *Resolves) Succeeded() bool

type ResolvesBuilder added in v0.10.0

type ResolvesBuilder struct {
	ProvidesBuilder
	// contains filtered or unexported fields
}

func (*ResolvesBuilder) NewResolves added in v0.10.0

func (b *ResolvesBuilder) NewResolves() *Resolves

func (*ResolvesBuilder) WithCallback added in v0.10.0

func (b *ResolvesBuilder) WithCallback(
	callback Callback,
) *ResolvesBuilder

func (*ResolvesBuilder) WithGreedy added in v0.10.0

func (b *ResolvesBuilder) WithGreedy(
	greedy bool,
) *ResolvesBuilder

type Scoped

type Scoped struct {
	LifestyleProvider
	// contains filtered or unexported fields
}

Scoped LifestyleProvider provides instances per Context.

func (*Scoped) Constraints added in v0.12.0

func (s *Scoped) Constraints() []BindingConstraint

func (*Scoped) Init

func (s *Scoped) Init() error

func (*Scoped) InitWithTag

func (s *Scoped) InitWithTag(tag reflect.StructTag) error

type SemanticFlags

type SemanticFlags uint8
const (
	SemanticNone      SemanticFlags = 0
	SemanticBroadcast SemanticFlags = 1 << iota
	SemanticBestEffort
	SemanticNotify = SemanticBroadcast | SemanticBestEffort
)

type SetupBuilder added in v0.3.0

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

SetupBuilder orchestrates the setup process.

func Setup added in v0.3.0

func Setup(features ...Feature) *SetupBuilder

Setup returns a new SetupBuilder with initial Feature's.

func (*SetupBuilder) Builders added in v0.17.0

func (s *SetupBuilder) Builders(
	builders ...Builder,
) *SetupBuilder

func (*SetupBuilder) CanInstall added in v0.3.0

func (s *SetupBuilder) CanInstall(tag any) bool

func (*SetupBuilder) Context added in v0.17.0

func (s *SetupBuilder) Context() (*Context, error)

func (*SetupBuilder) ExcludeSpecs added in v0.17.0

func (s *SetupBuilder) ExcludeSpecs(
	excludes ...Predicate[HandlerSpec],
) *SetupBuilder

func (*SetupBuilder) Features added in v0.17.0

func (s *SetupBuilder) Features(
	features ...Feature,
) *SetupBuilder

func (*SetupBuilder) Filters added in v0.17.0

func (s *SetupBuilder) Filters(
	providers ...FilterProvider,
) *SetupBuilder

func (*SetupBuilder) Handler added in v0.17.0

func (s *SetupBuilder) Handler() (handler Handler, buildErrors error)

func (*SetupBuilder) Handlers added in v0.17.0

func (s *SetupBuilder) Handlers(
	handlers ...any,
) *SetupBuilder

func (*SetupBuilder) NoInference added in v0.17.0

func (s *SetupBuilder) NoInference() *SetupBuilder

func (*SetupBuilder) Options added in v0.17.0

func (s *SetupBuilder) Options(
	options ...any,
) *SetupBuilder

func (*SetupBuilder) Specs added in v0.17.0

func (s *SetupBuilder) Specs(
	specs ...any,
) *SetupBuilder

func (*SetupBuilder) UseHandlerDescriptorFactory added in v0.17.0

func (s *SetupBuilder) UseHandlerDescriptorFactory(
	factory HandlerDescriptorFactory,
) *SetupBuilder

type Singleton

type Singleton struct {
	LifestyleProvider
}

Singleton LifestyleProvider providing same instance.

func (*Singleton) Init

func (s *Singleton) Init() error

type SkipFilters

type SkipFilters struct{}

SkipFilters skips all non-required filters.

type Strict

type Strict struct{}

Strict Binding's do not expand results.

type Timespan added in v0.11.0

type Timespan time.Duration

func (Timespan) Format added in v0.11.0

func (t Timespan) Format(format string) string

type Trampoline

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

func (*Trampoline) Callback

func (t *Trampoline) Callback() any

func (*Trampoline) CanBatch added in v0.10.0

func (t *Trampoline) CanBatch() bool

func (*Trampoline) CanDispatch

func (t *Trampoline) CanDispatch(
	handler any,
	binding Binding,
) (reset func(), approved bool)

func (*Trampoline) CanFilter

func (t *Trampoline) CanFilter() bool

func (*Trampoline) CanInfer

func (t *Trampoline) CanInfer() bool

func (*Trampoline) Dispatch

func (t *Trampoline) Dispatch(
	callback any,
	handler any,
	greedy bool,
	composer Handler,
) HandleResult

func (*Trampoline) Policy

func (t *Trampoline) Policy() Policy

func (*Trampoline) Result

func (t *Trampoline) Result(
	many bool,
) (any, *promise.Promise[any])

func (*Trampoline) SetResult

func (t *Trampoline) SetResult(result any)

func (*Trampoline) Source added in v0.4.0

func (t *Trampoline) Source() any

type TraversalCircularityError

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

TraversalCircularityError reports a traversal circularity.

func (TraversalCircularityError) Culprit

func (TraversalCircularityError) Error

type TraversalVisitor

type TraversalVisitor interface {
	VisitTraversal(node Traversing) (stop bool, err error)
}

TraversalVisitor is called during traversal.

type TraversalVisitorFunc

type TraversalVisitorFunc func(node Traversing) (stop bool, err error)

func (TraversalVisitorFunc) VisitTraversal

func (f TraversalVisitorFunc) VisitTraversal(node Traversing) (bool, error)

type Traversing

type Traversing interface {
	Parent() Traversing
	Children() []Traversing
	Traverse(axis TraversingAxis, visitor TraversalVisitor) error
}

Traversing represents a node in a graph.

type TraversingAxis

type TraversingAxis uint

TraversingAxis defines a path of traversal.

const (
	TraverseSelf TraversingAxis = iota
	TraverseRoot
	TraverseChild
	TraverseSibling
	TraverseAncestor
	TraverseDescendant
	TraverseDescendantReverse
	TraverseSelfOrChild
	TraverseSelfOrSibling
	TraverseSelfOrAncestor
	TraverseSelfOrDescendant
	TraverseSelfOrDescendantReverse
	TraverseSelfSiblingOrAncestor
)

type UnresolvedArgError added in v0.3.0

type UnresolvedArgError struct {
	Reason error
	// contains filtered or unexported fields
}

UnresolvedArgError reports a failed resolve an arg.

func (*UnresolvedArgError) Error added in v0.3.0

func (e *UnresolvedArgError) Error() string

func (*UnresolvedArgError) Unwrap added in v0.3.0

func (e *UnresolvedArgError) Unwrap() error

type Void added in v0.10.0

type Void = struct{}

Void is friendly name for nothing.

Directories

Path Synopsis
api
tools
go

Jump to

Keyboard shortcuts

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