#include #include #include #include #pragma once namespace embed { enum Compression { None, Zstd }; class CompressionCtx { public: virtual ~CompressionCtx() = default; [[nodiscard]] virtual std::vector decompress(const std::span &entry) const = 0; }; class ZstdCompressionCtx final : public CompressionCtx { public: ZstdCompressionCtx(const std::span &dictionary); ~ZstdCompressionCtx(); [[nodiscard]] std::vector decompress(const std::span &entry) const override; }; std::unique_ptr make_compression_ctx(const Compression algo, const std::span &dict) { switch(algo) { case None: return nullptr; case Zstd: return std::make_unique(dict); } } } // namespace embed