minCompressionSize; } public function willCompress(string $data) : bool{ return $this->minCompressionSize !== null && strlen($data) >= $this->minCompressionSize; } /** * @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); } }