15#if defined(libzip_FOUND)
20 class ZIPURLProtocol :
public TURLProtocol<ZIPURLProtocol, "ZIP"> {
29 class Request :
public IURLRequest {
32 explicit Request(
const IURLRequest& other) : IURLRequest(other) {}
35 explicit Request(
const URL& url,
const CachePolicy& cachePolicy) : IURLRequest(url, cachePolicy) {}
38 ~Request() noexcept override;
40 static_assert(URLRequest::isSmall<Request>);
43 class Response : public IURLResponse {
45 const SPtr<Archive> mArchive;
46 ZIPArchive::Entry mEntry;
50 explicit Response(
const URLRequest& request,
const SPtr<Archive>& archive, ZIPArchive::Entry entry);
53 ~Response() noexcept override;
57 [[nodiscard]] URLInputStream openInputStream() override;
59 [[nodiscard]] const URLResponse& getUnderlyingResponse() const;
64 HashMap<UUID, WPtr<Archive>> mActiveArchives;
67 ZIPURLProtocol(URLSession& session);
70 ~ZIPURLProtocol() noexcept override;
74 [[nodiscard]]
bool isRequestSupported(const URLRequest& request) final;
77 [[nodiscard]] Async<URLResponse> execute(Task& connection) final;
80 void notifyArchiveDestroyed(Archive* archive);
84 using ZIPURLRequest = ZIPURLProtocol::Request;
87 using ZIPURLResponse = ZIPURLProtocol::Response;
Definition Application.hpp:19
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25