Documentation
¶
Overview ¶
Package decorators provides fluent decorator composition for workflows. Decorators add cross-cutting concerns (logging, metrics) around any interfaces.Workflow implementation without modifying it. The decorator implementations live once in go/foundation/decorator; this package keeps only the workflow-tier fluent builder — its wrap order (ARCHITECTURE.md#decorator-order), its "workflow" labels, and its recovery contract.
Index ¶
- type Builder
- func (b *Builder[In, Out]) Build() interfaces.Workflow[In, Out]
- func (b *Builder[In, Out]) WithLogging(logger interfaces.Logger) *Builder[In, Out]
- func (b *Builder[In, Out]) WithMetrics(m interfaces.Metrics) *Builder[In, Out]
- func (b *Builder[In, Out]) WithRecovery() *Builder[In, Out]
- func (b *Builder[In, Out]) WithTimeout(d time.Duration) *Builder[In, Out]
- func (b *Builder[In, Out]) WithTracing(tracer interfaces.Tracer) *Builder[In, Out]
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Builder ¶
Builder constructs a decorated workflow using the fluent API pattern. Each With* method enables a decorator; Build applies them inside-out: base → timeout → metrics → tracing → logging → recovery (recovery is outermost).
func NewBuilder ¶
func NewBuilder[In, Out any]( base interfaces.Workflow[In, Out], name string, ) *Builder[In, Out]
NewBuilder creates a new decorator builder wrapping the given base workflow. The name is used as a label/prefix for all cross-cutting concerns.
func (*Builder[In, Out]) Build ¶
func (b *Builder[In, Out]) Build() interfaces.Workflow[In, Out]
Build constructs the decorated workflow. Decorators are applied inside-out: base → timeout → metrics → tracing → logging → recovery (recovery is outermost). The composed decorator.Executor satisfies interfaces.Workflow (identical method set).
func (*Builder[In, Out]) WithLogging ¶
func (b *Builder[In, Out]) WithLogging(logger interfaces.Logger) *Builder[In, Out]
WithLogging adds a logging decorator that logs execution entry and failures at Debug level (failures are suppressed in staging/prod where level=info; the error is logged once at the transport layer instead of at every decorator tier).
func (*Builder[In, Out]) WithMetrics ¶
func (b *Builder[In, Out]) WithMetrics(m interfaces.Metrics) *Builder[In, Out]
WithMetrics adds a metrics decorator that records execution counts and durations via the interfaces.Metrics abstraction.
func (*Builder[In, Out]) WithRecovery ¶
WithRecovery adds a recovery decorator that catches panics and converts them to errors.
func (*Builder[In, Out]) WithTimeout ¶
WithTimeout adds a timeout decorator that enforces a per-execution deadline.
func (*Builder[In, Out]) WithTracing ¶
func (b *Builder[In, Out]) WithTracing(tracer interfaces.Tracer) *Builder[In, Out]
WithTracing adds a tracing decorator that creates a span per workflow execution, so the request cascade is visible in Tempo.