#pragma once #include "fs/Api.h" #include #include #include #include #include #include "fs/zip/ZipPack.h" namespace fs { ////////////////////////////////////////////////////////////////////////// class ISource; class IStreamSink; class ISink; ////////////////////////////////////////////////////////////////////////// class FS_API ZipWriter { public: //0 - no compression (Store) //9 - max compression (Deflate) using Compression = uint8_t; ZipWriter(ISink& sink); ~ZipWriter(); tl::result addBuffer(tl::string name, Compression compression, tl::span buffer); tl::result addBuffer(tl::string name, time_t lastModificationTime, Compression compression, tl::span buffer); tl::result addBuffer(tl::string name, tl::span comment, tl::span extraField, time_t lastModificationTime, Compression compression, tl::span buffer); tl::result addFile(tl::string name, Compression compression, ISource& source); tl::result addFile(tl::string name, time_t lastModificationTime, Compression compression, ISource& source); tl::result addFile(tl::string name, tl::span comment, tl::span extraField, time_t lastModificationTime, Compression compression, ISource& source); void finish(); private: tl::result _addSource(tl::string name, tl::span comment, tl::span extraField, time_t lastModificationTime, Compression compression, zip_source* source); ISink& m_sink; tl::unique_ptr m_zipArchive; }; ////////////////////////////////////////////////////////////////////////// }