update middleware

This commit is contained in:
2026-03-02 17:07:21 +03:00
parent 079ffa4a5f
commit eb1c583207

View File

@@ -17,7 +17,9 @@ type Middleware func(ctx context.Context, e *entry.Entry, handler Logger) (int,
// With add middleware to logger.
func With(logger Logger, mw ...Middleware) Logger {
switch len(mw) {
num := len(mw)
switch num {
case 0:
return logger
case 1:
@@ -26,27 +28,17 @@ func With(logger Logger, mw ...Middleware) Logger {
}
}
lastI := len(mw) - 1
return func(ctx context.Context, data *entry.Entry) (int, error) {
var (
chainHandler func(context.Context, *entry.Entry) (int, error)
curI int
)
currHandler := logger
chainHandler = func(currentCtx context.Context, currentEntry *entry.Entry) (int, error) {
if curI == lastI {
return logger(currentCtx, currentEntry)
for i := num - 1; i > 0; i-- {
innerHandler := currHandler
currHandler = func(currentCtx context.Context, currentEntry *entry.Entry) (int, error) {
return mw[i](currentCtx, currentEntry, innerHandler)
}
curI++
n, err := mw[curI](currentCtx, currentEntry, chainHandler)
curI--
return n, err
}
return mw[0](ctx, data, chainHandler)
return mw[0](ctx, data, currHandler)
}
}