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