xref: /openbmc/bmcweb/http/zstd_compressor.hpp (revision f485bd44a22c27a2346a69d740764ea98b333bd1)
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