21#include "util/Mutex.hpp"
23#include <boost/json/object.hpp>
27#include <shared_mutex>
29#include <unordered_map>
30#include <unordered_set>
42 std::chrono::steady_clock::time_point lastUpdated_;
43 std::optional<boost::json::object> response_;
52 put(boost::json::object response);
59 std::optional<boost::json::object>
67 std::chrono::steady_clock::time_point
77 std::chrono::steady_clock::duration cacheTimeout_;
78 std::unordered_map<std::string, util::Mutex<Entry, std::shared_mutex>> cache_;
81 shouldCache(std::string
const& cmd);
91 std::chrono::steady_clock::duration cacheTimeout,
92 std::unordered_set<std::string>
const& cmds
94 : cacheTimeout_(cacheTimeout)
96 for (
auto const& command : cmds) {
97 cache_.emplace(command, Entry{});
107 [[nodiscard]] std::optional<boost::json::object>
108 get(std::string
const& cmd)
const;
117 put(std::string
const& cmd, boost::json::object
const& response);
Cache of requests' responses with TTL support and configurable cacheable commands.
Definition ResponseExpirationCache.hpp:37
void invalidate()
Invalidate all entries in the cache.
Definition ResponseExpirationCache.cpp:92
std::optional< boost::json::object > get(std::string const &cmd) const
Get a response from the cache.
Definition ResponseExpirationCache.cpp:66
ResponseExpirationCache(std::chrono::steady_clock::duration cacheTimeout, std::unordered_set< std::string > const &cmds)
Construct a new Cache object.
Definition ResponseExpirationCache.hpp:90
void put(std::string const &cmd, boost::json::object const &response)
Put a response into the cache if the request should be cached.
Definition ResponseExpirationCache.cpp:80
This namespace contains various utilities.
Definition AccountUtils.hpp:30