public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next)
{
if (!self::hasAttribute($request, EncodingNegotiator::KEY)) {
throw new RuntimeException('Gzip middleware needs EncodingNegotiator executed before');
}
$response = $next($request, $response);
$resolver = $this->resolver ?: new Transformers\Encoder();
$encoding = EncodingNegotiator::getEncoding($request);
$transformer = $resolver->resolve($encoding);
if ($transformer) {
$body = $response->getBody();
return $response->withHeader('Content-Encoding', $encoding)->withBody($transformer($body, self::createStream($body)));
}
return $response;
}