package middleware
import
type InitializeInput struct {
Parameters interface{}
}
type InitializeOutput struct {
Result interface{}
}
type InitializeHandler interface {
HandleInitialize(ctx context.Context, in InitializeInput) (
out InitializeOutput, metadata Metadata, err error,
)
}
type InitializeMiddleware interface {
ID() string
HandleInitialize(ctx context.Context, in InitializeInput, next InitializeHandler) (
out InitializeOutput, metadata Metadata, err error,
)
}
func ( string, func(context.Context, InitializeInput, InitializeHandler) (InitializeOutput, Metadata, error)) InitializeMiddleware {
return initializeMiddlewareFunc{
id: ,
fn: ,
}
}
type initializeMiddlewareFunc struct {
id string
fn func(context.Context, InitializeInput, InitializeHandler) (
InitializeOutput, Metadata, error,
)
}
func ( initializeMiddlewareFunc) () string { return .id }
func ( initializeMiddlewareFunc) ( context.Context, InitializeInput, InitializeHandler) (
InitializeOutput, Metadata, error,
) {
return .fn(, , )
}
var _ InitializeMiddleware = (initializeMiddlewareFunc{})
type InitializeStep struct {
ids *orderedIDs
}
func () *InitializeStep {
return &InitializeStep{
ids: newOrderedIDs(),
}
}
var _ Middleware = (*InitializeStep)(nil)
func ( *InitializeStep) () string {
return "Initialize stack step"
}
func ( *InitializeStep) ( context.Context, interface{}, Handler) (
interface{}, Metadata, error,
) {
:= .ids.GetOrder()
var InitializeHandler = initializeWrapHandler{Next: }
for := len() - 1; >= 0; -- {
= decoratedInitializeHandler{
Next: ,
With: [].(InitializeMiddleware),
}
}
:= InitializeInput{
Parameters: ,
}
, , := .HandleInitialize(, )
return .Result, ,
}
func ( *InitializeStep) ( string) (InitializeMiddleware, bool) {
, := .ids.Get()
if ! {
return nil, false
}
return .(InitializeMiddleware),
}
func ( *InitializeStep) ( InitializeMiddleware, RelativePosition) error {
return .ids.Add(, )
}
func ( *InitializeStep) ( InitializeMiddleware, string, RelativePosition) error {
return .ids.Insert(, , )
}
func ( *InitializeStep) ( string, InitializeMiddleware) (InitializeMiddleware, error) {
, := .ids.Swap(, )
if != nil {
return nil,
}
return .(InitializeMiddleware), nil
}
func ( *InitializeStep) ( string) (InitializeMiddleware, error) {
, := .ids.Remove()
if != nil {
return nil,
}
return .(InitializeMiddleware), nil
}
func ( *InitializeStep) () []string {
return .ids.List()
}
func ( *InitializeStep) () {
.ids.Clear()
}
type initializeWrapHandler struct {
Next Handler
}
var _ InitializeHandler = (*initializeWrapHandler)(nil)
func ( initializeWrapHandler) ( context.Context, InitializeInput) (
InitializeOutput, Metadata, error,
) {
, , := .Next.Handle(, .Parameters)
return InitializeOutput{
Result: ,
}, ,
}
type decoratedInitializeHandler struct {
Next InitializeHandler
With InitializeMiddleware
}
var _ InitializeHandler = (*decoratedInitializeHandler)(nil)
func ( decoratedInitializeHandler) ( context.Context, InitializeInput) (
InitializeOutput, Metadata, error,
) {
return .With.HandleInitialize(, , .Next)
}
type InitializeHandlerFunc func(context.Context, InitializeInput) (InitializeOutput, Metadata, error)
func ( InitializeHandlerFunc) ( context.Context, InitializeInput) (InitializeOutput, Metadata, error) {
return (, )
}
var _ InitializeHandler = InitializeHandlerFunc(nil)