level = $level; $this->threshold = $minCompressionSize; $this->maxDecompressionSize = $maxDecompressionSize; } public function willCompress(string $data) : bool{ return $this->threshold > -1 && strlen($data) >= $this->threshold; } /** * @throws DecompressionException */ public function decompress(string $payload) : string{ $result = @zlib_decode($payload, $this->maxDecompressionSize); if($result === false){ throw new DecompressionException("Failed to decompress data"); } return $result; } private static function zlib_encode(string $data, int $level) : string{ return Utils::assumeNotFalse(zlib_encode($data, ZLIB_ENCODING_RAW, $level), "ZLIB compression failed"); } public function compress(string $payload) : string{ if(function_exists('libdeflate_deflate_compress')){ return $this->willCompress($payload) ? libdeflate_deflate_compress($payload, $this->level) : self::zlib_encode($payload, 0); } return self::zlib_encode($payload, $this->willCompress($payload) ? $this->level : 0); } }