getEnforceMiddleware<T> function

Middleware<T> getEnforceMiddleware <T>(
  1. Middleware<T> beforeMiddleware,
  2. Middleware<T> middleware,
  3. Middleware<T> afterMiddleware
)

Runs middleware before and after the main

Example:

getEnforceMiddleware(
  prepareData,
  sendData,
  clearData
);

Implementation

Middleware<T> getEnforceMiddleware<T>(
  Middleware<T> beforeMiddleware,
  Middleware<T> middleware,
  Middleware<T> afterMiddleware,
) {
  return (T context, FutureOr<void> Function() next) async {
    var beforeCalled = await wrapMiddlewareNextCall(context, beforeMiddleware);

    if (!beforeCalled) {
      return;
    }

    var middlewareCalled = await wrapMiddlewareNextCall(context, middleware);

    if (!middlewareCalled) {
      return;
    }

    return afterMiddleware(context, next);
  };
}