/* * Copyright (c) 2025-2026, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include namespace HTTP { class MemoryCache : public RefCounted { public: struct Entry { u64 vary_key { 0 }; u32 status_code { 0 }; ByteString reason_phrase; NonnullRefPtr request_headers; NonnullRefPtr response_headers; ByteBuffer response_body; UnixDateTime request_time; UnixDateTime response_time; }; static NonnullRefPtr create(); Optional open_entry(URL::URL const&, StringView method, HeaderList const& request_headers, CacheMode); void create_entry(URL::URL const&, StringView method, HeaderList const& request_headers, UnixDateTime request_time, u32 status_code, ByteString reason_phrase, HeaderList const& response_headers); void finalize_entry(URL::URL const&, StringView method, HeaderList const& request_headers, u32 status_code, HeaderList const& response_headers, ByteBuffer response_body); private: HashMap, IdentityHashTraits> m_pending_entries; HashMap, IdentityHashTraits> m_complete_entries; }; }