#ifndef CACHE_H_
#define CACHE_H_
#include <map>
#include <optional>
#include <string>
#include "vpd/cache_file.h"
#include "vpd/export.h"
#include "vpd/flashrom.h"
#include "vpd/sysfs.h"
#include "vpd/types.h"
#include "vpd/vpd_provider_interface.h"
namespace vpd {
class EXPORT Cache : public VpdProviderInterface {
public:
Cache() {}
Cache(const std::string& fake_flash_path,
unsigned int size,
const std::string& cache_dir,
const Sysfs& sysfs);
~Cache() override;
bool Valid(VpdRegion region) const override;
std::optional<std::string> GetValue(VpdRegion region,
const std::string& key) const override;
std::map<std::string, std::string> GetValues(VpdRegion region) const override;
bool WriteValues(
VpdRegion region,
const std::map<std::string, std::optional<std::string>>& pairs) override;
private:
std::map<std::string, std::string> ReadValues(VpdRegion region) const;
bool WriteBack(VpdRegion region,
const std::map<std::string, std::string>& kvs);
Flashrom GetFlashrom() const;
std::optional<std::string> programmer_args_;
Sysfs sysfs_;
std::map<VpdRegion, CacheFile> cache_file_ = {
{VpdRo, CacheFile(VpdRo)},
{VpdRw, CacheFile(VpdRw)},
};
};
}
#endif