#pragma once #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); // Iterate over all loaded caches. virtual void IterateLoadedCaches(std::function fn) = 0; }; // FIXME: only use ICacheLoader, not these functions. std::unique_ptr LoadCachedIndex(Config* config, const std::string& filename); optional LoadCachedFileContents(Config* config, const std::string& filename); void WriteToCache(Config* config, IndexFile& file);