#pragma once #include #include #include #include #include struct Config; struct IndexFile; struct ICacheManager { struct FakeCacheEntry { std::string path; std::string content; std::string json; }; static std::unique_ptr Make(Config* config); static std::unique_ptr MakeFake( const std::vector& entries); virtual ~ICacheManager(); // Tries to load a cache for |path|, returning null if there is none. The // cache loader still owns the cache. virtual IndexFile* TryLoad(const std::string& path) = 0; // Takes the existing cache or loads the cache at |path|. May return null if // the cache does not exist. virtual std::unique_ptr TryTakeOrLoad(const std::string& path) = 0; // Takes the existing cache or loads the cache at |path|. Asserts the cache // exists. std::unique_ptr TakeOrLoad(const std::string& path); virtual optional LoadCachedFileContents( const std::string& filename) = 0; // Iterate over all loaded caches. virtual void IterateLoadedCaches(std::function fn) = 0; }; void WriteToCache(Config* config, IndexFile& file);