#include "config.h" #include "serialize.hpp" #include #include #include #include #include #include // Register class version with Cereal CEREAL_CLASS_VERSION(phosphor::led::Serialize, CLASS_VERSION) namespace phosphor { namespace led { namespace fs = std::filesystem; bool Serialize::getGroupSavedState(const std::string& objPath) const { return savedGroups.contains(objPath); } void Serialize::storeGroups(const std::string& group, bool asserted) { // If the name of asserted group does not exist in the archive and the // Asserted property is true, it is inserted into archive. // If the name of asserted group exist in the archive and the Asserted // property is false, entry is removed from the archive. auto iter = savedGroups.find(group); if (iter != savedGroups.end() && asserted == false) { savedGroups.erase(iter); } if (iter == savedGroups.end() && asserted) { savedGroups.emplace(group); } auto dir = path.parent_path(); if (!fs::exists(dir)) { fs::create_directories(dir); } std::ofstream os(path.c_str(), std::ios::binary); cereal::JSONOutputArchive oarchive(os); oarchive(savedGroups); } void Serialize::restoreGroups() { if (!fs::exists(path)) { lg2::info("File does not exist, FILE_PATH = {PATH}", "PATH", path); return; } try { std::ifstream is(path.c_str(), std::ios::in | std::ios::binary); cereal::JSONInputArchive iarchive(is); iarchive(savedGroups); } catch (const cereal::Exception& e) { lg2::error("Failed to restore groups, ERROR = {ERROR}", "ERROR", e); fs::remove(path); } } } // namespace led } // namespace phosphor