1*f485bd44SEd Tanous // SPDX-License-Identifier: Apache-2.0 2*f485bd44SEd Tanous // SPDX-FileCopyrightText: Copyright OpenBMC Authors 3*f485bd44SEd Tanous 4*f485bd44SEd Tanous #pragma once 5*f485bd44SEd Tanous 6*f485bd44SEd Tanous #ifdef HAVE_ZSTD 7*f485bd44SEd Tanous #include <zstd.h> 8*f485bd44SEd Tanous #endif 9*f485bd44SEd Tanous 10*f485bd44SEd Tanous #include <boost/beast/core/flat_buffer.hpp> 11*f485bd44SEd Tanous 12*f485bd44SEd Tanous #include <optional> 13*f485bd44SEd Tanous #include <span> 14*f485bd44SEd Tanous 15*f485bd44SEd Tanous namespace bmcweb 16*f485bd44SEd Tanous { 17*f485bd44SEd Tanous class ZstdCompressor 18*f485bd44SEd Tanous { 19*f485bd44SEd Tanous boost::beast::flat_buffer compressionBuf; 20*f485bd44SEd Tanous 21*f485bd44SEd Tanous #ifdef HAVE_ZSTD 22*f485bd44SEd Tanous ZSTD_CCtx* cctx = nullptr; 23*f485bd44SEd Tanous #endif 24*f485bd44SEd Tanous 25*f485bd44SEd Tanous public: 26*f485bd44SEd Tanous ZstdCompressor(const ZstdCompressor&) = delete; 27*f485bd44SEd Tanous ZstdCompressor(ZstdCompressor&&) = delete; 28*f485bd44SEd Tanous ZstdCompressor& operator=(const ZstdCompressor&) = delete; 29*f485bd44SEd Tanous ZstdCompressor& operator=(ZstdCompressor&&) = delete; 30*f485bd44SEd Tanous 31*f485bd44SEd Tanous ZstdCompressor() = default; 32*f485bd44SEd Tanous 33*f485bd44SEd Tanous // must be called before compress. 34*f485bd44SEd Tanous bool init(size_t sourceSize); 35*f485bd44SEd Tanous std::optional<std::span<const uint8_t>> compress( 36*f485bd44SEd Tanous std::span<const uint8_t> buffIn, bool more); 37*f485bd44SEd Tanous ~ZstdCompressor(); 38*f485bd44SEd Tanous }; 39*f485bd44SEd Tanous } // namespace bmcweb 40