#include "Compressor.h"
#include "Gzip.h"
namespace panda { namespace protocol { namespace http { namespace compression {
static Compressor* create_gzip_compressor() { return new Gzip(); }
static const CompressorFactory gzip_factory = create_gzip_compressor;
static CompressorFactory brotli_factory = nullptr;
bool register_factory (Compression::Type compression, const CompressorFactory& factory) {
bool result = false;
if (compression == Compression::BROTLI && !brotli_factory) {
brotli_factory = factory;
result = true;
}
return result;
}
CompressorPtr instantiate (Compression::Type compression) noexcept {
CompressorFactory factory = nullptr;
switch (compression) {
/* zlib supports deflate and gzip streams uncompression. Use the same object */
case Compression::GZIP:
case Compression::DEFLATE:
factory = gzip_factory;
break;
case Compression::BROTLI:
factory = brotli_factory;
break;
default: break;
}
if (factory) return CompressorPtr(factory());
return CompressorPtr();
}
}}}}